我正在创建自定义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
答案 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