我正在使用Assembly和C开发内核,并且在启动过程中,我希望内核打开Caps lock键然后关闭。我在键here上找到了LED的参考。我怎么能用C或汇编语言(nasm样式)调用该函数?
答案 0 :(得分:1)
SetKeyBoardLeds:
push eax
mov al,0xed
out 60h,al
KeyBoardWait:
in al,64h
test al,10b
jne KeyBoardWait
mov al,byte [keyBoardStatus]
and al,111b
out 60h,al
pop eax
ret
例如:
mov [keyBoardStatus],0xb0 ; Initialise keyboard LED state
call SetKeyBoardLeds
;--------------------------------- This will toggle CapsLock LED
xor [keyBoardStatus],4
call SetKeyBoardLeds
;---------------------------------
and [keyBoardStatus],0xfb
call SetKeyBoardLeds
其中keyBoardStatus是一个字节(它将保持当前键盘的LED状态)。
答案 1 :(得分:0)
您可以阅读my code以供参考: irq_ex2.c:中断处理程序示例。此代码将自身绑定到IRQ 1,IRQ 1是在英特尔架构下控制的键盘的IRQ。然后,当它收到键盘中断时,它会将有关状态led和keycode的信息读入工作队列。加压:
ESC --->大写锁定关闭
F1,F2 --->大写锁定