汇编中的hlt指令能否关闭计算机,因为它会停止处理器?如果可以使用我所说的方法进行操作,这是否正确?
hlt指令能否关闭计算机?
start:
xor ax, ax; ;clear ax
mov bx, ax; ;clear bx
cli ;stop all interrupts
hlt ;halt the cpu
如果这不是正确的方法,或者这样做无法关闭系统,请告诉我正确的方法。
汇编中的hlt指令能否关闭计算机,因为它会停止处理器?如果可以使用我所说的方法进行操作,这是否正确?
hlt指令能否关闭计算机?
start:
xor ax, ax; ;clear ax
mov bx, ax; ;clear bx
cli ;stop all interrupts
hlt ;halt the cpu
如果这不是正确的方法,或者这样做无法关闭系统,请告诉我正确的方法。
hlt
指令会暂停x86直到发生中断。除非禁用所有中断,否则处理器只会停止一毫秒左右。
要关闭现代计算机,请使用 ACPI(高级配置和电源接口)。
cli ; stop all interrupts
hlt ; halt the cpu
你可以暂停一个适用于x86个人电脑的可启动程序:
BITS 16
start:
mov ax, 07C0h ; Set up 4K stack space after this bootloader
add ax, 288 ; (4096 + 512) / 16 bytes per paragraph
mov ss, ax
mov sp, 4096
mov ax, 07C0h ; Set data segment to where we're loaded
mov ds, ax
cld ; clear direction flag
mov si, text_string ; Put string position into SI
call print_string ; Call our string-printing routine
cli ; stop all interrupts
hlt ; halt the cpu
jmp $ ; Jump here - infinite loop!
text_string db 'Hello World!', 0
print_string: ; Routine: output string in SI to screen
mov ah, 0Eh ; int 10h 'print char' function
.repeat:
lodsb ; Get character from string
cmp al, 0
je .done ; If char is zero, end of string
int 10h ; Otherwise, print it
jmp .repeat
.done:
ret
times 510-($-$$) db 0 ; Pad remainder of boot sector with 0s
dw 0xAA55 ; The standard PC boot signature
将其保存为"prog.asm",然后使用"nasm"创建引导扇区:
nasm -f bin -o boot.img prog.asm
qemu-system-i386 -drive file=boot.img,index=0,media=disk,format=raw -boot c -net none
cli / hlt
,以防 NMI 到达。我的意思是,如果你要有一个无限循环...但无论如何,这并没有回答问题。这只是让 CPU 保持低功耗空闲状态,而不是关闭。 - Peter Cordeslodsb
,因此你真的应该调用 CLD
。 - Michael Petchhalt指令并不会关闭电源,而是将处理器置于非执行状态。
通常情况下,你可以通过处理器重置来退出halt状态。
在一些微控制器中,特定的中断也可以将处理器从halt状态中唤醒。
关闭电源是一个主板/BIOS特定的操作。