我正在创建自定义 MBR,它将加载我的消息,在按下指定的键 CTRL+ALT+ESC
后,它将加载原始 MBR,除了等待按键之外,我已经完成了所有操作。我找到了等待任何按键的代码,但我已经指定了按键,我知道我可以使用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
最佳答案
您可以使用Int 16/AH=00h等待下一次击键。您可以继续检查击键,直到按下 ESCAPE。 scan code对于 ESCAPE 来说是 01h。如果已按下,则可以使用 Int 16/AH=02h获取换档标志,其中包括当前是否按下 CONTROL 和/或 ALT。 AL 的位 2 和 3 将包含它们的当前状态。此代码片段应演示对 CONTROLALT 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
关于assembly - 如何在 NASM 中等待指定的按键被按下?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51900324/