2013-04-29 67 views
0

我在程序集中編寫了一個簡單的操作系統,但我無法弄清楚如何關閉計算機。程序集中的關閉操作系統

我試着使用hlt這樣

.shutdown: 
    mov si, msg_shutdown 
    call print_string 
    hlt 

,但它不工作。 我知道int 19h會重新啓動計算機,但有關閉中斷嗎?

我會感謝一些幫助。謝謝。

+2

複製? http://stackoverflow.com/questions/678458/shutdown-the-computer-using-assembly – jm666 2013-04-29 20:12:39

+0

這個問題根本沒有幫助我,我看到了。 – 2013-04-29 20:15:05

+0

你在使用哪個操作系統? – 2013-04-29 20:20:42

回答

0

hlt只在發生中斷之前暫停CPU。

cli 
hlt 

可以做你想做的。您可能也希望禁用NMI,但我認爲如果我們獲得NMI,我們無論如何都會遇到麻煩。您可能還希望保持啓用中斷,並在用戶點擊「esc」或其他位置時重新啓動,否則請回到hlt。如果你真的想關閉電源......嗯,這是更復雜的...

編輯:重新讀你的問題,我想你想關閉電源關閉(?)。看看在這裏:http://wiki.osdev.org/Shutdown

0

重啓:

reboot: 
    jmp 0xffff:0000h 

關機:

shutdown: 
    mov ax, 5307h 
    mov cx, 3 
    mov bx, 1 
    int 15h 

停止:

halt: 
    cli 
    hlt 
+0

除非您禁用NMI,否則應該在'cli' /'hlt'周圍進行循環。 – 2016-12-08 20:15:22