⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 yk.asm

📁 汇编语言课程设计 (一)设计题目及要求 题目: “小人”行走的编程 要求: 先建立图形表
💻 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 + -