在x86 Real Mode中,重启非常简单。您可以使用BIOS或:
jmp 0xFFFF:0000
但是如何在保护模式下重新启动?
答案 0 :(得分:3)
在保护模式(x86或x86_64)上重启的正确方法是使用电源管理功能(如果有)
快速而肮脏的方式是做三重错误。
答案 1 :(得分:3)
关于PORT 0xCF9的信息。
为了写入它,需要访问内核模式(来自内核驱动程序的含义)。
0xCF9端口可以为三种类型的重置获得三个值:
将4写入0xCF9:(INIT) INIT CPU。这意味着它将跳转到启动的初始位置,但它将保持许多CPU元素不变。通过Init调用,大多数内部表,chaches等将保持不变(但可能会在其中发生变化)。
将6写入0xCF9 :(重置) 将所有内部表缓存等重置为CPU并将其清除为初始状态。
将0xE写入0xCF9 :( RESTART) 用它带来的所有东西来驱动主板电源。
Windows驱动程序中的示例:
__ outbyte(0xCF9,0xE);
答案 2 :(得分:2)
虽然我找不到直接引用,但OSDev forums上的人提出了以下建议(显然是从Linux代码中提取的):
;Forcing reboot with keyb controller ;)
_reboot:
WKC:
XOR AL, AL
IN AL, 0x64
TEST AL, 0x02
JNZ WKC
MOV AL, 0xFC
OUT 0x64, AL
答案 3 :(得分:2)
我曾经写过6到端口0xcf9,但这里有一个更大的列表: http://smackerelofopinion.blogspot.nl/2009/06/rebooting-pc.html?m=1