emu8086 assembly Int 16 ah=01h,如何清空缓冲区?

emu8086 assembly Int 16 ah=01h, how to empty buffer?

我正在用键盘敲击 'a' 和 's' 编写一个小游戏,我不想在我的循环中等待,所以我尝试了 int 16h,ah=01h。当我按下 'a' 键时,它就像键被卡住一样,按下键后如何 empty/flush 缓冲?

mov ah,01h
int 16h

感谢帮助

当您知道有一个按键等待使用 int16 函数 1 读取时,只需使用函数 0 获取该键即可:

mov ah, 1   ; peek
int 16h
jz  NoKey
mov ah, 0   ; get
int 16h    

如果您仍想清除缓冲区,可以使用此方法:

proc ClearBuffKB
      push ax
@@CheckBuffer:
      mov ah ,1
      int 16h
      jz @@return 
      mov ah ,0
      int 16h
      jmp @@CheckBuffer
@@return:
      pop ax
      ret
endp ClearBuffKB