assembly 更改锁定键状态指示灯

0pizxfdo  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(129)

如何从独立的NASM文件(无操作系统)中打开和关闭锁定键(Caps Lock、Num Lock和Scroll Lock)上的状态指示灯?
我知道xset可以在Linux终端中使用,其他操作系统也有其他方法来打开和关闭状态灯,但是没有操作系统我该怎么做呢?

ajsxfq5m

ajsxfq5m1#

此独立文件将打开Caps Lock、Scroll Lock和Num Lock键盘指示灯。

; blinklights.asm

[BITS 16]
[ORG 0x7C00]

jmp Code_Start

Switch_Kbd_Leds:

    push dx     ; Store current values.
    push ax

    mov dx, 60h ; '60h' is the 'kbd' port value.
    mov al, 0EDh    ; '0EDh' is 'set/reset leds' function.
    out dx, al  ; Output to the port.

    pop ax      ; Get the setting from the stack.
    out dx, al  ; Output to the port.

    pop dx      ; Restore 'dx'.
    ret     ; Return.

Code_Start:
    mov al, 00000111b
    call Switch_Kbd_Leds

    jmp $       

times 510-($-$$) db 0
dw 0xAA55

它的工作方式是al包含用于打开或关闭某些灯的位:

---- ---- ---- ---- ---- caps num  scrl
 0    0    0    0    0    x    x    x

这一行会打开Caps(大写)、Num(数字)和Scroll Lock(滚动锁定)灯:

mov al, 00000111b

最后,使用“设置/重置LED”(0EDh)调用键盘端口60h会更改这些值。

相关问题