当前位置: 首页 > news >正文

8086/8088实模式的内存布局

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

一、核心特性

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

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

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

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

地址范围(物理地址)用途说明
0x00000 – 0x003FF中断向量表(IVT)256 个中断向量(每个 4 字节),共 1KB
0x00400 – 0x004FFBIOS 数据区(BDA)存储设备信息、键盘缓冲区等
0x00500 – 0x9FFFF常规内存(Conventional Memory)DOS 程序可用的主内存(≈ 640 KB)
0xA0000 – 0xBFFFFUpper 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)被硬件占用

三、详细区域解析

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

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

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

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

(三)常规内存— 0x00500 ~ 0x9FFFF

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

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

  • 每字符占 2 字节:ASCII + 属性
    • 属性字节:背景色(高 4 位)、前景色(低 4 位)
  • 示例:在屏幕左上角显示 'A'(白色):
mov ax, 0xB800 mov es, ax mov word [es:0], 0x0741 ; 0x41='A', 0x07=白底黑字

1. 屏幕布局

  • 文本模式分辨率:80 列 × 25 行 =2000 个字符
  • 总内存占用:2000 × 2 =4000 字节(从0xB80000xB8F9F
  • 每行偏移:160 字节(80 字符 × 2)

💡 第row行、第col列的偏移计算:

offset = (row * 80 + col) * 2;

2. 数据格式

每个字符占 2 个字节(16 位)

字节偏移含义
偶数地址(如0xB8000,0xB8002...)8 位ASCII 字符码(Character Code)
奇数地址(如0xB8001,0xB8003...)8 位属性字节(Attribute Byte)

💡 物理布局(小端序机器上连续存储):

[0xB8000] = 'A' → 字符

[0xB8001] = 0x1F → 属性

[0xB8002] = 'B'

[0xB8003] = 0x1F ...

3. 属性格式

属性字节是一个 8 位值,结构如下:

7 6 5 4 3 2 1 0 ┌────┬────┬────┬────┬────┬────┬────┬────┐

│ BL │ R │ G │ B │ bl │ r │ g │ b │ └────┴────┴────┴────┴────┴────┴────┴────┘

名称作用
0–2前景色(Foreground Color)bgr(注意顺序是 蓝-绿-红)
3前景高亮(Foreground Intensity)0=暗色,1=亮色
4–6背景色(Background Color)BGR(蓝-绿-红)
7闪烁/背景高亮
  • 默认:闪烁(Blink)
  • 若 BIOS 设置为“禁用闪烁”,则此位变为 背景高亮(Background Intensity)

4. 常见颜色编码

位组合 (RGB)颜色
000黑色
001蓝色
010绿色
011青色
100红色
101洋红(品红)
110棕色/黄色
111白色/浅灰

🧪 示例:写一个白色字符 'A' 到屏幕左上角

; 方法 1:直接写内存 mov ax, 0xB800 mov es, ax mov word ptr es:[0], 0x0741 ; 0x41='A', 0x07=白底黑字(前景白,背景黑) ; 方法 2:分高低字节 mov byte ptr es:[0], 'A' ; 字符 mov byte ptr es:[1], 0x07 ; 属性

属性0x07解析:

  • 二进制:0000 0111
  • 前景:111(白色)+ 高亮=0 →浅灰色
  • 背景:000(黑色)
  • 闪烁:0(关闭)

✅ 这是最常见的“黑底白字”样式。

(五)系统 BIOS ROM — 0xF0000 ~ 0xFFFFF

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

四、重要限制与设计影响

限制后果
1MB 寻址上限早期 PC 无法直接使用 >1MB 内存
段重叠同一物理地址有多种段:偏移表示(如0x0000:0x0010=0x0001:0x0000
无内存保护任何程序可读写任意内存(包括 BIOS 和 IVT)
640KB 墙成为 DOS 时代的著名瓶颈
http://www.jsqmd.com/news/357193/

相关文章:

  • 强烈安利 10个降AIGC工具:专科生降AI率全攻略
  • 学术开题新革命:揭秘书匠策AI如何让开题报告“一键升级”
  • 【BIOS中断】磁盘与 INT 13H
  • 深度测评 一键生成论文工具 千笔 VS 云笔AI 本科生专属
  • 2000-2025年各省政府公共服务注意力文本分析数据
  • 开题报告“黑科技”大揭秘:书匠策AI如何让学术小白秒变“开题达人”
  • 自动化测试的颠覆性影响与核心挑战
  • 【BIOS中断】屏幕与INT 10H
  • 救命神器!继续教育论文写作利器 —— 千笔写作工具
  • 开题报告“智能导航仪”:书匠策AI如何让学术小白秒变“开题达人”
  • springboot连锁药店管理系统_开题报告
  • 开题报告“通关秘籍”:书匠策AI如何让学术新手秒变“开题达人”
  • ‌AI技术主权:本地化大模型在敏感领域的合规测试框架‌
  • 自动化工具Drissonpage 保姆级教程(含xpath语法)
  • 跨境合规自动化检测的技术架构与测试实践
  • 已有安全措施确认(中)
  • 省、地级市数据知识产权试点DID(2000-2025年)
  • 历年蓝桥杯青少组省赛国赛C++中/高级组真题解析 | 2025年8月(国赛)
  • ‌AI民主化工具:低资源社区的轻量级测试套件生成引擎‌
  • 开题报告“救星”来了!书匠策AI如何用科技解锁科研新姿势
  • UE5 C++(69-2)
  • AI预测响应演练工具:软件测试从业者的专业指南
  • UE5 C++(67)
  • 【图文教程】禁止win11自动更新,彻底关闭windows更新
  • UE5 C++(68)
  • 2026年软件测试公众号爆款内容全景:专业洞察与实战策略
  • 【137页ppt】AI赋能一人公司PPT:2026年OPC商业模式全景解析
  • UE5 C++(66-2)
  • Kafka从入门到上天系列第二篇:直击生产者和消费者
  • Directx修复工具下载安装教程