2

我正在努力检查是否Alt在 linux bootloader 中按下了键

int 0x16
mov ah, 0x0e
int 0x10

上面的代码可以很好地打印 ascii 字符,但是如何检查Alt密钥?

4

1 回答 1

3

您测试 0040h:0017h 的第 3 位。

http://www.ousob.com/ng/bios/ng559a.php

像这样的东西(在 AT/T 语法中):

mov    $0x40,%ax
mov    %ax,%es
testb  $8,%es:0x17
jz     noAltKey
.... ;; Alt pressed
noAltKey:

根据objdump -d -M intel,这就是它在 Intel 语法中的样子:

0:   66 b8 40 00             mov    ax,0x40
4:   8e c0                   mov    es,eax
6:   26 f6 04 25 17 00 00    test   BYTE PTR es:0x17,0x8
d:   00 08 

UPD:以下应该适用于 NASM:

mov    ax,0x40
mov    es,eax
test   [es:0x17],byte 0x8
jz     noAltKey
.... ;; Alt pressed
noAltKey:
于 2013-01-23T19:47:12.763 回答