assembly - 实时按键事件组装 x86 TASM

标签 assembly interrupt tasm dosbox

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

最佳答案

您可以使用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

关于assembly - 实时按键事件组装 x86 TASM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41897233/

相关文章:

sorting - 组装 - 用于对字符串进行排序的冒泡排序

assembly - PE 二进制文件中的部分名称真的有限制吗?

debugging - 如何在 ASM 中调试? (Ubuntu)

assembly - 如何将拇指条件指令放入 IT block

c# - C# 如何在没有中间 C++ 层的情况下直接调用 ml64 dll?

assembly - 可以在Linux上的代码中使用BIOS中断吗?

c - 如何在没有遇到 EOF 时终止 read()?

linux - 为什么禁用中断会禁用内核抢占以及自旋锁如何禁用抢占