- [somniumchase] 我一运行就说没有数字 01/01 11:44
- [游客] 为什么啊 08/07 15:36
- [游客] 如果想快一些 就改下面这里 dx值改成1H delay: push ax 04/19 02:53
- [lshhjx] 注释在程序中很重要,楼主不知道吗? 12/08 13:40
- [biaggi] 看不明白,在下還須學習 11/06 08:11
- [游客] 我运行的时候直接显示Unkown filename跳出了- -请问怎么改 06/16 21:44
- [游客] 勿庸置疑,注释是好习惯。与人方便自己方便。 04/12 10:33
- [游客] 老实说,看着真心累呀! 04/07 18:37
- [游客] 很无语,初学者就多看书,不要动不动要别人注释,基础打好了,再自己注释,这样比别人帮你注释好得多 12/17 19:43
- [dgkepu] 初学者:不懂,希望有多点注释带着学习学习! 12/07 20:52
- [游客] windows 7是一个64Bit操作系统,它不兼容DOS,无法识别16Bit系统。重装系统wind 02/28 21:05
- [游客] windows 7是一个64Bit操作系统,它不兼容DOS,无法识别16Bit系统。重装系统wind 02/28 21:05
- [466987333] 你好,高手,我想请教一个问题。 我用的是win7操作系统,32位的,里面没有找masm目录,是不是 12/12 17:30
- [lanfioncc] 那个太高级了。。。我还有点看不懂。。不过谢谢!!! 11/27 11:23
- [yc2010] 实验16中的 table: dw sub1,sub2,sub3,sub4 可不可以改成呢? 09/11 09:08
- [yc2010] mov bl,ah mov bh,0 add bx,bx ----------->这里为 09/07 21:03
- [yc2010] 为什么要add bx,bx呢? 09/07 20:55
- [yc2010] 那是不是像table[bx],ds[bx]....等(内存单元)都是表示一个字节呢? 09/06 21:10
- [masmaster] 杨季文的《80X86汇编语言程序设计教程》 09/01 12:52
- [游客] to masmaster shl左移4位,那al传进来的4,5,6位背景色不就没了. 为什 09/01 11:00
[2010-07-24 12:20] 练习:一个实时显示光标位置的小程序
这几天在学习bios的10h和16h中断方面的知识。 作为一个总结, 编写了这个程序。这个简单的程序就是一个光标只能在屏幕中间的窗口里任意游动, 并实时的显示光标位置。就这么简单。呵呵。程序运行在全屏dos模式比较好。
;----------------------------------------------------
1 ;Move direction key,Realtime display cursor position
2 ;filename:G.asm
3 assume cs:code,ds:data,ss:stack
4 data segment
5 msg1 db 'Move cursor',0
6 msg2 db 'Writed by Masmaster',0
7 msg3 db 'Press Q return DOS',0
8 data ends
9 code segment
10 stack segment stack
11 dw 128 dup (0)
12 stack ends
13 start:
14 mov ax,stack
15 mov ss,ax
16 mov sp,256
17 mov ax,data
18 mov ds,ax
19 ;
20 ;protec all general registers
21 push ax
22 push bx
23 push cx
24 push dx
25 push si
26 push di
27 push bp
28 push sp
29 ;
30 ;creat a window area
31 mov ah,6
32 mov bh,0f2h ;backgrand color
33 mov cx,0819h ;start coor:row:8,col:25
34 mov dx,1335h ;end coor :row:19,col:53
35 int 10h
36 ;
37 ;hide cursor
38 mov ah,1
39 mov cx,0100h
40 int 10h
41 ;
42 ;print hint message
43 mov si,offset msg1
44 mov dl,25
45 p1:
46 mov ah,2
47 mov dh,7
48 mov bh,0
49 int 10h
50 mov ah,9
51 mov al,[si]
52 mov bl,0fh
53 mov cx,1
54 int 10h
55 inc si
56 inc dl
57 cmp al,0
58 jnz p1
59 mov si,offset msg2
60 mov dl,35
61 p2:
62 mov ah,2
63 mov dh,20
64 mov bh,0
65 int 10h
66 mov ah,9
67 mov al,[si]
68 mov bl,0fh
69 mov cx,1
70 int 10h
71 inc si
72 inc dl
73 cmp al,0
74 jnz p2
75 ;
76 ;check keybuffer
77 ck: mov ah,11h
78 int 16h
79 jz ck
80 mov si,offset msg3
81 mov dl,25
82 p3:
83 mov ah,2
84 mov dh,7
85 mov bh,0
86 int 10h
87 mov ah,9
88 mov al,[si]
89 mov bl,0fh
90 mov cx,1
91 int 10h
92 inc si
93 inc dl
94 cmp al,0
95 jnz p3
96 ;
97 ;put a char onto window
98 mov ah,2
99 mov dh,13
100 mov dl,40
101 mov bh,0
102 int 10h
103 mov ax,0a20h
104 mov cx,1
105 int 10h
106 ;
107 ;main fram,control cursor
108 main:
109 in al,60h
110 cmp al,10h ;press Q,quit
111 jz over
112 mov ah,0 ;monitor keyboard buffer
113 int 16h
114 cmp ax,4800h ;up direction
115 jz up
116 cmp ax,5000h ;down direction
117 jz down
118 cmp ax,4b00h ;left direction
119 jz left
120 cmp ax,4d00h ;right direction
121 jz right
122 jmp main ;
123 up:
124 call coor
125 mov ax,0a20h
126 mov cx,1
127 int 10h
128 mov ah,3
129 int 10h
130 dec dh
131 cmp dh,7
132 jz down
133 mov ah,2
134 int 10h
135 mov ax,0a1eh
136 mov cx,1
137 int 10h
138 jmp main
139 down:
140 call coor
141 mov ax,0a20h
142 mov cx,1
143 int 10h
144 mov ah,3
145 int 10h
146 inc dh
147 cmp dh,20
148 jz up
149 mov ah,2
150 int 10h
151 mov ax,0a1fh
152 mov cx,1
153 int 10h
154 jmp main
155 left:
156 call coor
157 mov ax,0a20h
158 mov cx,1
159 int 10h
160 mov ah,3
161 int 10h
162 dec dl
163 cmp dl,24
164 jz right
165 mov ah,2
166 int 10h
167 mov ax,0a11h
168 mov cx,1
169 int 10h
170 jmp main
171 right:
172 call coor
173 mov ax,0a20h
174 mov cx,1
175 int 10h
176 mov ah,3
177 int 10h
178 inc dl
179 cmp dl,54
180 jz left
181 mov ah,2
182 int 10h
183 mov ax,0a10h
184 mov cx,1
185 int 10h
186 jmp main
187 ;
188 over: mov ax,0a20h
189 mov cx,1
190 int 10h
191 call clear
192 ;restore all general registers
193 pop sp
194 pop bp
195 pop di
196 pop si
197 pop dx
198 pop cx
199 pop bx
200 pop ax
201 ;
202 ;retuen dos
203 mov ah,4ch
204 int 21h
205 ;
206 ;sub-proc,display cursor position
207 coor proc uses ax bx dx di
208 mov ax,0b800h
209 mov es,ax
210 mov bl,10
211 mov di,160*7+49*2 ;row:7,col:49
212 push dx
213 mov al,dh
214 and ax,0ffh
215 div bl
216 or ax,3030h
217 mov es:[di],al
218 mov es:[di+2],ah
219 mov al,':'
220 mov es:[di+4],al
221 pop dx
222 mov al,dl
223 and ax,0ffh
224 div bl
225 or ax,3030h
226 mov es:[di+6],al
227 mov es:[di+8],ah
228 ret
229 coor endp
230 ;
231 ;clear
232 clear proc
233 mov ah,1
234 mov cx,0607h
235 int 10h
236 mov ax,600h
237 mov cx,0
238 mov dx,184fh
239 int 10h
240 mov ah,2
241 mov dx,0
242 int 10h
243 ret
244 clear endp
245 code ends
246 end start
;----------------------------------------------------
;----------------------------------------------------
1 ;Move direction key,Realtime display cursor position
2 ;filename:G.asm
3 assume cs:code,ds:data,ss:stack
4 data segment
5 msg1 db 'Move cursor',0
6 msg2 db 'Writed by Masmaster',0
7 msg3 db 'Press Q return DOS',0
8 data ends
9 code segment
10 stack segment stack
11 dw 128 dup (0)
12 stack ends
13 start:
14 mov ax,stack
15 mov ss,ax
16 mov sp,256
17 mov ax,data
18 mov ds,ax
19 ;
20 ;protec all general registers
21 push ax
22 push bx
23 push cx
24 push dx
25 push si
26 push di
27 push bp
28 push sp
29 ;
30 ;creat a window area
31 mov ah,6
32 mov bh,0f2h ;backgrand color
33 mov cx,0819h ;start coor:row:8,col:25
34 mov dx,1335h ;end coor :row:19,col:53
35 int 10h
36 ;
37 ;hide cursor
38 mov ah,1
39 mov cx,0100h
40 int 10h
41 ;
42 ;print hint message
43 mov si,offset msg1
44 mov dl,25
45 p1:
46 mov ah,2
47 mov dh,7
48 mov bh,0
49 int 10h
50 mov ah,9
51 mov al,[si]
52 mov bl,0fh
53 mov cx,1
54 int 10h
55 inc si
56 inc dl
57 cmp al,0
58 jnz p1
59 mov si,offset msg2
60 mov dl,35
61 p2:
62 mov ah,2
63 mov dh,20
64 mov bh,0
65 int 10h
66 mov ah,9
67 mov al,[si]
68 mov bl,0fh
69 mov cx,1
70 int 10h
71 inc si
72 inc dl
73 cmp al,0
74 jnz p2
75 ;
76 ;check keybuffer
77 ck: mov ah,11h
78 int 16h
79 jz ck
80 mov si,offset msg3
81 mov dl,25
82 p3:
83 mov ah,2
84 mov dh,7
85 mov bh,0
86 int 10h
87 mov ah,9
88 mov al,[si]
89 mov bl,0fh
90 mov cx,1
91 int 10h
92 inc si
93 inc dl
94 cmp al,0
95 jnz p3
96 ;
97 ;put a char onto window
98 mov ah,2
99 mov dh,13
100 mov dl,40
101 mov bh,0
102 int 10h
103 mov ax,0a20h
104 mov cx,1
105 int 10h
106 ;
107 ;main fram,control cursor
108 main:
109 in al,60h
110 cmp al,10h ;press Q,quit
111 jz over
112 mov ah,0 ;monitor keyboard buffer
113 int 16h
114 cmp ax,4800h ;up direction
115 jz up
116 cmp ax,5000h ;down direction
117 jz down
118 cmp ax,4b00h ;left direction
119 jz left
120 cmp ax,4d00h ;right direction
121 jz right
122 jmp main ;
123 up:
124 call coor
125 mov ax,0a20h
126 mov cx,1
127 int 10h
128 mov ah,3
129 int 10h
130 dec dh
131 cmp dh,7
132 jz down
133 mov ah,2
134 int 10h
135 mov ax,0a1eh
136 mov cx,1
137 int 10h
138 jmp main
139 down:
140 call coor
141 mov ax,0a20h
142 mov cx,1
143 int 10h
144 mov ah,3
145 int 10h
146 inc dh
147 cmp dh,20
148 jz up
149 mov ah,2
150 int 10h
151 mov ax,0a1fh
152 mov cx,1
153 int 10h
154 jmp main
155 left:
156 call coor
157 mov ax,0a20h
158 mov cx,1
159 int 10h
160 mov ah,3
161 int 10h
162 dec dl
163 cmp dl,24
164 jz right
165 mov ah,2
166 int 10h
167 mov ax,0a11h
168 mov cx,1
169 int 10h
170 jmp main
171 right:
172 call coor
173 mov ax,0a20h
174 mov cx,1
175 int 10h
176 mov ah,3
177 int 10h
178 inc dl
179 cmp dl,54
180 jz left
181 mov ah,2
182 int 10h
183 mov ax,0a10h
184 mov cx,1
185 int 10h
186 jmp main
187 ;
188 over: mov ax,0a20h
189 mov cx,1
190 int 10h
191 call clear
192 ;restore all general registers
193 pop sp
194 pop bp
195 pop di
196 pop si
197 pop dx
198 pop cx
199 pop bx
200 pop ax
201 ;
202 ;retuen dos
203 mov ah,4ch
204 int 21h
205 ;
206 ;sub-proc,display cursor position
207 coor proc uses ax bx dx di
208 mov ax,0b800h
209 mov es,ax
210 mov bl,10
211 mov di,160*7+49*2 ;row:7,col:49
212 push dx
213 mov al,dh
214 and ax,0ffh
215 div bl
216 or ax,3030h
217 mov es:[di],al
218 mov es:[di+2],ah
219 mov al,':'
220 mov es:[di+4],al
221 pop dx
222 mov al,dl
223 and ax,0ffh
224 div bl
225 or ax,3030h
226 mov es:[di+6],al
227 mov es:[di+8],ah
228 ret
229 coor endp
230 ;
231 ;clear
232 clear proc
233 mov ah,1
234 mov cx,0607h
235 int 10h
236 mov ax,600h
237 mov cx,0
238 mov dx,184fh
239 int 10h
240 mov ah,2
241 mov dx,0
242 int 10h
243 ret
244 clear endp
245 code ends
246 end start
;----------------------------------------------------
评论次数(4) |
浏览次数(420) |
类型(程序与练习) |
收藏此文 |