【问题标题】:Real time keypress event assembly x86 TASM实时按键事件组装 x86 TASM
【发布时间】:2017-01-27 15:16:28
【问题描述】:

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

【问题讨论】:

  • 为什么要在 2017 年编写 DOS 游戏?
  • 您可以在循环中使用轮询,也可以在中断处理程序中使用。
  • @zwol 学校...
  • @zwol 16 位 DOS 编程比你想象的更有启发性 :) 数学也是如此:我们在小学教授分数,而不是等值班和完整性领域。
  • 只需使用来自同一中断int 16h 的函数AH=01h(而不是AH=00h)。那是一个不会停止的。它只做一个简短的检查。

标签: assembly interrupt tasm dosbox


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    相关资源
    最近更新 更多