7

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

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

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

4

7 回答 7

8

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

来自OS dev Wiki,当我玩玩具操作系统时,我可以从这里获取信息

于 2008-08-21T16:06:07.857 回答
1

最好的选择是什么都不假设。如果它们有意义,当您需要它们提供的信息时,您会从另一面发现。

于 2008-08-21T15:59:22.070 回答
1

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

于 2008-08-21T15:59:25.877 回答
1

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

于 2008-08-21T16:09:18.037 回答
1

最安全的赌注是假设未定义。

于 2008-08-21T16:14:34.840 回答
1

我唯一知道定义明确的是复位后的处理器状态。

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

于 2008-08-21T17:36:57.747 回答
1

总是假设未定义,否则如果你尝试移植架构,你会遇到严重的问题。

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

于 2008-08-21T17:40:59.563 回答