了解 BIOS 内存、指令和代码来源

了解 BIOS 内存、指令和代码来源

我是了解 BIOS并有几个问题。

  1. “这是内存第一兆字节末尾的最后 16 个字节”是什么意思?

  2. BIOS的第一条指令是jump,跳转到BIOS主程序,但是跳转到哪里呢?

  3. 原始 BIOS 代码源自哪里?

我也对 POST 感兴趣?处理器如何执行 POST 信号?

答案1

回答第二个问题,BIOS 跳转到 0x7c00,这是引导扇区代码的开头(我从调试和创建引导扇区中收集到这些信息......),然后引导扇区被加载到内存中的该偏移量中。

POST 是开机自检,当 BIOS 例程对内存、键盘、磁盘和屏幕等硬件设备执行检查时,如果检查失败,它会发出哔声,具体取决于相关设备,例如,如果硬盘出现故障,它会发出 2 声哔声,哔声会有所不同,以表示当前存在的问题。现在 BIOS 更可靠,硬件检测也比以前可靠得多,所以这种情况很少见……MFM/RLL 驱动器过去经常与 BIOS 发生问题,除非它们来自一批有问题的磁盘……如果没有键盘,BIOS 中的键盘会显示“按 F1 继续”……

希望这有帮助,谨致问候,汤姆。

答案2

  1. 计算机物理内存的偏移量为 0x0ffff0 到 0x0fffff。
  2. 进入 BIOS 代码,该代码是某人先前编写并刻录到非易失性存储器中的。

答案3

@tommieb75:处理器最终会跳转到那里,但前提是 BIOS 设法在连接的外围设备(HDD、正确格式化的 USB 闪存驱动器、El Torito CD、来自 PXE 服务器的 TFTP 等)上找到引导扇区。此引导扇区的末尾将有 0x55AA 签名。典型示例是 MBR,它可以自由地执行任何操作,但通常再次在分区表中查找一个(且只有一个)可引导标志,将自身从 0x7C00 地址移出(移至何处取决于其代码),将该分区的第一个扇区加载到 0x7C00,然后跳转到该位置。此分区引导扇区也应具有 0x55AA 签名。

至于最初的问题……BIOS ROM 并没有指示处理器跳转到固定地址;这取决于 BIOS 作者想要什么。1 兆字节末尾以下 16 个字节的地址只是硬编码到处理器本身中;这是记录/定义的行为(由 Intel 以及 AMD 和其他公司定义)。显然,16 个字节的代码并不多,因此它通常只是一个“长跳转”(加载 CS 和 IP 寄存器)到 BIOS ROM 中的其他位置。该代码处理 POST 和上述要执行的有效引导扇区的位置。

相关内容