Ass*_*246 3 assembly real-mode bios x86-16
我的目标是使用 Int 16 指令能够使用箭头键在程序中上下移动,直到我的用户决定按退出键。我是否在循环中使用以下代码读取多个按键并在末尾添加终止条件,或者是否缺少某些内容?
Mov ah,00
int 16
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)Mov ah,00 int 16
汇编语言编程需要你的精确性。
BIOS 键盘功能可在 中找到int 16h。那是十进制的22 ,不是你写的16 !可能看起来没什么大不了的,但这就是成功与失败的区别。
MainLoop:
mov ah, 01h ;BIOS.TestKey
int 16h
jz StuffToDoRegardlessOfAnyKey
mov ah, 00h ;BIOS.GetKey
int 16h
cmp al, 27 ;Is it ESCAPE ?
jne ProcessOtherKey
ProcessEscapeKey:
...
...
ProcessOtherKey:
...
...
jmp MainLoop
StuffToDoRegardlessOfAnyKey:
...
...
jmp MainLoop
Run Code Online (Sandbox Code Playgroud)
这是一个解决使用键盘导航问题的骨架程序。在MainLoop的每次迭代中,它首先使用 BIOS 键盘功能 01h 测试是否有待处理的按键。