如何通过 BIOS 中断获取特殊键
How to get special keys with BIOS interrupts
我正在写一个实模式OS,我想知道是否有一种方法可以用BI[=读取功能键、方向键、control、alt等键OS 中断?
感谢您提供的任何帮助。
keyboard BIOS 可以帮助您。
代码如
mov ah, 00h
int 16h ; -> AX
将等待按键并 return 向您发送 AL
中按键的 ASCII 码和 AH
中按键的扫描码。
对于功能键、箭头等,您只需查看扫描码,因为对于大多数这些键,ASCII 码将为零。
要了解 ALT 键、CTRL 键或其他键的状态,您可以使用函数 02h 或 12h。或者,您可以检查 0040:0017h 和 0040:0018h.
低内存中的 BIOS 变量
ps 我目前无法 post 发表评论(浏览器问题)...
如果上面的代码产生AX=1E01h
,那确实意味着用户按下了CTRLA.
必须注意某些 ALT 键组合,因为在 AX
中输入 return 的代码可能取决于键盘是 QWERTY 还是 AZERTY。
ALTA, ALTQ, ALTZ,ALTW,ALTM.
我正在写一个实模式OS,我想知道是否有一种方法可以用BI[=读取功能键、方向键、control、alt等键OS 中断? 感谢您提供的任何帮助。
keyboard BIOS 可以帮助您。
代码如
mov ah, 00h
int 16h ; -> AX
将等待按键并 return 向您发送 AL
中按键的 ASCII 码和 AH
中按键的扫描码。
对于功能键、箭头等,您只需查看扫描码,因为对于大多数这些键,ASCII 码将为零。
要了解 ALT 键、CTRL 键或其他键的状态,您可以使用函数 02h 或 12h。或者,您可以检查 0040:0017h 和 0040:0018h.
低内存中的 BIOS 变量ps 我目前无法 post 发表评论(浏览器问题)...
如果上面的代码产生AX=1E01h
,那确实意味着用户按下了CTRLA.
必须注意某些 ALT 键组合,因为在 AX
中输入 return 的代码可能取决于键盘是 QWERTY 还是 AZERTY。
ALTA, ALTQ, ALTZ,ALTW,ALTM.