【发布时间】:2016-08-27 07:24:40
【问题描述】:
我有疑问,因为我的代码不起作用。我正在实现一个运行下面代码的引导加载程序,当我尝试加载它时,它只在少数情况下有效,就像我在下面解释的那样。我的代码是下一个:
ChangeGameState:
mov cx, 00H ;Here I make a delay
mov dx, 3240H ;.
mov ah, 86H ;.
int 15h ;.
jmp DetectKeyPress
DetectKeyPress:
mov ah, 01h
int 16h
jz noKeyInBuffer
xor ah, ah
int 16h
jmp exitKeyPress
noKeyInBuffer:
xor ax, ax
exitKeyPress:
jmp ProcessKey
ProcessKey:
cmp ah, 0
je ExitKey
cmp ah, 'd'
je ChangeDir1
cmp ah, 's'
je ChangeDir2
cmp ah, 'a'
je ChangeDir3
cmp ah, 'w'
je ChangeDir4
ExitKey:
jmp ChangeGameState
ChangeDir1:
;DO SOMETHING1
jmp ChangeGameState
ChangeDir2:
;DO SOMETHING2
jmp ChangeGameState
ChangeDir3:
;DO SOMETHING3
jmp ChangeGameState
ChangeDir4:
;DO SOMETHING4
jmp ChangeGameState
现在,当我尝试按 S、A 和 W 键时,它不起作用,只有当我按 D 键时才起作用。知道发生了什么吗?
【问题讨论】:
-
在 BOCHS 或任何其他具有内置调试器的 x86 模拟器中单步执行时会看到什么?
-
只是程序停止了.. 没有任何反应
-
那么什么值在哪个寄存器中?这就是 BOCHS 中内置的 调试器 的用途。
-
我安装了 Bochs,但代码从第 1 行开始就不起作用了。
-
我什至不知道你想说什么。这有帮助吗? bochs.sourceforge.net/doc/docbook/user/internal-debugger.html
标签: assembly x86 nasm bootloader