11

アセンブリの hlt 命令は、プロセッサを停止するときにコンピュータをシャットダウンできますか? 私が言ったことを使用してそれを行うことができる場合、それは正しい方法ですか?

マシンをシャットダウンできますか?

start:
    xor ax, ax; ;clear ax
    mov bx, ax; ;clear bx
    cli ;stop all interrupts
    hlt ;halt the cpu

これがシステムをシャットダウンしない場合の方法でない場合は、正しい方法を教えてください。

4

3 に答える 3

10

このhlt命令は、割り込みが発生するまで x86 を停止します。すべての割り込みが無効にされていない限り、プロセッサは 1 ミリ秒程度しか停止しません。

最新のコンピューターの電源を切るには、ACPI (Advanced Configuration and Power Interface) を使用します。

于 2012-01-15T04:18:44.277 に答える
1

次の 2 行のコードを使用すると、次のようになります。

    cli                     ; stop all interrupts
    hlt                     ; halt the cpu

x86 pc の起動可能なプログラムを停止できます。

    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」を使用してテストできます。

qemu-system-i386 -drive file=boot.img,index=0,media=disk,format=raw -boot c -net none

注: 上記の 2 行を削除すると、仮想マシンが利用可能な最大の CPU サイクルを使用するようになります。

編集:「cld」命令を追加しました。Michael が述べたように、text_string が左から右に読み込まれるようにする必要がありました。

于 2016-04-07T15:11:57.350 に答える
1

Halt 命令は電源をオフにしません。プロセッサを非実行状態にします。
通常、プロセッサのリセット時に停止状態から抜け出すことができます。
一部のマイクロコントローラでは、特定の割り込みによってプロセッサが停止状態から抜け出すこともあります。電源オフは、マザーボード/BIOS 固有の操作です。

于 2012-01-15T03:45:25.337 に答える