如何在汇编中删除键盘缓冲区?
当我在键盘上按'h'时,我的代码会打印出“ hi”,但是当我不停地按几秒钟时,它仍会延迟打印“ hi”。我敢肯定会发生这种情况,因为当我按'H'时,它会“垃圾邮件”键盘缓冲区,并且我认为每次输入proc“键”以使其正常工作时,我需要重置或删除键盘缓冲区。我可以使用任何中断吗?这是代码:
IDEAL
MODEL small
STACK 100h
DATASEG
timeEnter dw ?
mil db ?
count db ?
hi dw ?
message db 'hi',10,13,'$'
CODESEG
proc delaytime
push bp
mov bp, sp
push ax
push bx
push cx
push si
push dx
push di
mov bl, [bp+4] ;offset time enter
mov [mil],0
mov [count],0
mov ah, 2Ch
int 21h
mov [mil], dl
jmp L1
L2:
inc [count]
mov [mil], dl
L1:
mov ah, 2Ch
int 21h
cmp dl, [mil]
je L1
cmp [count],bl
jne L2
pop di
pop dx
pop si
pop cx
pop bx
pop ax
pop bp
ret 2
endp delaytime
proc key
push bp
mov bp,sp
push ax
push bx
push cx
push si
push dx
push di
mov [hi],0
mov ah, 01
int 16h
jz L3
mov ah, 00h
int 16h ;al=ascii charachter
cmp al, 68h
jne L3
mov [hi],1
L3:
pop di
pop dx
pop si
pop cx
pop bx
pop ax
pop bp
ret
endp key
start :
mov ax, @data
mov ds, ax
L:
; Graphic mode
mov ax, 13h
int 10h
call key
cmp [hi],1
jne L4
;print
mov dl, 15 ;J
mov dh, 2 ;I
mov bh, 0 ;Display page 0
mov ah, 02h ;SetCursor
int 10h
mov dx, offset message
mov ah, 09h ;DispayString
int 21h
L4:
mov [timeEnter],3
push [timeEnter]
call delaytime
;text mode
mov ah, 0
mov al, 2
int 10h
jmp L
exit :
mov ax, 4c00h
int 21h
END start
I have this code that prints "hi" when I press 'h' on the keyboard, but when I press it non-stop for a few seconds, It still prints "hi" in a delay. I'm pretty sure it happens because when I press on 'h', it "spam" the keyboard buffer and I think I need to reset or delete the keyboard buffer every time I'm entering the proc "key" to make it work. is there any interrupt I can use for this? Here's the code:
IDEAL
MODEL small
STACK 100h
DATASEG
timeEnter dw ?
mil db ?
count db ?
hi dw ?
message db 'hi',10,13,'
CODESEG
proc delaytime
push bp
mov bp, sp
push ax
push bx
push cx
push si
push dx
push di
mov bl, [bp+4] ;offset time enter
mov [mil],0
mov [count],0
mov ah, 2Ch
int 21h
mov [mil], dl
jmp L1
L2:
inc [count]
mov [mil], dl
L1:
mov ah, 2Ch
int 21h
cmp dl, [mil]
je L1
cmp [count],bl
jne L2
pop di
pop dx
pop si
pop cx
pop bx
pop ax
pop bp
ret 2
endp delaytime
proc key
push bp
mov bp,sp
push ax
push bx
push cx
push si
push dx
push di
mov [hi],0
mov ah, 01
int 16h
jz L3
mov ah, 00h
int 16h ;al=ascii charachter
cmp al, 68h
jne L3
mov [hi],1
L3:
pop di
pop dx
pop si
pop cx
pop bx
pop ax
pop bp
ret
endp key
start :
mov ax, @data
mov ds, ax
L:
; Graphic mode
mov ax, 13h
int 10h
call key
cmp [hi],1
jne L4
;print
mov dl, 15 ;J
mov dh, 2 ;I
mov bh, 0 ;Display page 0
mov ah, 02h ;SetCursor
int 10h
mov dx, offset message
mov ah, 09h ;DispayString
int 21h
L4:
mov [timeEnter],3
push [timeEnter]
call delaytime
;text mode
mov ah, 0
mov al, 2
int 10h
jmp L
exit :
mov ax, 4c00h
int 21h
END start
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论