当前位置: 代码迷 >> 汇编语言 >> 【虎彡】字符串变色、移动小程序(最终版)解决方案
  详细解决方案

【虎彡】字符串变色、移动小程序(最终版)解决方案

热度:4901   发布时间:2013-02-26 00:00:00.0
【虎彡】字符串变色、移动小程序(最终版)
感谢va_zaixuexi大哥shzhfu(牧人)大叔帮我找出了错误所在
感谢圣凡哥让我有了灵感(PS:圣凡哥,3天我就做成了哦~嘿嘿)
感谢 汇编网的移动笑脸让我有了借鉴

首先输入昵称(支持249个字符)回车后无字是因为字是黑色
R变红 B变蓝 G变绿 I高亮 S白底黑字 [L一直变色 按ESC变黑(返回初始)P暂停变色 ][Y键移动 CTRL停止移动并返回(字符停在屏幕中间)] Q退出 “[]”中的按键只在第一个按键后使用(比如ESC、P键只在L键后使用)

整了3天的小程序 收获不小 很有乐趣 在看书之余动手做做小程序(真的很小很小,,)成功后很有成就感
还有些需要改进的,比如回车后看不到字(因为我忘了白字的字符属性了)比如按L一直变色再移动的话变色的位置不变(因为全屏变色太闪眼啦,字符一直变色移动暂时没时间做)
吼吼 下次做个时钟吧! 看到IF汇编和中断纠结了..慢慢消化

(本人知识有限,无编程语言基础、无数学英语基础看王爽老师的书【汇编语言】,第二本 IBM-PC汇编语言看到一半了,第一次自己动手整些小玩意,高手莫笑话)
[align=center][/align]

 资源上传无反应 直接上源程序
;*****************************************************************************  
data segment  
 buff db 200,0,200 dup (0)  
 nam db 'YOUR NAME:$'  
 one equ 1  
 count equ 2000
   
data ends  
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  
 code segment  
 assume cs:code,ds:data  
 start:  
  mov ax,data  
  mov ds,ax  
  mov ax,0b800h  
  mov es,ax  
   
  lea dx,nam  
  mov ah,09h  
  int 21h ;显示YOUR NAME:  
   
  call INPUT_NAME ;调用子程序INPUT_NAME 输入姓名  
   
  call xian ;调用子程序在屏幕中间显示字符串  


  call color ;调用子程序color变色  

  
  mov ax,4c00h  
  int 21h ;看不懂这个你可以果断ALT+F4  

;=============================================================================  

INPUT_NAME proc near  
  push ax  
  push dx  
  lea dx,buff  
  mov ah,0ah ;BUFF接收字符可接受200个(包括回车) 
  int 21h
   
  pop dx  
  pop ax  
  ret  
INPUT_NAME ENDP  

;------------------------------------------------------------------------------  

xian proc near  
  push bx  
  push cx  
  push di  
  push si  
  mov si,one  
  mov cl,buff[si]  
  mov ch,0 ;CX中为输入字符个数  
  lea bx,buff  
  add bx,2 ;指向BUFF缓冲区第一个字符  
  mov di,count ;di指向显存中间  
  two:
  mov al,ds:[bx]  
  mov es:[di],al ;传送字符  
  add di,2  
  inc bx  
  loop two ;所有存入字符传送到显存中间位置  
   
   
  mov cl,buff[si] ;cl为输入字节数  
  add cl,0ah ;oah为YOUR NAME:字节数  
  mov bx,0  
  qingp:
  mov byte ptr es:[bx],' '  
  add bx,2  
  loop qingp ;清屏 
 
   
   
  pop si  
  pop di  
  pop cx  
  pop bx  
   
  ret  
xian ENDP  
;-----------------------------------------------------------------------------  
color proc near  

  push ax  
  push bx  
  push cx 
   
   
  xx:
  call xian 
  mov bx,one  
  mov cx,count  
  sx:
  and byte ptr es:[bx],0 ;颜色清除  
  add bx,2  
  loop sx  
  X: 
  call xian
  mov ah,0  
  相关解决方案