如何等待直到在NASM中按下指定的键?

时间:2018-08-17 17:28:01

标签: assembly nasm x86-16 bootloader mbr

我正在创建自定义MBR,它将加载我的消息,并在按下指定的键CTRL+ALT+ESC之后将加载原始MBR,除等待键外,我已完成所有操作。我找到了等待 any 按键的代码,但是我指定了按键,我知道我可以使用 AL 来设置按下按钮的ASCII字符,但是我有3个键组合,而且它们也不是ASCII字符。那我该怎么实现呢?

这是我的代码的一部分,这只是示例:

org 0x7c00
bits 16

    ; wait for key
    mov ah,0
    int 16h

    ; reboot
    int 19h


MBR_signature:
times 510-($-$$) db 0 
db 55h,0aah

1 个答案:

答案 0 :(得分:3)

您可以使用Int 16/AH=00h等待下一次按键。您可以继续检查击键,直到按下 ESCAPE ESCAPE scan code是01h。如果已按下,则可以使用Int 16/AH=02h获取移位标志,其中包括当前是否按下了 CONTROL 和/或 ALT AL 的第2位和第3位将包含其当前状态。该代码段应演示对 CONTROL ALT ESCAPE 的检测:

org 0x7c00
bits 16

getkey:
    xor ah,ah          ; AH = 0
    int 16h            ; Wait for key
    cmp ah, 01h        ; Scan code 1 = Escape
    jne getkey         ; If Escape not pressed get another key

    mov ah,2h
    int 16h            ; Query keyboard status flags
    and al, 0b00001111 ; Mask all the key press flags
    cmp al, 0b00001100 ; Check if ONLY Control and Alt are pressed and make sure
                       ;    Left and/or Right Shift are not being pressed
    jne getkey         ; If not go back and wait for another keystroke
                       ;    Otherwise Control-Alt-Escape has been pressed
    ; reboot
    int 19h

MBR_signature:
times 510-($-$$) db 0
db 55h,0aah