【问题标题】:State of Registers After Bootup启动后的寄存器状态
【发布时间】:2010-09-06 10:15:21
【问题描述】:

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

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

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

【问题讨论】:

    标签: boot bios


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        来自OS dev Wiki,这是我在玩玩具操作系统时获取信息的地方

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

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

            【讨论】:

              【解决方案6】:

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

              作为记录,您可以在Intel's Software Developer's Manual 第 3 卷第 8 章:“处理器管理和初始化”中的标题为“IA-32 Processor States Follow on Power-up, Reset, or初始化”

              【讨论】:

                【解决方案7】:

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

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

                【讨论】:

                  猜你喜欢
                  • 2023-03-19
                  • 1970-01-01
                  • 1970-01-01
                  • 2017-05-18
                  • 2018-06-17
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-06-25
                  • 2013-09-12
                  相关资源
                  最近更新 更多