实时按键事件组件x86 TASM

时间:2017-01-27 15:16:29

标签: assembly interrupt tasm dosbox

我试图在TASM中制作Snake游戏,但我遇到了问题;我似乎无法弄清楚如何在等待按键时保持Snake移动,因为ah = 0并且int 16h正在停止Snake并等待按键。 有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:2)

您可以使用int 21hah=0BH来检查是否按下了某个键,而不停止该程序,例如:

game:
;CHECK IF KEY WAS PRESSED.
  mov ah, 0bh
  int 21h      ;◄■■ RETURNS AL=0 : NO KEY PRESSED, AL!=0 : KEY PRESSED.
  cmp al, 0
  je  move_snake
;PROCESS KEY.        
  mov ah, 0
  int 16h      ;◄■■ GET THE KEY.
move_snake:

  jmp game

完整的例子(当然没有蛇):

.model small
.stack 100h
.data
.code
  mov ax, @data
  mov ds, ax
game:
;CHECK IF KEY WAS PRESSED.
  mov ah, 0bh
  int 21h  
  cmp al, 0
  je  move_snake
;PROCESS KEY.        
  mov ah, 0
  int 16h
  mov ah, 2
  mov dl, al
  int 21h       ;◄■■ DISPLAY PRESSED KEY.
move_snake:
  mov ah, 2
  mov dl, '.'
  int 21h       ;◄■■ DISPLAY SOMETHING.
  jmp game

  mov ax, 4c00h
  int 21h