【发布时间】:2014-03-06 00:26:04
【问题描述】:
如何从独立的 NASM 文件(无操作系统)打开和关闭锁定键(Caps Lock、Num Lock 和 Scroll Lock)上的状态灯?
我知道xset 可以在linux 终端中使用,并且其他操作系统有其他方法可以打开和关闭状态灯。但是没有操作系统怎么办呢?
【问题讨论】:
标签: assembly operating-system nasm
如何从独立的 NASM 文件(无操作系统)打开和关闭锁定键(Caps Lock、Num Lock 和 Scroll Lock)上的状态灯?
我知道xset 可以在linux 终端中使用,并且其他操作系统有其他方法可以打开和关闭状态灯。但是没有操作系统怎么办呢?
【问题讨论】:
标签: assembly operating-system nasm
此独立文件将打开 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 会更改值。
【讨论】: