# 指令集

> 计算机科学 · CIE A-Level 9618
> 来源: https://www.owlsprep.com/zh/study/cie-9618-u4-instruction-set/

本模块涵盖指令集定义、机器指令结构、指令分类、CISC与RISC架构以及核心寻址方式，符合CIE 9618的考核目标。

**先修:** [处理器基础结构和寄存器](https://www.owlsprep.com/zh/study/cie-9618-u4-processor-structure/); [二进制数表示](https://www.owlsprep.com/zh/study/cie-9618-u1-number-systems/)

## 学习目标

- 区分机器指令的核心组成部分
- 对常见处理器指令类型进行分类
- 比较CISC和RISC指令集架构的异同
- 识别并解释核心寻址方式

## 指令集定义与指令格式

**指令集** — 处理器可执行的所有机器级指令的完整集合，定义了处理器能够执行的所有可能操作。

*例:* ARM32拥有固定32位指令集，包含约50条核心指令。

所有机器指令都分为两个必要组成部分：定义要执行什么操作的**操作码（operation code）**，以及一个或多个定义操作所作用的数据或内存地址的**操作数**。

**例题:** 一个16位处理器使用7位操作码，计算最多可支持多少条唯一指令，以及剩余多少位可用于操作数。

1. 步骤1：唯一指令的数量等于 $2^n$，其中 $n$ 是操作码的位数。
2. $$2^7 = 128$$
3. 步骤2：用总指令长度减去操作码位数，得到操作数的位数：
4. $$16 - 7 = 9$$
5. 最终答案：128条唯一指令，操作数占9位。

> **考试提示:** 务必再次确认题目问的是指令数量还是操作数位数，不要混淆这两个概念。

## 指令分类

指令按功能分类，考官经常要求考生将给定指令分到这些核心类别中：

- **数据处理（算术/逻辑）**：对数据执行计算或逻辑运算（例如：加法、减法、与、移位）
- **数据移动**：在寄存器、内存和I/O之间移动数据（例如：加载、存储、移动）
- **控制流**：改变程序执行顺序（例如：分支、跳转、调用、返回）
- **输入/输出**：与外部外设通信

**例题:** 按功能对`ADD R1, R2, R3`、`BR MAIN`、`LOAD R0, [2000]`进行分类。

1. 1. `ADD R1, R2, R3`将R2和R3的值相加，结果存储到R1中，这是一条**数据处理（算术）**指令。
2. 2. `BR MAIN`将执行流改到标签`MAIN`，这是一条**控制流**指令。
3. 3. `LOAD R0, [2000]`将内存地址2000的数据复制到R0，这是一条**数据移动**指令。

## CISC与RISC架构

CISC与RISC的比较是CIE 9618指令集部分最常考的内容，两种架构的设计目标截然不同：

**方法对比**

- **CISC** — 大型指令集，指令长度可变（1-15字节），多种寻址方式，支持内存-内存操作
  - 优点: 编译后的代码体积更小，编译器更简单
  - 缺点: 硬件复杂，功耗更高

- **RISC** — 精简小型指令集，固定32位指令长度，寻址方式少，仅支持加载-存储架构
  - 优点: 硬件简单，支持高效流水线，功耗更低
  - 缺点: 编译后的代码体积更大，编译器更复杂

**例题:** 解释为什么现代智能手机处理器更倾向于使用RISC。

1. 步骤1：智能手机需要长续航，因此能效是核心优先事项。
2. 步骤2：RISC硬件更简单，单指令功耗更低，并且支持高效流水线以获得更高性能。
3. 完整考试答案：RISC处理器功耗更低，可延长智能手机续航。其定长指令还支持高效流水线，带来更好的性能。

> **考试提示:** 对于4分的比较题，务必同时给出两种架构对应的特征才能得满分。

## 核心寻址方式

**寻址方式** — 用于指定指令操作数的位置或值的方法。

CIE 9618最常考的三种核心寻址方式是：

- **立即寻址**：操作数的值直接存储在指令中，不需要额外内存访问
- **直接寻址**：指令存储操作数的内存地址，操作数的值从该内存地址取出
- **寄存器寻址**：操作数存储在处理器寄存器中，由指令指定寄存器

**例题:** 如果R0初始值为12，执行`ADD R0, #4`后R0的值是多少？说出`#4`的寻址方式。

1. 步骤1：`#`前缀表示立即数，因此4直接存储在指令中。
2. 步骤2：计算R0的新值： $12 + 4 = 16$。
3. 最终答案：R0 = 16，寻址方式为立即寻址。

## 常见错误

- **错误做法:** 4分的CISC与RISC比较题只给出一个不同点
  - 原因: 考官每个不同点给1分，因此细节不足会丢分
  - 正确做法: 比较题务必准备至少3个不同点（指令长度、寻址方式、硬件复杂度）
- **错误做法:** 计算最大指令数时混淆操作码和操作数
  - 原因: 只有操作码编码指令类型，因此只有操作码位数用于计算唯一指令数
  - 正确做法: 记住：操作码定义指令做什么，因此只有操作码位数用于计算唯一指令数
- **错误做法:** 认为立即寻址需要额外内存访问来获取操作数值
  - 原因: 立即寻址将操作数值直接存储在指令本身中
  - 正确做法: 只有基于内存的寻址方式（如直接寻址）才需要额外内存访问来获取操作数
- **错误做法:** 将加载/存储指令归类为数据处理指令
  - 原因: 加载/存储仅移动数据，不执行任何计算或处理
  - 正确做法: 加载和存储指令始终归类为数据移动指令

## 速查表

| 特征 | CISC | RISC |
| --- | --- | --- |
| 指令长度 | 可变 | 固定 |
| 指令集大小 | 大（100+） | 小（约50） |
| 寻址方式数量 | 多 | 少 |
| 架构 | 允许内存-内存访问 | 仅加载-存储 |
| 硬件复杂度 | 高 | 低 |

## 下一步

指令集设计是理解处理器性能和流水线的基础，因为RISC的定长指令支持高效的指令流水线来提升吞吐量。本主题还与汇编语言编程和内存层次结构密切相关，这两个都是CIE 9618第4卷中占分高的核心主题。掌握这里的概念将帮助你在多个常见考题中轻松得分。

- [寻址模式](https://www.owlsprep.com/zh/study/cie-9618-u4-addressing-modes/)
- [RISC vs CISC](https://www.owlsprep.com/zh/study/cie-9618-u4-risc-vs-cisc/)
- [流水线技术](https://www.owlsprep.com/zh/study/cie-9618-u4-pipelining/)

---

来自 [OwlsPrep](https://www.owlsprep.com) —— A-Level / IB / AP / IGCSE 免费学习指南，依据官方考纲编写。原页面：https://www.owlsprep.com/zh/study/cie-9618-u4-instruction-set/
