vault backup: 2026-06-28 16:34:33
This commit is contained in:
@@ -0,0 +1,115 @@
|
||||
---
|
||||
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端口编址方式]]
|
||||
Reference in New Issue
Block a user