在保护模式下重启

Isa*_*hen 5 x86 osdev

在 x86 实模式下重启非常简单。您可以使用 BIOS 或:

jmp 0xFFFF:0000
Run Code Online (Sandbox Code Playgroud)

但是在保护模式下应该如何重新启动?

Sha*_*atz 5

有关端口 0xCF9 的信息。
为了写入它,需要访问内核模式(即来自内核驱动程序)。

0xCF9端口可以获得三种值,用于三种类型的复位:

将 4 写入 0xCF9:(INIT) 将初始化 CPU。这意味着它将跳转到启动的初始位置,但它会保持许多 CPU 元素不变。大多数内部表、chaches 等将在 Init 调用中保持不变(但在调用期间可能会发生变化)。

将 6 写入 0xCF9:(RESET) 将重置 CPU,并将所有内部表缓存等清除到初始状态。

将 0xE 写入 0xCF9:(重新启动) 将重新启动主板及其附带的所有部件。

Windows 驱动程序中的示例:

__outbyte(0xCF9, 0xE);