📄 字符图形.asm
字号:
data segment
array db 200 dup(?)
x db 1
y db 0
z db 0
msg db 'This is a program of char drawing.(Press "Esc" to exit)','$'
menu db 'menu','$'
area db 'drawing area','$'
data ends
program segment
main proc far
assume cs:program,ds:data
start:
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
call interface ;显示界面
call table ;显示图形元素表
call draw ;用字符元素画图
ret ;返回DOS
main endp
interface proc near ;界面设计
mov ah,09
mov dx,offset msg ;显示信息
int 21h
mov bx,20
mov x,2
mov y,24
midline: ;显示分界线
mov ah,2
mov bh,0
mov dh,x ;初始化光标
mov dl,y
int 10h
mov bh,0
mov cx,1
mov al,2ah
mov ah,0ah
int 10h
inc x
dec bx
jnz midline
mov y,0
mov bx,79
sideline: ;显示边框线
mov ah,2
mov bh,0
mov dh,1
mov dl,y
int 10h
mov bh,0
mov cx,1
mov al,2ah
mov ah,0ah
int 10h
mov ah,2
mov bh,0
mov dh,22
mov dl,y
int 10h
mov bh,0
mov cx,1
mov al,2ah
mov ah,0ah
int 10h
inc y
dec bx
jnz sideline
title: ;显示标题
mov ah,2
mov bh,0
mov dh,2
mov dl,9
int 10h
mov dx,offset menu
mov ah,09h
int 21h
mov ah,2
mov bh,0
mov dh,2
mov dl,45
int 10h
mov dx,offset area
mov ah,09h
int 21h
ret
interface endp
table proc near
mov x,4
mov y,7
mov si,0
digit: ;制作图形元素表
mov ah,2
mov bh,0
mov dh,x ;定位光标
mov dl,y
int 10h
mov al,z
inc al
mov array[si],al ;显示数字并存入ASCII码
mov ax,si
add ax,30h
mov bh,0
mov cx,1
mov ah,0ah
int 10h
add y,7
char:
mov ah,2
mov bh,0
mov dh,x ;重定位光标
mov dl,y
int 10h
mov ah,0ah
mov bh,0 ;显示字符
mov al,z
inc al
mov cx,1
int 10h
inc si
inc z
cmp z,09h
ja exit
inc x
mov y,7
jmp digit
exit:
ret
table endp
draw proc near ;画图
mov x,4
mov y,26
mov ah,2
mov bh,0
mov dh,4
mov dl,26 ;初始化光标
int 10h
judge: ;判断输入键
mov ah,0
int 16h
cmp ah,48h ;方向键
je up
cmp ah,50h
je down
cmp ah,4dh
je right
cmp ah,4bh
je left
cmp ah,01h ;ESC键
jnz num
mov ah,2 ;设置返回DOS时光标的位置
mov bh,0
mov dh,20
int 10h
ret ;返回主程序
num:
cmp al,30h ;数字键
jae display
jmp judge
display:
cmp al,39h
ja judge
and ax,00ffh
sub ax,30h
mov si,ax
mov al,array[si] ;显示相应字符
mov bh,0
mov cx,1
mov ah,0ah
int 10h
jmp judge
up: ;上移
dec x
cmp x,4
jb no_up
jmp move
no_up: ;超出上界
mov x,4
jmp move
down: ;下移
inc x
cmp x,20
ja no_down
jmp move
no_down: ;超出下界
mov x,20
jmp move
right: ;右移
inc y
cmp y,78
ja no_right
jmp move
no_right: ;超出右界
mov y,78
jmp move
left: ;左移
dec y
cmp y,26
jb no_left
jmp move
no_left: ;超出左界
mov y,26
move: ;重定位光标
mov ah,2
mov bh,0
mov dh,x
mov dl,y
int 10h
jmp judge
draw endp
program ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -