📄 nankai.asm
字号:
data segment
car db 120 ;定义字符图形表,共显示120个字符
db 06h,62,0,0 ;其中第一字节为显示的字符,第二字节为显示属性,三。四字节为
db 06h,62,0,1 ;行标,列标
db 06h,62,0,1
db 06h,62,0,1
db 06h,62,-1,0
db 06h,62,-1,0
db 06h,62, -1,0
db 06h,62,3,1
db 06h,62,0,1
db 06h,62,0,1
db 06h,62,1,-3
db 06h,62,1,0
db 06h,62,1,0
db 06h,62,0,-1
db 06h,62,0,-1
db 06h,62,0,-1
db 06h,62,0,-1
db 06h,62,0,-1
db 06h,62,1,0
db 06h,62,1,0
db 06h,62,1,0
db 06h,62,1,0
db 06h,62,1,0
db 06h,62,1,0
db 06h,62,1,0
db 06h,62,1,0
db 06h,62,1,0
db 06h,62,-3,1
db 06h,62,0,1
db 06h,62,0,1
db 06h,62,0,1
db 06h,62,0,1
db 06h,62,0,1
db 06h,62,0,1
db 06h,62,0,1
db 06h,62,0,1
db 06h,62,1,-4
db 06h,62,1,0
db 06h,62,1,0
db 06h,62,-4,0
db 06h,62,-1,0
db 06h,62,-1,0
db 06h,62,0,1
db 06h,62,0,1
db 06h,62,0,1
db 06h,62,0,-4
db 06h,62,0,-1
db 06h,62, 0,-1
db 06h,62,-2,1
db 06h,62,1,1
db 06h,62 ,0,3
db 06h,62,-1,1
db 06h,62,-1,-2
db 06h,62,0,1
; db 06h,62,0,1
db 06h,62,0,1
db 06h,62,0,1
db 06h,62,0,1
db 06h,62,0,1
db 06h,62,1,0
db 06h,62,1,0
db 06h,62,1,0
db 06h,62,1,0
db 06h,62,1,0
db 06h,62,1,0
db 06h,62,1,0
db 06h,62,1,0
db 06h,62,1,0
db 06h,62,-1,-1
db 06h,62,-8,6
db 06h,62,0,1
db 06h,62,0,1
db 06h,62,0,1
db 06h,62,0,1
db 06h,62,0,1
db 06h,62,-1,0
db 06h,62,-1,0
db 06h,62,-1,0
db 06h,62,-1,0
db 06h,62,0,-1
db 06h,62,0,-1
db 06h,62,0,3
db 06h,62,0,1
db 06h,62,0,1
db 06h,62,0,1
db 06h,62,0,1
db 06h,62,0,1
db 06h,62,0,1
db 06h,62,1,-2
db 06h,62,1,0
db 06h,62,1,0
db 06h,62,1,0
db 06h,62,1,0
db 06h,62,1,0
db 06h,62,1,0
db 06h,62,1,0
db 06h,62,1,0
db 06h,62,1,0
db 06h,62,1,0
db 06h,62,-7,1
db 06h,62,0,1
db 06h,62,0,1
db 06h,62,0,-4
db 06h,62,0,-1
db 06h,62,0,-1
db 06h,62,0,-1
db 06h,62,1,-1
db 06h,62,1,0
db 06h,62, 1,0
db 06h,62,1,0
db 06h,62,1,0
db 06h,62,1,-1
db 06h,62,1,-1
char_cnt dw ? ;
pointer dw ? ;
line_on db ? ;
col_on db ? ;
data ends
stack segment
db 2000 dup (0)
stack ends
code segment
assume cs:code,ds:data,ss:stack
main proc far
push ds ;使ax为0
sub ax,ax
push ax
mov ax,data
mov ds,ax
mov ah,0 ;置显示方式,04——图形格式,4色,象素320*200
mov al,4
int 10h
mov ah,0bh ;置彩色调色板,bh=0时为置背景色,此时bl=2为色彩象素代码
mov bh,0
mov bl,2
int 10h
mov ah,0bh ;置彩色调色板,bh=01h时为选调色板,此时bl=00为调色板号
mov bh,01h
mov bl,00
int 10h
call clear_screen ;调用清屏子程序
lea di,car ;取数据地址到di
mov dh,10 ;从第十行
mov dl,4 ; 第四列开始显示第一个字符
call move_shape ; 调用显示子程序
mov ah,8 ; 从键盘读一字符但不回显
int 21h ;
cmp al,'q' ; 所输入的字符与'q' 相比较,若等则结束显示,否则继续
jz exit
ret ; 主过程结束
main endp
clear_screen proc near ; 清屏子程序开始,将过程中用到的积存器压栈
push ax
push bx
push cx
push dx
mov ah,6 ;当前显示页上滚
mov al,0 ;al=滚动的行数
mov ch,0 ;ch=左上角行数
mov cl,0 ;cl=左上角列数
mov dh,120 ;dh=右下角行数
mov dl,200 ;dl=右下角列数
mov bh,7 ;bh=上滚时填补的空行的属性,07表正常
int 10h
pop dx
pop cx
pop bx
pop ax
ret ;清屏过程结束
clear_screen endp
move_shape proc near ;移动显示过程
push ax
push bx
push cx
push dx
push di
mov ah,0fh ;取当前显示方式,即前面所定义的显示方式,背景,调塞板等
int 10h
sub ch,ch ;使ch =0
mov cl,[di] ;将133送cl,控制循环133次
inc di
mov char_cnt,cx
mov pointer,di
mov line_on,dh
mov col_on,dl
mov_crsr:
add dh,[di+2] ;从数据表的第二行起,每行的第三个内容送dh,dh=光标所在行
add dl,[di+3] ;从数据表的第二行起,每行的第四个内容送dl,dl=光标所在列
mov ah ,2 ;置光标位置
int 10h ;
mov al,[di] ;从数据表的第二行起,每行的第一个内容送al=要显示的字符
mov bl,[di+1] ;从数据表的第二行起,每行的第二个内容送 bl=显示字符的属性
push cx
mov cx,1 ;写的次数
mov ah,09 ;写字符到当前光标处
int 10h ;
pop cx
add di,4 ;di指向数据表下一行的第一字节
loop mov_crsr ;若cx不为0,则循环
calL dly_qrtr ;调用延时子程序
pop di
pop dx
pop cx
pop bx
pop ax
ret
move_shape endp
dly_qrtr proc near ; 延时程序开始
push cx
push dx
mov dx,5000 ;外循环控制5000次
d11:mov cx,25000 ; 内循环控制25000次
d12:loop d12
dec dx ;dx 减一
jnz d11 ;非0继续循环
pop dx
pop cx
ret ;延时程序返回
dly_qrtr endp
exit:mov ah,4ch ;结束进程
int 21h
code ends
end main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -