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