2026-07-04 12:12:55 +08:00
|
|
|
|
# 第7章 指令系统
|
|
|
|
|
|
|
|
|
|
|
|
> 📖 本章介绍机器指令系统的分类、寻址方式和指令格式设计。
|
|
|
|
|
|
> 🎯 重点理解寻址方式和指令格式设计
|
2026-07-04 12:32:07 +08:00
|
|
|
|
>
|
|
|
|
|
|
> **考试范围**:7.1~7.4.1、7.5节不考,但 RISC vs CISC 对比属于常考内容。
|
|
|
|
|
|
> **复习重点**:例题7.1~7.7,课后习题7.1~7.8、7.16~7.19
|
|
|
|
|
|
> **本章核心考点**:寻址方式分析(有效地址+操作数)、扩展操作码设计、CISC vs RISC、指令格式分析
|
2026-07-04 12:12:55 +08:00
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 📋 本章目录
|
|
|
|
|
|
|
|
|
|
|
|
- [[#7.1 机器指令]]
|
|
|
|
|
|
- [[#7.2 操作数类型和操作类型]]
|
|
|
|
|
|
- [[#7.3 寻址方式]]
|
|
|
|
|
|
- [[#7.4 指令格式]]
|
|
|
|
|
|
- [[#7.5 RISC技术]]
|
|
|
|
|
|
- [[#本章小结]]
|
|
|
|
|
|
- [[#例题与解析]]
|
2026-07-04 12:32:07 +08:00
|
|
|
|
- [[#真题与作业精选]]
|
2026-07-04 12:12:55 +08:00
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 7.1 机器指令
|
|
|
|
|
|
|
|
|
|
|
|
### 7.1.1 指令的一般格式
|
|
|
|
|
|
|
|
|
|
|
|
> [!info] 定义
|
|
|
|
|
|
> 机器指令是计算机能识别和执行的基本命令,由操作码和地址码组成。
|
|
|
|
|
|
|
|
|
|
|
|
```mermaid
|
|
|
|
|
|
graph LR
|
|
|
|
|
|
subgraph "指令格式"
|
|
|
|
|
|
OP[操作码] --> ADDR[地址码]
|
|
|
|
|
|
end
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### 操作码
|
|
|
|
|
|
|
|
|
|
|
|
**功能**:指明指令要完成的操作
|
|
|
|
|
|
|
|
|
|
|
|
**长度**:
|
|
|
|
|
|
- **固定长度**:便于硬件设计,译码快
|
|
|
|
|
|
- **可变长度**:节省空间,译码复杂
|
|
|
|
|
|
|
|
|
|
|
|
操作码就像菜谱上的"动作",告诉厨师要做什么(炒、煮、蒸、烤)。固定长度每个动作都用相同长度的编码,可变长度常用动作用短编码不常用动作用长编码。
|
|
|
|
|
|
|
|
|
|
|
|
#### 地址码
|
|
|
|
|
|
|
|
|
|
|
|
**功能**:指出操作数地址、结果地址、下条指令地址
|
|
|
|
|
|
|
|
|
|
|
|
**格式分类**:
|
|
|
|
|
|
|
|
|
|
|
|
```mermaid
|
|
|
|
|
|
graph TB
|
|
|
|
|
|
A[指令格式] --> B[四地址指令]
|
|
|
|
|
|
A --> C[三地址指令]
|
|
|
|
|
|
A --> D[二地址指令]
|
|
|
|
|
|
A --> E[一地址指令]
|
|
|
|
|
|
A --> F[零地址指令]
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
| 格式 | 地址字段 | 操作 | 访存次数 |
|
|
|
|
|
|
|------|----------|------|----------|
|
|
|
|
|
|
| 四地址 | A1, A2, A3, A4 | (A1)OP(A2)→A3 | 4次 |
|
|
|
|
|
|
| 三地址 | A1, A2, A3 | (A1)OP(A2)→A3 | 4次 |
|
|
|
|
|
|
| 二地址 | A1, A2 | (A1)OP(A2)→A1 | 4次 |
|
|
|
|
|
|
| 一地址 | A1 | ACCOP(A1)→ACC | 2次 |
|
|
|
|
|
|
| 零地址 | 无 | 栈操作 | 0-2次 |
|
|
|
|
|
|
|
|
|
|
|
|
地址码就像菜谱上的"材料":四地址指令把A1和A2的数相加结果存到A3,下条指令在A4;三地址指令把A1和A2的数相加结果存到A3;二地址指令把A1和A2的数相加结果存到A1;一地址指令把ACC和A1的数相加结果存到ACC;零地址指令弹出栈顶两个数相加结果压入栈。
|
|
|
|
|
|
|
|
|
|
|
|
### 7.1.2 扩展操作码技术
|
|
|
|
|
|
|
|
|
|
|
|
> [!info] 目的
|
|
|
|
|
|
> 在指令字长固定的情况下,增加指令种类。
|
|
|
|
|
|
|
|
|
|
|
|
**原理**:操作码长度随地址数减少而增加
|
|
|
|
|
|
|
|
|
|
|
|
```mermaid
|
|
|
|
|
|
graph TB
|
|
|
|
|
|
subgraph "扩展操作码示例(16位指令)"
|
|
|
|
|
|
A["4位操作码<br/>15条三地址指令"] --> B["8位操作码<br/>15条二地址指令"]
|
|
|
|
|
|
B --> C["12位操作码<br/>15条一地址指令"]
|
|
|
|
|
|
C --> D["16位操作码<br/>16条零地址指令"]
|
|
|
|
|
|
end
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**设计原则**:
|
|
|
|
|
|
- 使用频度高的指令用短操作码
|
|
|
|
|
|
- 使用频度低的指令用长操作码
|
|
|
|
|
|
- 为扩展留有余地
|
|
|
|
|
|
|
|
|
|
|
|
扩展操作码就像邮政编码系统:短操作码常用指令用短编码节省空间,长操作码不常用指令用长编码种类多。4位操作码15条三地址指令(1111保留),8位操作码15条二地址指令,12位操作码15条一地址指令,16位操作码16条零地址指令。
|
|
|
|
|
|
|
2026-07-04 12:32:07 +08:00
|
|
|
|
> [!tip] 考试提示
|
|
|
|
|
|
> 扩展操作码设计是期中/期末的高频考点。核心思路:先确定操作码需要的位数(操作种类数取log2向上取整),再用剩余位作为地址码。如果要扩大寻址范围,可以考虑间接寻址(用间接寻址可以把有效地址扩展到整个存储空间)。
|
|
|
|
|
|
|
2026-07-04 12:12:55 +08:00
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 7.2 操作数类型和操作类型
|
|
|
|
|
|
|
|
|
|
|
|
### 7.2.1 操作数类型
|
|
|
|
|
|
|
|
|
|
|
|
| 类型 | 说明 | 示例 |
|
|
|
|
|
|
|------|------|------|
|
|
|
|
|
|
| 地址 | 无符号整数 | 指向存储器位置 |
|
|
|
|
|
|
| 数值 | 定点数、浮点数 | 算术运算 |
|
|
|
|
|
|
| 字符 | ASCII码 | 文本处理 |
|
|
|
|
|
|
| 逻辑数 | 逻辑运算 | 位操作 |
|
|
|
|
|
|
|
|
|
|
|
|
地址是无符号整数指向存储器位置,用于寻址操作;数值是定点数或浮点数用于算术运算;字符是ASCII码用于文本处理;逻辑数用于逻辑运算和位操作。
|
|
|
|
|
|
|
|
|
|
|
|
### 7.2.2 操作类型
|
|
|
|
|
|
|
|
|
|
|
|
**数据传送**:LOAD(从存储器取数据到寄存器)、STORE(从寄存器存数据到存储器)
|
|
|
|
|
|
|
|
|
|
|
|
**算术逻辑运算**:ADD(加法)、SUB(减法)、AND(逻辑与)、OR(逻辑或)
|
|
|
|
|
|
|
|
|
|
|
|
**移位操作**:SHL(逻辑左移)、SHR(逻辑右移)、SAL(算术左移)、SAR(算术右移)
|
|
|
|
|
|
|
|
|
|
|
|
**转移操作**:JMP(无条件转移)、JZ(条件转移)、CALL(调用子程序)、RET(返回)
|
|
|
|
|
|
|
|
|
|
|
|
**输入输出**:IN(从I/O端口读数据)、OUT(向I/O端口写数据)
|
|
|
|
|
|
|
|
|
|
|
|
数据传送像从仓库取材料到工作台;算术逻辑运算像把两个数加起来或相减;移位操作像所有位向左移动;转移操作像跳转到指定位置;输入输出像从外部设备读数据。
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 7.3 寻址方式
|
|
|
|
|
|
|
2026-07-04 12:32:07 +08:00
|
|
|
|
> [!tip] 考试提示
|
|
|
|
|
|
> 寻址方式分析是本章最高频的考点,几乎每年都会出题。关键要会算有效地址EA和操作数,并能判断每种寻址方式需要访存几次。
|
|
|
|
|
|
|
2026-07-04 12:12:55 +08:00
|
|
|
|
### 7.3.1 指令寻址
|
|
|
|
|
|
|
|
|
|
|
|
**顺序寻址**:PC = PC + 1,按顺序执行指令
|
|
|
|
|
|
**跳跃寻址**:PC = 跳转地址,跳转到指定地址执行
|
|
|
|
|
|
|
|
|
|
|
|
指令寻址像找下一条指令的方式:顺序寻址按顺序执行下一条指令,跳跃寻址跳转到指定地址执行。
|
|
|
|
|
|
|
|
|
|
|
|
### 7.3.2 数据寻址
|
|
|
|
|
|
|
|
|
|
|
|
**立即寻址**:操作数在指令中,比如MOV A, #5(把5存到A)。东西就在你手里,速度快不需要访问内存,只能用于常数。
|
|
|
|
|
|
|
|
|
|
|
|
**直接寻址**:操作数地址在指令中,比如MOV A, [1000](把地址1000的数存到A)。东西在仓库的某个位置,简单直接访问,地址范围有限。
|
|
|
|
|
|
|
|
|
|
|
|
**间接寻址**:操作数地址的地址在指令中,比如MOV A, [[1000]]。仓库里有一张纸条告诉你东西在哪里,灵活可以动态改变地址,但速度慢需要多次访问内存。
|
|
|
|
|
|
|
|
|
|
|
|
**寄存器寻址**:操作数在寄存器中,比如MOV A, R1(把R1的数存到A)。东西就在你手边的盒子里,速度最快不需要访问内存,寄存器数量有限。
|
|
|
|
|
|
|
|
|
|
|
|
**寄存器间接寻址**:操作数地址在寄存器中,比如MOV A, [R1]。盒子里有一张纸条告诉你东西在哪里,灵活可以动态改变地址,需要访问内存。
|
|
|
|
|
|
|
2026-07-04 12:32:07 +08:00
|
|
|
|
**基址寻址**:有效地址 EA = A + (BR),其中BR是基址寄存器(内容不变),A是形式地址(可变)。东西在仓库的某个区域,用区域号+偏移量定位,适合程序重定位。
|
|
|
|
|
|
|
|
|
|
|
|
**变址寻址**:有效地址 EA = A + (IX),其中IX是变址寄存器(内容可变),A是形式地址(不变)。东西在仓库的某个位置,用变址+偏移量定位,适合数组访问。
|
2026-07-04 12:12:55 +08:00
|
|
|
|
|
2026-07-04 12:32:07 +08:00
|
|
|
|
> [!important] 基址 vs 变址的区别(考试常考)
|
|
|
|
|
|
> - **基址寻址**:BR(基址寄存器)内容固定,形式地址A可变。用于程序重定位。
|
|
|
|
|
|
> - **变址寻址**:IX(变址寄存器)内容可变,形式地址A固定。用于数组遍历等。
|
|
|
|
|
|
>
|
|
|
|
|
|
> 例题:变址寄存器(IX)=0004H,PC=0003H。
|
|
|
|
|
|
> - 变址寻址:EA = A + (IX) = A + 0004H,A不变,IX可变。
|
|
|
|
|
|
> - 基址寻址:EA = A + (BR) = A + (BR),BR不变,A可变。
|
2026-07-04 12:12:55 +08:00
|
|
|
|
|
|
|
|
|
|
**相对寻址**:操作数地址 = PC + 偏移量,比如JMP +10(跳转到PC+10的位置)。东西在当前位置的某个偏移位置,适合相对跳转。
|
|
|
|
|
|
|
2026-07-04 12:32:07 +08:00
|
|
|
|
> [!tip] 访存次数分析(复习资料原题)
|
|
|
|
|
|
> 不同寻址方式的访存次数是考试重点:
|
|
|
|
|
|
> - `ADD 04H, R0`(直接寻址):3次访存(取指2次 + 取操作数1次)
|
|
|
|
|
|
> - `ADD (04H), R0`(间接寻址):4次访存(取指2次 + 取数1次 + 写回1次)
|
|
|
|
|
|
>
|
|
|
|
|
|
> 规律:每多一层间接,就多一次访存。考试中要仔细区分直接寻址和间接寻址。
|
|
|
|
|
|
|
2026-07-04 12:12:55 +08:00
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 7.4 指令格式
|
|
|
|
|
|
|
|
|
|
|
|
### 7.4.1 指令格式设计原则
|
|
|
|
|
|
|
|
|
|
|
|
**设计原则**:
|
|
|
|
|
|
1. **规整性**:指令长度对齐,便于译码
|
|
|
|
|
|
2. **高效性**:常用指令短,不常用指令长
|
|
|
|
|
|
3. **兼容性**:保持向后兼容
|
|
|
|
|
|
4. **扩展性**:留有扩展空间
|
|
|
|
|
|
|
|
|
|
|
|
指令格式设计就像设计邮票:规整性指令长度对齐便于译码,高效性常用指令短不常用指令长,兼容性新处理器能运行旧程序,扩展性保留一些编码用于未来扩展。
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 7.5 RISC技术
|
|
|
|
|
|
|
2026-07-04 12:32:07 +08:00
|
|
|
|
> [!tip] 考试提示
|
|
|
|
|
|
> CISC vs RISC 对比是本章的经典考点,经常以简答题或对比题的形式出现。要记住两者在指令数量、指令长度、控制方式、流水线支持等方面的区别。
|
|
|
|
|
|
|
2026-07-04 12:12:55 +08:00
|
|
|
|
### 7.5.1 RISC与CISC对比
|
|
|
|
|
|
|
|
|
|
|
|
| 特性 | RISC | CISC |
|
|
|
|
|
|
|------|------|------|
|
2026-07-04 12:32:07 +08:00
|
|
|
|
| 指令数量 | 少(几十条) | 多(几百条) |
|
2026-07-04 12:12:55 +08:00
|
|
|
|
| 指令长度 | 固定 | 可变 |
|
2026-07-04 12:32:07 +08:00
|
|
|
|
| 寻址方式 | 简单(少) | 复杂(多) |
|
2026-07-04 12:12:55 +08:00
|
|
|
|
| 指令周期 | 单周期 | 多周期 |
|
2026-07-04 12:32:07 +08:00
|
|
|
|
| 流水线 | 支持(友好) | 部分支持 |
|
2026-07-04 12:12:55 +08:00
|
|
|
|
| 编译器 | 复杂 | 简单 |
|
2026-07-04 12:32:07 +08:00
|
|
|
|
| 控制方式 | 硬布线控制 | 微程序控制 |
|
|
|
|
|
|
| 代表 | ARM、MIPS | x86 |
|
2026-07-04 12:12:55 +08:00
|
|
|
|
|
|
|
|
|
|
RISC(精简指令集)指令少简单速度快,容易实现流水线,但编译器复杂代码密度低;CISC(复杂指令集)指令多复杂功能强,编译器简单代码密度高,但难以实现流水线速度慢。
|
|
|
|
|
|
|
|
|
|
|
|
ARM处理器(手机)、MIPS处理器(嵌入式)是RISC;x86处理器(个人电脑)是CISC。
|
|
|
|
|
|
|
2026-07-04 12:32:07 +08:00
|
|
|
|
> 记忆口诀:RISC——少而精、快而简、硬布线、流水线;CISC——多而全、慢而杂、微程序、编译简。
|
|
|
|
|
|
|
2026-07-04 12:12:55 +08:00
|
|
|
|
### 7.5.2 RISC特点
|
|
|
|
|
|
|
|
|
|
|
|
**主要特点**:
|
|
|
|
|
|
1. **指令数量少**:通常只有几十条指令
|
|
|
|
|
|
2. **指令长度固定**:所有指令长度相同
|
|
|
|
|
|
3. **寻址方式简单**:只有几种简单的寻址方式
|
|
|
|
|
|
4. **单周期执行**:大多数指令在一个周期内完成
|
|
|
|
|
|
5. **流水线支持**:容易实现流水线
|
|
|
|
|
|
6. **大量寄存器**:通常有32个以上寄存器
|
|
|
|
|
|
7. **硬布线控制**:用硬布线实现控制单元
|
|
|
|
|
|
|
|
|
|
|
|
指令数量少容易实现速度快但功能有限;指令长度固定译码简单容易实现流水线但代码密度低;寻址方式简单译码简单速度快但灵活性差;单周期执行速度快容易实现流水线但某些复杂指令需要多个周期;流水线支持提高吞吐率但需要处理流水线冲突;大量寄存器减少访存次数速度快但增加硬件成本;硬布线控制速度快但不灵活难以修改。
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 📝 本章小结
|
|
|
|
|
|
|
|
|
|
|
|
### 核心概念
|
|
|
|
|
|
|
|
|
|
|
|
1. **指令格式**:操作码 + 地址码
|
|
|
|
|
|
2. **寻址方式**:立即寻址、直接寻址、间接寻址等
|
|
|
|
|
|
3. **指令类型**:数据传送、算术逻辑、移位、转移、输入输出
|
|
|
|
|
|
4. **RISC技术**:精简指令集,速度快
|
|
|
|
|
|
|
|
|
|
|
|
### 关键术语
|
|
|
|
|
|
|
|
|
|
|
|
| 术语 | 英文 | 含义 |
|
|
|
|
|
|
|------|------|------|
|
|
|
|
|
|
| 指令 | Instruction | 机器指令 |
|
|
|
|
|
|
| 操作码 | Operation Code | 指明操作类型 |
|
|
|
|
|
|
| 地址码 | Address Code | 指明操作数地址 |
|
|
|
|
|
|
| 寻址方式 | Addressing Mode | 找到操作数的方式 |
|
2026-07-04 12:32:07 +08:00
|
|
|
|
| 有效地址 | Effective Address | 实际访问的存储器地址 |
|
2026-07-04 12:12:55 +08:00
|
|
|
|
| RISC | Reduced Instruction Set Computer | 精简指令集计算机 |
|
|
|
|
|
|
| CISC | Complex Instruction Set Computer | 复杂指令集计算机 |
|
|
|
|
|
|
|
|
|
|
|
|
### 重点图示
|
|
|
|
|
|
|
|
|
|
|
|
> [!summary] 必须掌握的图
|
|
|
|
|
|
> 1. 指令格式图
|
|
|
|
|
|
> 2. 各种寻址方式图
|
|
|
|
|
|
> 3. 扩展操作码图
|
|
|
|
|
|
> 4. RISC与CISC对比图
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 🧪 例题与解析
|
|
|
|
|
|
|
|
|
|
|
|
### 例题1:指令格式设计
|
|
|
|
|
|
|
|
|
|
|
|
**题目**:设计一个16位指令系统,要求支持15条三地址指令、15条二地址指令、15条一地址指令、16条零地址指令。
|
|
|
|
|
|
|
|
|
|
|
|
**答案**:
|
|
|
|
|
|
|
|
|
|
|
|
三地址指令:4位操作码(1111保留),3个×4位=12位地址码,指令数2⁴-1=15条。
|
|
|
|
|
|
二地址指令:8位操作码(1111xxxx,xxxx≠1111),2个×4位=8位地址码,指令数15条。
|
|
|
|
|
|
一地址指令:12位操作码(1111xxxxxxxx,xxxxxxxx≠11111111),1个×4位=4位地址码,指令数15条。
|
|
|
|
|
|
零地址指令:16位操作码(1111xxxxxxxxxxxx),0位地址码,指令数16条。
|
|
|
|
|
|
|
|
|
|
|
|
### 例题2:寻址方式分析
|
|
|
|
|
|
|
|
|
|
|
|
**题目**:分析以下指令的寻址方式:
|
|
|
|
|
|
1. MOV A, #5
|
|
|
|
|
|
2. MOV A, [1000]
|
|
|
|
|
|
3. MOV A, R1
|
|
|
|
|
|
4. MOV A, [R1]
|
|
|
|
|
|
5. MOV A, [BASE + 100]
|
|
|
|
|
|
|
|
|
|
|
|
**答案**:
|
|
|
|
|
|
|
|
|
|
|
|
1. MOV A, #5:立即寻址,操作数5在指令中,速度快不需要访问内存。
|
|
|
|
|
|
2. MOV A, [1000]:直接寻址,操作数在地址1000,简单直接访问。
|
|
|
|
|
|
3. MOV A, R1:寄存器寻址,操作数在寄存器R1,速度最快不需要访问内存。
|
|
|
|
|
|
4. MOV A, [R1]:寄存器间接寻址,R1指向的地址的数,灵活可以动态改变地址。
|
|
|
|
|
|
5. MOV A, [BASE + 100]:基址寻址,BASE+100的数,适合程序重定位。
|
|
|
|
|
|
|
|
|
|
|
|
### 例题3:RISC与CISC比较
|
|
|
|
|
|
|
|
|
|
|
|
**题目**:比较RISC和CISC的特点。
|
|
|
|
|
|
|
|
|
|
|
|
**答案**:
|
|
|
|
|
|
|
|
|
|
|
|
RISC指令数量少(几十条)、指令长度固定、寻址方式简单、单周期执行、支持流水线、编译器复杂、寄存器多、硬布线控制;CISC指令数量多(几百条)、指令长度可变、寻址方式复杂、多周期执行、部分支持流水线、编译器简单、寄存器少、微程序控制。
|
|
|
|
|
|
|
|
|
|
|
|
RISC像精简工具,工具少简单速度快,容易使用效率高但功能有限;CISC像复杂工具,工具多复杂功能强,功能强大使用方便但使用复杂效率低。
|
|
|
|
|
|
|
|
|
|
|
|
### 例题4:扩展操作码设计
|
|
|
|
|
|
|
|
|
|
|
|
**题目**:设计一个12位指令系统,要求支持15条二地址指令、15条一地址指令、16条零地址指令。
|
|
|
|
|
|
|
|
|
|
|
|
**答案**:
|
|
|
|
|
|
|
|
|
|
|
|
二地址指令:4位操作码(1111保留),2个×4位=8位地址码,指令数2⁴-1=15条。
|
|
|
|
|
|
一地址指令:8位操作码(1111xxxx,xxxx≠1111),1个×4位=4位地址码,指令数15条。
|
|
|
|
|
|
零地址指令:12位操作码(1111xxxxxxxx),0位地址码,指令数16条。
|
|
|
|
|
|
|
|
|
|
|
|
### 例题5:寻址方式计算
|
|
|
|
|
|
|
|
|
|
|
|
**题目**:某计算机有16位地址线,8位数据线,采用直接寻址方式,求寻址范围。
|
|
|
|
|
|
|
|
|
|
|
|
**答案**:
|
|
|
|
|
|
|
|
|
|
|
|
16位地址线可以表示2¹⁶=65536个地址,即有65536个存储单元。8位数据线表示每个单元存8位数据(1字节),总容量65536×8位=64KB。
|
|
|
|
|
|
|
|
|
|
|
|
这就像一个仓库有65536个格子,每个格子能放8个鸡蛋,总容量就是64KB。
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
2026-07-04 12:32:07 +08:00
|
|
|
|
## 📖 真题与作业精选
|
|
|
|
|
|
|
|
|
|
|
|
> 以下题目来自期中/期末考试、课后作业及复习资料,是本章最常考的题型。
|
|
|
|
|
|
|
|
|
|
|
|
### 真题1:寻址方式求有效地址(复习资料原题)
|
|
|
|
|
|
|
|
|
|
|
|
**题目**:已知变址寄存器(IX)=0004H,PC=0003H,分别说明变址寻址和基址寻址的有效地址计算方式,并指出两者的关键区别。
|
|
|
|
|
|
|
|
|
|
|
|
**答**:
|
|
|
|
|
|
|
|
|
|
|
|
- 变址寻址:EA = A + (IX) = A + 0004H。这里形式地址A固定不变,变址寄存器IX的内容可以改变,适合用于数组遍历——每次循环只需修改IX即可访问数组的不同元素。
|
|
|
|
|
|
- 基址寻址:EA = A + (BR)。这里基址寄存器BR的内容固定不变,形式地址A可以改变,适合程序重定位——整个程序加载到不同内存区域时只需修改BR。
|
|
|
|
|
|
|
|
|
|
|
|
**关键区别**:基址时BR不变A可变(程序搬家只需改BR),变址时A不变IX可变(遍历数组只需改IX)。
|
|
|
|
|
|
|
|
|
|
|
|
### 真题2:指令访存次数(复习资料原题)
|
|
|
|
|
|
|
|
|
|
|
|
**题目**:分析以下指令各需几次访存:
|
|
|
|
|
|
1. `ADD 04H, R0`
|
|
|
|
|
|
2. `ADD (04H), R0`
|
|
|
|
|
|
|
|
|
|
|
|
**答**:
|
|
|
|
|
|
|
|
|
|
|
|
1. `ADD 04H, R0`(直接寻址):3次访存。
|
|
|
|
|
|
- 取指令需要2次访存(PC先指向指令地址,取指令后PC+1;若指令跨存储字边界则需取两次)
|
|
|
|
|
|
- 取操作数需要1次访存(直接从地址04H读取操作数)
|
|
|
|
|
|
|
|
|
|
|
|
2. `ADD (04H), R0`(间接寻址):4次访存。
|
|
|
|
|
|
- 取指令需要2次访存
|
|
|
|
|
|
- 间接寻址需要先从04H取出真正的地址,再从该地址取操作数,共2次访存
|
|
|
|
|
|
- 注意:如果该指令还需要写回结果到内存,访存次数还会增加
|
|
|
|
|
|
|
|
|
|
|
|
> 规律总结:直接寻址比间接寻址少一次访存。考试中要注意区分直接寻址的`04H`和间接寻址的`(04H)`——括号表示"间接"。
|
|
|
|
|
|
|
|
|
|
|
|
### 真题3:扩展操作码设计(期中原题)
|
|
|
|
|
|
|
|
|
|
|
|
**题目**:某指令系统共有78种操作,指令字长为16位。问:
|
|
|
|
|
|
1. 操作码至少需要多少位?
|
|
|
|
|
|
2. 剩余多少位可用于地址码?
|
|
|
|
|
|
3. 若要将寻址范围扩大到2^16,可以采用什么方法?
|
|
|
|
|
|
|
|
|
|
|
|
**答**:
|
|
|
|
|
|
|
|
|
|
|
|
1. 78种操作,操作码需要的位数 = ceil(log2(78)) = 7位(因为2^6=64<78,2^7=128>=78)。
|
|
|
|
|
|
2. 地址码位数 = 16 - 7 = 9位。
|
|
|
|
|
|
3. 9位地址码只能寻址2^9=512个单元,远小于2^16。可以采用**间接寻址**来扩大寻址范围——指令中的9位地址指向一个存储单元,该单元中存放的才是16位的有效地址,从而实现对2^16=65536个单元的寻址。
|
|
|
|
|
|
|
|
|
|
|
|
> [!tip] 解题技巧
|
|
|
|
|
|
> 扩展操作码设计题的关键步骤:①算操作码位数(log2向上取整);②用指令字长减去操作码位数得到地址码位数;③计算寻址范围;④如果寻址范围不够,考虑间接寻址扩展。这是期中考试曾经考过的原题,务必掌握。
|
|
|
|
|
|
|
|
|
|
|
|
### 真题4:CISC vs RISC 对比(考试高频简答题)
|
|
|
|
|
|
|
|
|
|
|
|
**题目**:从指令数量、指令长度、寻址方式、控制器实现、指令周期和流水线支持等方面比较CISC和RISC。
|
|
|
|
|
|
|
|
|
|
|
|
**答**:
|
|
|
|
|
|
|
|
|
|
|
|
| 比较项目 | CISC | RISC |
|
|
|
|
|
|
|----------|------|------|
|
|
|
|
|
|
| 指令数量 | 多(几百条),功能强 | 少(几十条),精简 |
|
|
|
|
|
|
| 指令长度 | 可变,不固定 | 固定长度 |
|
|
|
|
|
|
| 寻址方式 | 多种,灵活复杂 | 少数几种,简单 |
|
|
|
|
|
|
| 控制方式 | 微程序控制 | 硬布线控制 |
|
|
|
|
|
|
| 指令周期 | 多周期,时间长 | 单周期(多数),时间短 |
|
|
|
|
|
|
| 流水线 | 部分支持,难以高效流水 | 天然友好,易于流水线实现 |
|
|
|
|
|
|
| 编译器 | 简单,硬件做更多事 | 复杂,编译器做优化 |
|
|
|
|
|
|
| 编程 | 编程方便,指令表达力强 | 编程相对麻烦 |
|
|
|
|
|
|
| 代表 | x86(PC处理器) | ARM(手机)、MIPS(嵌入式) |
|
|
|
|
|
|
|
|
|
|
|
|
CISC的设计哲学是"硬件做更多事",让编程更方便;RISC的设计哲学是"软件做更多事",让硬件更简单高效。现代处理器中,x86内部其实也采用了类似RISC的微操作来提高效率。
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
2026-07-04 12:12:55 +08:00
|
|
|
|
## ⚡ 知识点速记卡
|
|
|
|
|
|
|
|
|
|
|
|
> 考前快速过一遍,30秒回忆整章核心
|
|
|
|
|
|
|
|
|
|
|
|
**指令 = 操作码 + 地址码**。操作码指明做什么,地址码指明操作数在哪。
|
|
|
|
|
|
|
2026-07-04 12:32:07 +08:00
|
|
|
|
**地址码个数**:四地址(A1 OP A2 -> A3,下条在A4)、三地址(->A3)、二地址(->A1)、一地址(ACC OP A1 -> ACC)、零地址(栈操作)。
|
2026-07-04 12:12:55 +08:00
|
|
|
|
|
2026-07-04 12:32:07 +08:00
|
|
|
|
**扩展操作码**:地址数越少,操作码越长,指令种类越多。常用指令用短操作码,不常用指令用长操作码。操作码位数 = ceil(log2(操作种类数))。
|
2026-07-04 12:12:55 +08:00
|
|
|
|
|
2026-07-04 12:32:07 +08:00
|
|
|
|
**七种寻址方式**:立即(数在指令里,最快)、直接(地址在指令里)、间接(地址指向的位置存着真正地址,多一次访存)、寄存器(数在寄存器,最快之一)、寄存器间接(寄存器里存地址)、基址(EA=A+(BR),BR不变A可变,适合重定位)、变址(EA=A+(IX),A不变IX可变,适合数组)、相对(PC+偏移,适合跳转)。
|
2026-07-04 12:12:55 +08:00
|
|
|
|
|
|
|
|
|
|
**RISC vs CISC**:RISC指令少、固定长度、单周期、流水线友好、硬布线控制(ARM/MIPS);CISC指令多、可变长度、多周期、微程序控制(x86)。
|
|
|
|
|
|
|
|
|
|
|
|
**指令格式设计**:规整性(长度对齐)、高效性(常用指令短)、兼容性(向后兼容)、扩展性(留余地)。
|
|
|
|
|
|
|
2026-07-04 12:32:07 +08:00
|
|
|
|
> **本章常见考题类型**:
|
|
|
|
|
|
> 1. 寻址方式识别与有效地址计算(必考)
|
|
|
|
|
|
> 2. 扩展操作码设计(期中考过原题)
|
|
|
|
|
|
> 3. 访存次数分析(注意直接/间接寻址的区别)
|
|
|
|
|
|
> 4. CISC vs RISC对比(简答题高频考点)
|
|
|
|
|
|
> 5. 指令格式分析与设计
|
|
|
|
|
|
|
2026-07-04 12:12:55 +08:00
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 🔗 相关链接
|
|
|
|
|
|
|
|
|
|
|
|
- [[00_计算机组成原理学习指南]] - 返回主目录
|
|
|
|
|
|
- [[06_运算方法]] - 上一章
|
|
|
|
|
|
- [[08_CPU结构与功能]] - 下一章
|
|
|
|
|
|
- [[09_控制单元功能]] - 控制单元相关内容
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
*本章难度:⭐⭐⭐⭐ 中等*
|
|
|
|
|
|
*重要程度:⭐⭐⭐⭐ 重要*
|
2026-07-04 12:32:07 +08:00
|
|
|
|
*考试占比:期中/期末约10~15分,以寻址方式和扩展操作码设计为主*
|