【虎彡】字符变色的小程序,支持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
;*********************************************************************
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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28