题
我正在 x86 机器上开发引导加载程序。
当BIOS将MBR的内容复制到0x7c00并跳转到该地址时,寄存器的内容有标准的含义吗?寄存器有标准值吗?
我知道段寄存器通常设置为 0,但有时会设置为 0x7c0。其他硬件寄存器呢?
解决方案
这个早期执行环境是高度实现定义的,这意味着特定 BIOS 的实现。切勿对寄存器的内容做出任何假设。它们可能被初始化为 0,但它们也可能包含随机值。
来自 操作系统开发维基, ,这是我在玩我的玩具操作系统时获取信息的地方
其他提示
最好的选择是什么都不假设。如果他们有意义,当你需要他们提供的信息时,你会从对方那里发现这一点。
未定义,我相信?我认为这取决于主板和CPU,为了你自己的利益,应该将其视为随机的。
最安全的选择是假设未定义。
始终假设未定义,否则如果您尝试移植架构,就会遇到严重问题。
没有什么比移植代码更痛苦的了,假设所有未初始化的内容都将被设置为零。
我知道唯一明确定义的是重置后立即的处理器状态。
为了记录你可以找到 那 在 英特尔软件开发人员手册 第 3 卷第 8 章:标题为“上电、复位或初始化后的 IA-32 处理器状态”的表中的“处理器管理和初始化”
您始终可以自己初始化它们以从已知状态开始。
不隶属于 StackOverflow