【虎彡】字符串变色、移动小程序(最终版)解决方案
【虎彡】字符串变色、移动小程序(最终版)
感谢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
感谢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