Files

116 lines
3.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
tags:
- 接口与通讯技术
- 小端序
- 存储器
- 物理地址
- 选择题
- 重点复习
create time: 2026-06-28 16:30
---
# 小端序与存储器组织 选择题考点
## 概述
小端序(Little-Endian)和 8086 存储器组织在 3 套试卷中共出现 5 题,几乎每套必考。核心考点为**字单元内容计算、物理地址计算、堆栈中的小端序应用**。
## 正文
### 1. 小端序存储规则
x86 采用**小端序**:**低字节存低地址,高字节存高地址。**
```mermaid
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. 字单元内容计算(通用方法)
**三步法:**
1. 找到起始地址和下一个地址的内容
2. 起始地址(低地址)→ **低字节**;下一个地址(高地址)→ **高字节**
3. 字内容 = 高字节 × 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}$
```mermaid
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 取反 |
## 关联笔记
- [[x86指令系统与寄存器 选择题考点]]
- [[IO端口编址方式|填空题专题:IO端口编址方式]]