关于启动:启动后寄存器的状态

关于启动:启动后寄存器的状态

State of Registers After Bootup

我正在x86机器上的引导加载程序上工作。

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

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


This early execution environment is highly implementation defined, meaning the implementation of your particular BIOS. Never make any assumptions on the contents of registers. They might be initialized to 0, but they might contain a random value just as well.

从OS开发者Wiki中获取信息,当我在玩玩具OS的游戏时可以从中获取信息


始终假定未定义,否则,如果尝试移植体系结构,则会遇到严重问题。

假定将所有未初始化的内容都设置为零,这与移植代码的痛苦完全不同。


据我所知,唯一定义良好的就是复位后立即处于处理器状态。

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


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


您总是可以自己初始化它们,以已知状态开始。


不确定,我相信吗?我认为这取决于主板和CPU,应从自己的角度考虑将其视为随机的。


最好的选择是不承担任何责任。如果它们具有含义,那么当您需要它们提供的信息时,就会从另一端发现。


推荐阅读