1. 从按下电源键到第一条指令
任务目标
本案例要求梳理x86平台从按下电源键到CPU执行第一条指令(BIOS入口)的完整硬件初始化链路,重点理解两个核心概念:实模式(Real Mode)与复位向量(Reset Vector)。完成本案例后,你应能准确回答:CPU上电后处于什么模式、第一条指令从哪个地址取回、该地址为何映射到BIOS ROM。
硬件初始化流程全景
x86平台冷启动(Cold Boot)的硬件链路如下,每一步均由硬件逻辑自动完成,无需软件参与:
- 电源就绪:ATX电源输出Power Good信号,通知芯片组电压稳定;
- 复位释放:芯片组(南桥/Platform Controller Hub)向CPU的RESET#引脚发送复位脉冲,CPU内部逻辑完成初始化;
- 实模式进入:CPU复位后,CR0.PE被清零,处理器强制进入实模式(16位寻址,1MB地址空间,无保护);
- 取指复位向量:CPU将CS段寄存器设为
0xF000,EIP设为0xFFF0,由此形成第一条指令的物理地址——复位向量; - BIOS映射:芯片组将地址
0xFFFF0(复位向量)所在的顶部64KB区域映射到BIOS ROM(非RAM),CPU从该地址取回第一条指令(一条跳转指令)。
核心概念精讲
实模式地址计算:物理地址 = 段寄存器值 × 16 + 偏移。复位后CS=0xF000,EIP=0xFFF0,因此物理地址 = 0xF000 × 16 + 0xFFF0 = 0xFFFF0。该地址距1MB地址空间顶端(0xFFFFF)仅16字节,BIOS在此放置一条JMP FAR F000:E05B指令,跳转到真正的BIOS入口代码。
为什么是0xFFFF0:x86设计时规定复位向量固定为0xFFFF0,且该区域必须是非易失性存储(ROM),因为此时DRAM控制器尚未初始化,无法访问内存。芯片组通过解码高位地址,将0xE0000~0xFFFFF(或仅顶部64KB)路由到BIOS ROM芯片。
验证方法
本案例为纯硬件流程分析,无代码执行。验证理解是否正确的判定标准如下:
- 能独立推导出复位后CS与EIP的初始值,并计算出物理地址
0xFFFF0; - 能解释为何该地址必须映射到ROM而非RAM(DRAM未初始化);
- 能说明实模式的核心特征(20位地址线、1MB寻址上限、无保护机制);
- 能描述BIOS第一条指令(跳转指令)的作用——将执行流引导至BIOS实际代码区。
如需进一步观察真实行为,可在QEMU中执行qemu-system-x86_64 -d int,cpu_reset -D qemu.log并查看日志中CPU初始寄存器状态,确认CS=0xF000、EIP=0xFFF0。