实模式程序集获取键盘输入
Real Mode Assembly Get Keyboard Input
在实模式汇编中,我使用了这段代码:
mov ah, 0h
int 0x16
等待键盘输入。我知道当按下某个键时,有关我按下的键的信息存储在 ah 和 al 寄存器中。例如,当我按下 ENTER 时,0x0D 将存储在 al 寄存器中。如果我按退格键,那将是 0x08。但是我只知道这两个键。
是否有所有键盘键的列表?例如,当我按下 'a' 时,al/ah 的值会是多少? (ASCII 表没有这方面的信息。)
来自RBIL:
KEYBOARD - GET KEYSTROKE
AH = 00h
Return:
AH = BIOS scan code
AL = ASCII character
ah
将包含键盘扫描码和 al
ASCII 字符。
每个键都有两个扫描码(按下并释放)。它由键盘控制器返回,进一步的抽象层提供从扫描码到特定字符集(如 ASCII)的映射,因此用户可以对字符集值进行操作。
可以找到扫描码列表 here(感谢@MichaelPetch)。然而,扫描码随着IBM PC的发展而发展,因此存在多组扫描码,但它们是部分兼容的。如果您使用扫描码,请注意您使用的扫描码类型。
对于以后的问题,请始终先查看 Ralph Brown's Interrupt List (RBIL) - 好东西。
在实模式汇编中,我使用了这段代码:
mov ah, 0h
int 0x16
等待键盘输入。我知道当按下某个键时,有关我按下的键的信息存储在 ah 和 al 寄存器中。例如,当我按下 ENTER 时,0x0D 将存储在 al 寄存器中。如果我按退格键,那将是 0x08。但是我只知道这两个键。
是否有所有键盘键的列表?例如,当我按下 'a' 时,al/ah 的值会是多少? (ASCII 表没有这方面的信息。)
来自RBIL:
KEYBOARD - GET KEYSTROKE
AH = 00h
Return:
AH = BIOS scan code
AL = ASCII character
ah
将包含键盘扫描码和 al
ASCII 字符。
每个键都有两个扫描码(按下并释放)。它由键盘控制器返回,进一步的抽象层提供从扫描码到特定字符集(如 ASCII)的映射,因此用户可以对字符集值进行操作。
可以找到扫描码列表 here(感谢@MichaelPetch)。然而,扫描码随着IBM PC的发展而发展,因此存在多组扫描码,但它们是部分兼容的。如果您使用扫描码,请注意您使用的扫描码类型。
对于以后的问题,请始终先查看 Ralph Brown's Interrupt List (RBIL) - 好东西。