3.7 KiB
tags, create time
| tags | create time | ||||||
|---|---|---|---|---|---|---|---|
|
2026-06-28 16:30 |
小端序与存储器组织 选择题考点
概述
小端序(Little-Endian)和 8086 存储器组织在 3 套试卷中共出现 5 题,几乎每套必考。核心考点为字单元内容计算、物理地址计算、堆栈中的小端序应用。
正文
1. 小端序存储规则
x86 采用小端序:低字节存低地址,高字节存高地址。
graph LR
subgraph "内存布局"
LO["低地址<br/>存低字节"] --> HI["高地址<br/>存高字节"]
end
subgraph "逻辑含义"
VAL["一个字 = 高字节×256 + 低字节"]
end
style LO fill:#dfd,stroke:#333,color:#000
style HI fill:#fdd,stroke:#333,color:#000
2. 字单元内容计算(通用方法)
三步法:
- 找到起始地址和下一个地址的内容
- 起始地址(低地址)→ 低字节;下一个地址(高地址)→ 高字节
- 字内容 = 高字节 × 256 + 低字节 = 高字节拼接低字节
[!example] 真题1 (22000H)=33H, (22001H)=44H,以 22000H 为地址的字单元内容 = ?
- 低字节(22000H)= 33H,高字节(22001H)= 44H
- 字内容 = 4433H
[!example] 真题2 (12341H)=11H, (12342H)=22H, (12343H)=33H,以 12342H 为地址的字单元内容 = ?
- 低字节(12342H)= 22H,高字节(12343H)= 33H
- 字内容 = 3322H
[!example] 真题3 (20000H)=12H, (20001H)=34H, (20002H)=56H,地址 20001H 的字单元内容 = ?
- 低字节(20001H)= 34H,高字节(20002H)= 56H
- 字内容 = 5634H
[!tip] 速算技巧 直接高地址内容拼低地址内容:看到 (addr)=34H, (addr+1)=56H → 答案就是 5634H。
3. 8086 物理地址计算
\text{物理地址} = \text{段基址} \times 10\text{H} + \text{偏移地址}
[!example] 真题 (CS)=2000H, (IP)=3456H,下一条指令的物理地址 = ?
2000\text{H} \times 10\text{H} + 3456\text{H} = 20000\text{H} + 3456\text{H} = \textbf{23456H}
graph TD
A["段基址: 2000H"] --> B["左移4位: 20000H"]
C["偏移地址: 3456H"] --> D["相加"]
B --> D
D --> E["物理地址: 23456H"]
style E fill:#ffd,stroke:#333,color:#000
[!question] 思考题 为什么 8086 要采用"段基址×16+偏移"的方式,而不是直接用 32 位地址?
答:8086 内部寄存器是 16 位的,最大寻址 64KB。通过段基址左移 4 位(×16)再加上 16 位偏移,可以用两个 16 位值组合出 20 位物理地址,寻址 1MB 空间。这是 16 位架构下的巧妙设计。
4. 堆栈中的小端序(POP 操作)
堆栈操作同样遵循小端序规则:
POP AX 时:
低地址内容 → AL(低字节)
高地址内容 → AH(高字节)
[!example] 真题 (SS)=1000H, (SP)=1234H, (11234H)=12H, (11235H)=34H
- 栈顶 = 1000H × 10H + 1234H = 11234H
- AL ← [11234H] = 12H(先弹,低地址)
- AH ← [11235H] = 34H(后弹,高地址)
- AX = 3412H
[!warning] 易错点 POP 弹出的是字(2字节),不是字节!答案不会是 12H 或 34H 单个字节,而是组合后的 3412H。
5. 三类题型速查
| 题型 | 关键公式/规则 | 常见陷阱 |
|---|---|---|
| 字单元内容 | 高地址内容拼接低地址内容 | 搞反高低字节顺序 |
| 物理地址 | 段基址×10H + 偏移 | 忘记×10H(左移4位) |
| POP 堆栈 | 先弹低地址给低寄存器 | 把 AH/AL 取反 |