x86 - 如何从 16 位实模式重新启动 x86 程序集?

标签 x86 acpi real-mode

X86 instructions to power off computer in real mode? 已介绍了 APM 关闭

如何重新启动而不是关闭计算机?请在您的回答中引用并解释相关文档/标准。

我了解 APM 和 ACPI 是两种主要方法,并且我对这两种方法都感兴趣。如果还有其他人请告诉我。

我发现 ACPI 规范位于 http://uefi.org/specifications,但解析它需要太多脑力,我发现它值得一个问题。

我找不到 APM 规范的 URL,只有 Microsoft RTF here 的 Google 缓存。

如果您需要一种方法来测试您的答案,this minimal APM shutdown boot sector example 可能是一个很好的起点。我们的目标是将其转换为重新启动示例。

我已经阅读了 arch/x86/realmode/rm/reboot.S 上的 Linux 内核 4.2 代码,但我不明白它是如何工作的,因为我找不到这些命令和我的工作关闭示例之间的区别。

super 用户的相关更通用:https://superuser.com/questions/294681/how-does-a-computer-restart-itself

保护模式的相关问题:Rebooting in Protected Mode

最佳答案

如果启动介质上不存在内核文件,我会在软盘启动镜像中使用以下代码来重置电脑。

Reboot:
    db 0x0ea 
    dw 0x0000 
    dw 0xffff 

它基本上汇编为以下指令:

jmp     far ptr 0FFFFh:0 

我认为这是热重启,即相当于按 Ctrl-Alt-Delete,而不是按机器前面的重置按钮。

关于x86 - 如何从 16 位实模式重新启动 x86 程序集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32682152/

相关文章:

assembly - 在 fasm (MS-DOS) 中访问 0xF000FFFE(计算机类型)处的内存

c++ - 为什么 _umul128 的工作速度比 mul128x64x2 函数的标量代码慢?

c++ - 禁用 ACPI 电源按钮

C#:如何唤醒已关闭的系统?

linux - 设置挂起超时跨窗口管理器

assembly - 无效的基/索引表达式

windows - 为什么 Windows 32 位称为 Windows x86 而不是 Windows x32?

assembly - 80x86 16位asm : lea cx, [cx * 8 + cx]在NASM上导致错误(编译.com文件)

c - 内联 (x86) 汇编如何影响程序流程?

ios - 快速总结 Realm 对象数组中的属性