【发布时间】:2021-04-17 12:58:45
【问题描述】:
:D 我知道我今天早些时候也发布了另一个关于 Tasm 的问题,但这个问题是关于不同的主题,所以我想发布一个新问题:D。
基本上,我检查一个键是否被按下然后查看它是否是一个 WASD 键的功能似乎不起作用。
代码:
'''proc KeyPress ;function which gets key press from WASD and will change var 'Direction' according to it.
push ax
cmp [KeyPressed], 0
jne EndKeyPress
startofCheck:
mov ah, 0bh
int 21h;returns AL=0 - NO KEY PRESSED, AL!=0 - KEY PRESSED.
cmp al, 0
je startofCheck
;PROCESS KEY.
mov ah, 0
int 16h ;get the key.
Wait_for_Data:
cmp al, 87;'W'
je MovingUp
cmp al, 65;'A'
je MovingLeft
cmp al, 83;'S'
je MovingDown
cmp al, 68;'D'
je MovingRight
jmp startofCheck
MovingUp:
mov [Direction], 2d
jmp EndKeyPress
MovingLeft:
mov [Direction], 3d
jmp EndKeyPress
MovingDown:
mov [Direction], 4d
jmp EndKeyPress
MovingRight:
mov [Direction], 1d
jmp EndKeyPress
EndKeyPress:
inc [KeyPressed]
pop ax
ret
endp KeyPress '''
我想要做的基本上是检查是否按下了键,如果是,则检查它是否是 WASD。根据按下的键,我会改变蛇的方向。
任何帮助或建议将不胜感激=D
【问题讨论】:
-
什么不起作用?代码检查循环中是否存在字符,从而阻止执行。您不需要在
ax=0000h/INT 16h前面使用它,它已经阻塞了。如果你不想阻塞,你需要在没有按键的情况下退出proc。