云计算百科
云计算领域专业知识百科平台

8086/8088实模式的内存布局

8086/8088 是 Intel 早期的 16 位处理器,工作在 实模式(Real Mode) 下。其内存布局具有鲜明的时代特征,深刻影响了后续 x86 架构的设计。

一、核心特性

20 位地址线 + 1MB 寻址空间

  • 地址总线:20 根(A0–A19)
  • 最大物理内存:2²⁰ = 1,048,576 字节 = 1 MB
  • 寻址方式:段地址:偏移地址(Segment:Offset)
    • 物理地址 = 段地址 × 16 + 偏移地址
    • 例如:0x07C0:0x0000 → 0x07C00

💡 虽然寄存器是 16 位,但通过分段机制可访问 1MB 空间。

二、标准内存布局(上电后)

地址范围(物理地址)用途说明
0x00000 – 0x003FF 中断向量表(IVT) 256 个中断向量(每个 4 字节),共 1KB
0x00400 – 0x004FF BIOS 数据区(BDA) 存储设备信息、键盘缓冲区等
0x00500 – 0x9FFFF 常规内存(Conventional Memory) DOS 程序可用的主内存(≈ 640 KB)
0xA0000 – 0xBFFFF Upper Memory Area (UMA) 视频 RAM、适配器 ROM 等
0xA0000–0xAFFFF 图形显存(如 VGA) 文本/图形模式帧缓冲
0xB0000–0xB7FFF 单色显存(MDA) 旧式单色显示器
0xB8000–0xBFFFF 彩色显存(CGA/EGA/VGA) 文本模式:0xB8000 开始
0xC0000 – 0xDFFFF 扩展 BIOS ROM 硬盘控制器、网卡等 Option ROM
0xE0000 – 0xEFFFF 系统 BIOS ROM 主板固件(POST、INT 服务例程)
0xF0000 – 0xFFFFF 系统 BIOS(复位向量) CPU 启动时从此处取指令

🔑 关键点:

  • 640 KB 墙:DOS 程序最多使用 640 KB 内存(0x00000–0x9FFFF)
  • UMA(Upper Memory Area):384 KB(0xA0000–0xFFFFF)被硬件占用

三、详细区域解析

1.  中断向量表(IVT)— 0x00000 ~ 0x003FF

  • 存放 256 个中断处理程序入口地址
  • 每个条目:偏移(2B) + 段(2B)
  • 重要中断:
    • INT 10h:视频服务(显示字符)
    • INT 13h:磁盘服务
    • INT 16h:键盘输入
    • INT 19h:引导加载

2.  BIOS 数据区(BDA)— 0x00400 ~ 0x004FF

  • 关键字段(偏移从 0x400 开始):
    • 0x410:设备标志(内存大小、软驱数量等)
    • 0x417:键盘状态(Shift/Caps Lock 等)
    • 0x450:RS-232 串口基地址

3.  常规内存— 0x00500 ~ 0x9FFFF

  • DOS 和应用程序的主要运行空间
  • COM 程序:加载到 0x100(PSP 后)
  • EXE 程序:由 DOS 加载器分配段

4.  视频内存 — 0xB8000(彩色文本模式)

  • 每字符占 2 字节:ASCII + 属性
    • 属性字节:背景色(高 4 位)、前景色(低 4 位)
  • 示例:在屏幕左上角显示 'A'(白色):

mov ax, 0xB800
mov es, ax
mov word [es:0], 0x0741 ; 0x41='A', 0x07=白底黑字

5. 系统 BIOS ROM — 0xF0000 ~ 0xFFFFF

  • CPU 复位后,CS=0xF000, IP=0xFFF0 → 从 0xFFFF0 开始执行
  • 包含 POST(加电自检)和 BIOS 中断服务例程

四、重要限制与设计影响

限制后果
1MB 寻址上限 早期 PC 无法直接使用 >1MB 内存
段重叠 同一物理地址有多种段:偏移表示(如 0x0000:0x0010 = 0x0001:0x0000)
无内存保护 任何程序可读写任意内存(包括 BIOS 和 IVT)
640KB 墙 成为 DOS 时代的著名瓶颈
赞(0)
未经允许不得转载:网硕互联帮助中心 » 8086/8088实模式的内存布局
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!