📄 yk.asm
字号:
data segment ;定义数据段
man db 3
db 01,7,0,0
db 04,7,1,0
db 13h,7,1,0
count dw ? ;包含字符的个数
pointer dw ? ;字符的ASCⅡ代码
line db ? ;行
col db ? ;列
meg1 db '*********************************************************************',0dh,0ah
db ' Please make a choice!(1 man or 2 exit)',0dh,0ah
db '*********************************************************************',0dh,0ah,'$'
meg2 db 0dh,0ah,'The choice is wrong,please chooce again!',0dh,0ah,'$'
data ends
code segment ;定义代码段
assume cs:code,ds:data
main proc far
start: push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
k3:
lea dx,meg1 ;提示信息作出选择
mov ah,9
int 21h
mov ah,1
int 21h
cmp al,31h ;判断是否选择1
jz k1
cmp al,32h
jz k2 ;判断是否选择2
lea dx,meg2
mov ah,9
int 21h
jmp k3
k1:
call clear_screen ;开始小人移动程序
lea di,man
mov dh,10
mov dl,10
call move_shape
k2: ret
main endp
clear_screen proc ;清屏子程序
push ax
push bx
push cx
push dx
mov ah,6
mov al,0
mov ch,0
mov cl,0
mov dh,40
mov dl,79
mov bh,7
int 10h
pop dx
pop cx
pop bx
pop ax
ret
clear_screen endp
move_shape proc ;小人移动子程序
push ax
push bx
push cx
push dx
push di
mov ah,0fh ;读当前显示状态
int 10h
sub ch,ch
mov cl,[di]
inc di
mov count,cx ;字符个数
mov pointer,di ;字符代码
mov line,dh ;行
mov col,dl ;列
plot_next:
add dh,[di+2]
add dl,[di+3]
cmp dl,79
jb mov_crsr
call erase
pop di
pop dx
pop cx
pop bx
pop ax
ret
mov_crsr: mov ah,2 ;设置光标位置
int 10h
mov al,[di]
mov bl,[di+1]
push cx
mov cx,1
mov ah,9
int 10h
pop cx
add di,4 ;指向下一个字符
loop plot_next
call dealy ;调用延时子程序
call erase ;调用小人单步移动子程序
jmp plot_next
move_shape endp
erase proc ;小人单步移动子程序
mov cx,count
mov di,pointer
mov dh,line
mov dl,col
erase_next: add dh,[di+2]
add dl,[di+3]
mov ah,2
int 10h
mov al,[di]
mov bl,0
push cx
mov cx,1
mov ah,9
int 10h
pop cx
add di,4
loop erase_next
mov cx,count
mov di,pointer
mov dh,line
cmp dl,20 ;开始的18列斜向上走
jb up
cmp dl,30
jb down
mov dh,line
inc col
mov dl,col
ret
up: dec line ;行号减1
mov dh,line
inc col ;列号加1
mov dl,col
ret
down: inc line
mov dh,line
inc col
mov dl,col
ret
erase endp
dealy proc ;延时子程序
push cx
push dx
mov dx,2500h
d11: mov cx,20000
d12: loop d12
dec dx
jnz d11
pop dx
pop cx
ret
dealy endp
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -