内存布局图

实模式(16位)内存布局

0x00000000 ┌──────────────────────┐
           │ 中断向量表 (IVT)      │ 1KB
0x00000400 ├──────────────────────┤
           │ BIOS数据区 (BDA)      │ 256B
0x00000500 ├──────────────────────┤
           │                      │
           │ 可用内存              │
           │ (Bootloader栈区)    │ ← SP从0x7C00向下增长
           │                      │
0x00007C00 ├──────────────────────┤
           │ 引导扇区 (512B)       │ ← 我们的Bootloader
0x00007E00 ├──────────────────────┤
           │                      │
           │ 可用内存              │
           │                      │
0x0009FFFF ├──────────────────────┤
           │                      │
0x000A0000 ├──────────────────────┤
           │ VGA显存 (128KB)       │ ← 0xA0000-0xBFFFF
0x000C0000 ├──────────────────────┤
           │ BIOS ROM              │
0x000FFFFF ├──────────────────────┤
           │ × 无法访问 ×         │ ← 实模式只能访问到1MB
           └──────────────────────┘

保护模式(32位)内存布局

0x00000000 ┌──────────────────────┐
           │ 中断向量表 (IVT)      │
0x00000400 ├──────────────────────┤
           │ BIOS数据区            │
0x00000500 ├──────────────────────┤
           │ 可用内存              │
0x00001000 ├──────────────────────┤
           │ 内核加载区            │ ← 我们把内核放在这里
           │                      │
0x00007C00 ├──────────────────────┤
           │ 引导扇区              │
0x00007E00 ├──────────────────────┤
           │ 可用内存              │
           │                      │
0x00090000 ├──────────────────────┤
           │ 32位模式的栈          │ ← ESP = 0x90000,向下增长
           │                      │
0x000A0000 ├──────────────────────┤
           │ VGA显存               │
0x000B8000 │  └─ 文本模式显存      │ ← 我们在这里写字符
0x000C0000 ├──────────────────────┤
           │ BIOS ROM              │
0x00100000 ├──────────────────────┤ ← 1MB 边界
           │                      │
           │ 扩展内存              │ ← 现在可以访问了!
           │ (内核最终会搬到这里) │
           │                      │
0xFFFFFFFF └──────────────────────┘ ← 4GB 边界

关键地址

地址用途
0x0000内存起始
0x1000内核加载位置(我们选的)
0x7C00引导扇区(BIOS规定)
0x9000032位模式栈顶
0xB8000VGA文本模式显存
0x1000001MB边界(扩展内存起始)