我所知道的是:
启动时,BIOS 会执行以下顺序:
1. 开机自检 (POST)
2. 检测视频卡(芯片)的 BIOS 并执行其代码以初始化视频硬件。
3. 检测任何其他设备 BIOS 并调用其初始化功能
4. 显示 BIOS 启动屏幕
5. 执行简短的内存测试(确定系统中有多少内存)
6. 设置内存和驱动器参数
7. 配置即插即用设备(传统上是 PCI 总线设备)
8. 分配资源(DMA 通道和 IRQ)
9. 识别启动设备
当 BIOS 识别到启动设备(通常是几个已被标记为可启动磁盘的磁盘之一)时,它会将该设备中的块 0 读入内存位置 0x7c00 并跳转到那里。
但此后会发生什么,即 BIOS 如何在此阶段将控制权交给引导加载程序?
答案1
正如上面的帖子所提到的,BIOS 只是通过执行跳转指令到 0x7C00 将控制权交给引导加载程序。
不可启动设备的前两个字节可能有 INT 18 指令(0xCD 0x18)(以及字节 511、512 处的 55aa),这将导致 BIOS 按照启动顺序进入下一个设备。
答案2
由于您提到了 0x7C00,我将重点介绍 MBR 启动(GPT 则不同)。
正如您所说,一旦 BIOS 确定设备可启动(即第一个扇区的最后两个字节为 0x55AA),它就会从磁盘读取第一个扇区并将其加载到从 0x7C00 开始的内存中。一旦它发出跳转指令,CPU 就会开始运行那里的任何代码。
然后由引导加载程序决定下一步要加载和执行什么。执行加载和跳转到下一阶段的代码必须适合第一个扇区剩余的 510 个字节,实际上更少,因为硬盘驱动器中还有分区表。
进一步阅读:启动顺序,滚动你自己的引导加载程序