+ -
当前位置:首页 → 问答吧 → 【虎彡】字符变色的小程序,支持8个按键,修改重发

【虎彡】字符变色的小程序,支持8个按键,修改重发

时间:2010-12-16

来源:互联网

首先输入昵称(10个字符)回车后 字(黑)
R变红 B变蓝 G变绿 I高亮 S白底黑字 L一直变色 按ESC变黑(返回初始) Q退出
(本来还有个暂停变色 丢了55555) 


感谢va_zaixuexi大哥shzhfu(牧人)大叔帮我找出了错误所在 

http://download.csdn.net/source/2915715 免分下载

源程序:
;****************************************************************************** 
data segment 
 buff db 11,0,11 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接收字符,共11个(包括回车)
  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 si,one 
  mov cl,buff[si] ;cl为输入字节数 
  add cl,0ah ;oah为YOUR NAME:字节数 
  mov bx,0 
  qing:mov byte ptr es:[bx],' ' 
  add bx,2 
  loop qing ;清屏 
   
   
  pop si 
  pop di  
  pop cx  
  pop bx 
   
  ret 
xian ENDP 
;----------------------------------------------------------------------------- 
color proc near 

  push ax 
  push bx 
  push cx 
  mov cx,count 
  xx: mov bx,one 
  mov cx,count  
  sx:and byte ptr es:[bx],0 ;颜色清除  
  add bx,2 
  loop sx 
  X: mov ah,0 
  int 16h ;BIOS中断,读取键盘缓冲区  
  mov ah,1 ;ah=00000001(蓝色) 
  cmp al,'i' 
  jz gaol  
  cmp al,'s' 
  jz shan  
  cmp al,'r' 
  jz red 
  cmp al,'g' 
  jz green 
  cmp al,'b' 
  jz blue 
  cmp al,'l' 
  je bians 
  cmp al,'q' 
  jnz x 
  jmp over 
   
 shan: mov ah,00010000b ;闪烁
 gaol: shl ah,1 ;高亮
 red : shl ah,1 ;红
green: shl ah,1 ;绿
 blue: mov bx,one ;蓝
  mov cx,count ;cx=2000 
  s: and byte ptr es:[bx],01110000b 
  or es:[bx],ah ;颜色属性写入所有奇地址 
  add bx,2 
  loop s 
  jmp x ;无条件转到X
bians: mov cx,2  
  push cx  
  mov cl,buff[1] 
  mov ch,0 ;cx取字符个数
  mov bx,count+1 ;BX指向显存中间字符位置
  bs: inc byte ptr es:[bx]  
  add bx,2  
  loop bs 
  pop cx ;变色,死循环
  in al,60H ;利用60号键盘端口检测ESC键跳出循环
  cmp al,01h ;ESC的扫描码 
  jz exit ;直接用JZ跳不到XX
  loop bians 
  exit:jmp xx  
  over: pop cx 
  pop bx 
  pop ax 
  ret 
 color endp 
code ends 
end start 
;********************************************************************* 

作者: znxllyuan   发布时间: 2010-12-16

睡觉 下次改成 带移动的 哦也~

作者: znxllyuan   发布时间: 2010-12-16