我正在 x86 机器上开发引导加载程序。

当BIOS将MBR的内容复制到0x7c00并跳转到该地址时,寄存器的内容有标准的含义吗?寄存器有标准值吗?

我知道段寄存器通常设置为 0,但有时会设置为 0x7c0。其他硬件寄存器呢?

有帮助吗?

解决方案

这个早期执行环境是高度实现定义的,这意味着特定 BIOS 的实现。切勿对寄存器的内容做出任何假设。它们可能被初始化为 0,但它们也可能包含随机值。

来自 操作系统开发维基, ,这是我在玩我的玩具操作系统时获取信息的地方

其他提示

最好的选择是什么都不假设。如果他们有意义,当你需要他们提供的信息时,你会从对方那里发现这一点。

未定义,我相信?我认为这取决于主板和CPU,为了你自己的利益,应该将其视为随机的。

最安全的选择是假设未定义。

始终假设未定义,否则如果您尝试移植架构,就会遇到严重问题。

没有什么比移植代码更痛苦的了,假设所有未初始化的内容都将被设置为零。

我知道唯一明确定义的是重置后立即的处理器状态。

为了记录你可以找到 英特尔软件开发人员手册 第 3 卷第 8 章:标题为“上电、复位或初始化后的 IA-32 处理器状态”的表中的“处理器管理和初始化”

您始终可以自己初始化它们以从已知状态开始。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top