-
Notifications
You must be signed in to change notification settings - Fork 0
/
draw.ASM
78 lines (70 loc) · 1.28 KB
/
draw.ASM
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
read_c equ 0h ; equ: 伪指令,类似于define
key_rom equ 16h
up equ 48h
down equ 50h
right equ 4dh
left equ 4bh
block equ 0dbh
esc1 equ 1bh
video segment at 0b800h
wd_buff label word
v_buff db 25 * 80 * 2 dup(?)
video ends
pro_nam segment
main proc far
assume cs:pro_nam, es:video
start:
push ds
sub ax,ax
push ax
mov ax,video
mov es,ax
mov cx,80 * 25 ; count
mov bx,0 ; start of buff
clear: ; 清空屏幕
mov es:[wd_buff+bx],0700h
inc bx
inc bx
loop clear
; screen pointer will be in CX register
; set screen pointer to center of screen
mov ch,12d
mov cl,40d
get_char: ; 从键盘获取字符
mov ah,read_c
int key_rom
cmp al,esc1 ; 输入escape则退出
jz exit
mov al,ah
cmp al,up
jnz not_up
dec ch ; 是UP则row-1
not_up:
cmp al,down
jnz not_down
inc ch ; 是DOWN则row+1
not_down:
cmp al,right
jnz not_right
inc cl ; 是RIGHT则col+1
not_right:
cmp al,left
jnz lite_it
dec cl ; 是LEFT则col-1
lite_it:
; 在当前行号和列号的位置写入方块字符
; (bx)=行号*80*2+列号*2
mov al,160d
mul ch
mov bl,cl
rol bl,1
mov bh,0
add bx,ax
mov al,block
mov es:[v_buff+bx],al
jmp get_char
exit:
ret
main endp
pro_nam ends
end start