Files
obsidian/计算机组成原理/学习笔记/09_控制单元功能_补充版.md
T

419 lines
19 KiB
Markdown
Raw 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.
# 第9章 控制单元功能(详细补充版)
> 📖 本章分析控制单元为完成不同指令所发出的各种微操作命令。
> 🎯 重点理解微操作命令和指令执行过程
> 📝 考试范围:9.2.3~9.2.5 不考;复习重点:例题9.1、9.2,课后习题9.1~9.8、9.11、9.12
---
## 📋 本章目录
- [[#9.1 微操作命令的分析]]
- [[#9.2 控制单元的功能]]
- [[#本章小结]]
- [[#例题与解析]]
- [[#真题与作业精选]]
---
## 9.1 微操作命令的分析
### 9.1.1 微操作命令的概念
> [!info] 定义
> 微操作命令是控制单元发出的最基本控制信号,控制计算机各部件完成相应操作。
要理解微操作命令,可以把它想象成工厂里最细粒度的工作指令——"拿起零件"、"转动螺丝"这样的最小动作,不能再拆分了。整个计算机的工作,就是由控制单元不断发出这些最基础的信号,指挥数据通路和各个功能部件协同配合。
比如 `PC → MAR` 就是一条微操作命令,意思是把程序计数器的值送到地址寄存器;`1 → R` 是向主存发出读命令。每一条都很简单,但组合起来就能完成复杂的指令执行。
### 9.1.2 指令周期的四个阶段
```mermaid
graph LR
A[指令周期] --> B[取指周期]
A --> C[间址周期]
A --> D[执行周期]
A --> E[中断周期]
```
一条指令从开始执行到完成,要经历四个阶段,就像完成一个任务需要"拿任务单→确认地址→干活→处理突发情况"这几个步骤。
**取指周期**是每条指令都有的,负责从内存把指令取到CPU里。**间址周期**只有间接寻址的指令才需要——就像你拿到的纸条上写的是"去3号柜找",但3号柜里放的才是真正的东西的地址,你需要先去3号柜拿到真实地址。**执行周期**是真正干活的阶段,不同指令做的事情不同,花的时间也不同。**中断周期**不是每条指令都有,只有发生了中断(比如键盘按键、打印机完成)才会进入这个阶段去处理紧急事件。
### 9.1.3 取指周期的微操作
取指周期是所有指令共有的阶段,它的微操作序列是固定的(这是考试高频考点,期中/期末均考过默写取指周期微操作序列的题目):
| 步骤 | 微操作 | 说明 |
|------|--------|------|
| 1 | PC → MAR | 现行指令地址送MAR |
| 2 | 1 → R | 向主存发读命令 |
| 3 | M(MAR) → MDR | 指令从主存读至MDR |
| 4 | MDR → IR | 指令送指令寄存器 |
| 5 | OP(IR) → CU | 操作码送CU译码 |
| 6 | (PC) + 1 → PC | 程序计数器加1 |
```mermaid
sequenceDiagram
participant PC
participant MAR
participant MEM as 主存
participant MDR
participant IR
participant CU
PC->>MAR: PC → MAR
Note over MAR: 1 → R(发读命令)
MEM->>MDR: M(MAR) → MDR
MDR->>IR: MDR → IR
IR->>CU: OP(IR) → CU
Note over PC: (PC) + 1 → PC
```
这个过程很直白:先把PC里的地址送到MAR,告诉主存"我要读这个地址的东西",主存把指令送到MDR,再从MDR搬到IR,同时把操作码送给CU去译码,最后PC加1指向下一条指令。整个流程就像从货架上取货——先告诉仓库你要哪个货架的东西(PC→MAR),仓库把东西放到传送带上(M(MAR)→MDR),你从传送带上拿过来(MDR→IR),然后看看是什么东西(OP(IR)→CU),同时记一下下一个要取的位置((PC)+1→PC)。
完整链路写法为:**PC→MAR→1→R→M(MAR)→MDR→MDR→IR→OP(IR)→CU→(PC)+1→PC**。这六步顺序不可变——必须先送地址才能读内存,必须先读到MDR才能送到IR,必须先送到IR才能译码。唯一可以和其他操作重叠的是最后一步PC加1,它和前面的译码操作可以并行。
### 9.1.4 间址周期的微操作
间址周期只在间接寻址时出现,目的是把形式地址转换成有效地址:
| 步骤 | 微操作 | 说明 |
|------|--------|------|
| 1 | Ad(IR) → MAR | 形式地址送MAR |
| 2 | 1 → R | 向主存发读命令 |
| 3 | M(MAR) → MDR | 有效地址从主存读至MDR |
| 4 | MDR → Ad(IR) | 有效地址送IR地址字段 |
```mermaid
sequenceDiagram
participant IR
participant MAR
participant MEM as 主存
participant MDR
IR->>MAR: Ad(IR) → MAR
Note over MAR: 1 → R(发读命令)
MEM->>MDR: M(MAR) → MDR
MDR->>IR: MDR → Ad(IR)
```
间接寻址就像你拿到一张纸条写着"去3号柜找",3号柜里放的才是真正的目标地址。间址周期做的事情就是:先把纸条上的地址(形式地址)送去查,然后从那个位置拿到真正的地址(有效地址),再把有效地址写回指令的地址字段,这样后面执行周期就知道该去哪取数据了。
### 9.1.5 执行周期的微操作
执行周期的微操作取决于指令类型,不同指令差异很大。
**非访存指令**不需要访问内存,操作直接在CPU内部完成:
| 指令 | 微操作 | 说明 |
|------|--------|------|
| CLA | 0 → ACC | 清除累加器 |
| COM | $\overline{ACC}$ → ACC | 累加器取反 |
| SHR | L(ACC) → R(ACC), ACC₀ → ACC₀ | 算术右移 |
| CSL | L(ACC) → R(ACC), ACC₀ → ACCₙ | 循环左移 |
| STP | 0 → G | 停机指令 |
这些指令都很简单——CLA就是把累加器清零,COM是把每一位取反(0变1、1变0),SHR是算术右移一位(相当于除以2),CSL是循环左移,STP是停机。它们不需要去内存取数据,所以执行周期很短。
**访存指令**需要访问内存,执行周期包含访存操作:
| 指令 | 微操作 | 说明 |
|------|--------|------|
| ADD X | Ad(IR) → MAR, 1 → R, M(MAR) → MDR, (ACC) + (MDR) → ACC | 加法指令 |
| STA X | Ad(IR) → MAR, 1 → W, ACC → MDR, MDR → M(MAR) | 存数指令 |
| LDA X | Ad(IR) → MAR, 1 → R, M(MAR) → MDR, MDR → ACC | 取数指令 |
ADD X 是把内存地址X处的数取出来加到累加器;STA X 是把累加器的值存到内存地址X;LDA X 是把内存地址X处的数取到累加器。它们都需要先送地址、再读写内存、最后在CPU内部完成数据操作。
STA X 和 LDA X 的关键区别在于数据流方向和读写命令:STA 发的是写命令(1→W),数据从 ACC→MDR→M(MAR);LDA 发的是读命令(1→R),数据从 M(MAR)→MDR→ACC。考试经常让你区分这两者。
**转移指令**改变程序的执行顺序:
| 指令 | 微操作 | 说明 |
|------|--------|------|
| JMP X | Ad(IR) → PC | 无条件转移 |
| BAN X | A₀ · Ad(IR) + $\overline{A₀}$ · (PC) → PC | 条件转移(负则转) |
JMP X 就是无条件跳转到地址X,直接把X送到PC。BAN X 是条件转移——如果累加器最高位(符号位)为1(表示负数),就跳转到X;否则继续执行下一条指令。
### 9.1.6 微操作的节拍安排
微操作不能随意执行,必须分配到不同的时钟节拍(T₀、T₁、T₂...)中。安排的原则是:同一个节拍内可以同时执行不冲突的微操作(比如一个节拍里可以同时做寄存器读和ALU运算,但不能同时读同一个寄存器和写同一个寄存器)。考试中经常给出具体指令,要求你写出每个节拍安排的微操作,这是期中/期末的重点题型。
### 9.1.7 指令执行的完整过程分析
`MOV R0,04H` 为例分析完整的指令执行过程。这条指令需要 5 个机器周期,访存 3 次(取指 2 次 + 取操作数 1 次)。
**取指过程**:PC→MAR→读主存→MDR→IR,这是一条指令执行的第一步,每条指令都要走一遍。取到的指令送入 IR 后,操作码送 CU 译码,PC 同时加 1。
**执行过程**PC+1→MAR→读 04H→MAR→读 M(04H)→R0。注意这里 PC 加 1 后不是简单地指向下一条指令,而是指向操作数地址 04H,需要再访存一次把真正的操作数取出来送到 R0。
这类题目考察的是你对"机器周期"概念的理解——取指占几个机器周期、执行占几个机器周期、每次访存对应一个机器周期,把这些搞清楚,题目就不难了。
---
## 9.2 控制单元的功能
### 9.2.1 控制单元的外特性
控制单元是整个CPU的指挥中心,它接收各种输入信号,然后发出控制信号指挥各部件工作。
**输入信号**包括四类:时钟信号让CU按节拍工作,就像乐队指挥跟着节拍器;指令寄存器送来操作码,告诉CU当前要执行什么指令;标志位(条件码)提供运算结果的状态信息,帮助CU决定是否跳转;外来信号包括中断请求、总线请求等外部事件。
**输出信号**分两类:CPU内部控制信号控制ALU、寄存器等内部部件的操作;到控制总线的信号则控制主存和I/O设备的读写。
### 9.2.2 控制信号的时序
控制信号不是随意发出的,必须按照严格的时序来。时钟周期是CPU的最小时间单位(比如1GHz CPU的时钟周期是1ns),机器周期完成一个基本操作(通常包含几个时钟周期),指令周期完成一条指令(包含一个或几个机器周期)。
在取指周期,每个时钟周期发出一组控制信号,按固定顺序完成取指操作。在执行周期,根据指令类型的不同,CU会发出不同的控制信号组合——加法指令需要ALU做加法,存数指令需要向内存发写命令,转移指令需要修改PC的值。
> [!warning] 考试范围提醒
> 9.2.3~9.2.5 不在考试范围内,以下仅做简要了解即可。
### 9.2.3 控制信号的组成
控制信号按控制对象可以分为四类:ALU控制信号决定ALU做什么运算(加法、减法、逻辑与、逻辑或等);寄存器控制信号控制寄存器的读写(哪些寄存器要读、哪些要写);数据通路控制信号控制数据在CPU内部的传输方向(比如从ALU输出送到哪个寄存器);总线控制信号控制总线的读写操作(读内存还是写内存)。
这些信号配合时序,在正确的时刻发出,就能指挥整个计算机协调工作。
---
## 📝 本章小结
### 核心概念
1. **微操作命令**:控制单元发出的最基本控制信号,不可再分
2. **指令周期**:取指周期→间址周期→执行周期→中断周期
3. **控制单元功能**:根据指令和时序,发出各种控制信号
### 关键术语
| 术语 | 英文 | 含义 |
|------|------|------|
| 微操作 | Micro-operation | 最基本的操作 |
| 控制单元 | Control Unit | 发出控制信号的部件 |
| 指令周期 | Instruction Cycle | 完成一条指令的时间 |
| 机器周期 | Machine Cycle | 完成一个基本操作的时间 |
### 重点图示
> [!summary] 必须掌握的图
> 1. 指令周期的四个阶段图
> 2. 取指周期的微操作序列图
> 3. 间址周期的微操作序列图
> 4. 各种指令的微操作序列图
---
## 🧪 例题与解析
### 例题1:取指周期分析(教材例题9.1)
**题目**:写出取指周期的微操作序列。
**答案**
取指周期的微操作序列:
1. **PC → MAR**:现行指令地址送MAR
2. **1 → R**:向主存发读命令
3. **M(MAR) → MDR**:指令从主存读至MDR
4. **MDR → IR**:指令送指令寄存器
5. **OP(IR) → CU**:操作码送CU译码
6. **(PC) + 1 → PC**:程序计数器加1
这六步是所有指令共有的,顺序不能变——必须先送地址才能读内存,必须先读到MDR才能送到IR,必须先送到IR才能译码。唯一可以和其他操作重叠的是最后一步PC加1,它和前面的译码操作可以并行。
### 例题2:间址周期分析(教材例题9.2)
**题目**:写出间址周期的微操作序列。
**答案**
间址周期的微操作序列:
1. **Ad(IR) → MAR**:形式地址送MAR
2. **1 → R**:向主存发读命令
3. **M(MAR) → MDR**:有效地址从主存读至MDR
4. **MDR → Ad(IR)**:有效地址送IR地址字段
间址周期的目的就是把形式地址变成有效地址。形式地址是指令里给出的地址,但它不是最终地址——那个位置存放的才是真正的有效地址。所以需要额外访问一次内存,把有效地址取出来,写回指令的地址字段,这样后续的执行周期就知道该去哪操作了。
### 例题3:加法指令分析(课后习题9.1~9.3同类型)
**题目**:写出加法指令 ADD X 的微操作序列。
**答案**
加法指令 ADD X 的微操作序列:
1. **Ad(IR) → MAR**:形式地址送MAR
2. **1 → R**:向主存发读命令
3. **M(MAR) → MDR**:操作数从主存读至MDR
4. **(ACC) + (MDR) → ACC**:累加器内容与MDR内容相加,结果送ACC
前三步和取数指令一样,都是把内存地址X处的操作数取到MDR。第四步是关键——把累加器里原来的值和MDR里的值送到ALU做加法,结果写回累加器。如果X是间接寻址的,还需要在前面加一个间址周期来获取有效地址。
### 例题4:存数指令分析(课后习题9.4~9.6同类型)
**题目**:写出存数指令 STA X 的微操作序列。
**答案**
存数指令 STA X 的微操作序列:
1. **Ad(IR) → MAR**:形式地址送MAR
2. **1 → W**:向主存发写命令
3. **ACC → MDR**:累加器内容送MDR
4. **MDR → M(MAR)**MDR内容写入主存
STA X 和 LDA X 的区别在于方向相反:LDA 是从内存读到累加器,STA 是从累加器写到内存。注意第二步发的是写命令(1→W)而不是读命令(1→R),数据流方向也反过来——从ACC到MDR再到内存。
### 例题5:控制单元功能分析(课后习题9.11~9.12同类型)
**题目**:简述控制单元的功能和输入输出信号。
**答案**
**控制单元的功能**:发出各种控制信号,控制计算机各部件在正确的时刻完成正确的操作。
**输入信号**
- **时钟**:CU按节拍工作,每个时钟周期发出一组控制信号
- **指令寄存器**:操作码决定CU要发出什么控制信号
- **标志**:条件码决定是否需要跳转
- **外来信号**:中断请求、总线请求等外部事件
**输出信号**
- **CPU内控制信号**:控制ALU、寄存器等内部部件
- **到控制总线的信号**:控制主存、I/O设备的读写
CU的工作可以这样理解:它看着指令(操作码),结合当前状态(标志),按照时钟节拍,在每个时刻发出正确的控制信号,指挥数据在各个部件之间流动,完成指令的功能。
---
## 📖 真题与作业精选
以下是来自作业、期中/期末考试和复习资料的典型题目,建议重点练习。
### 真题1:微操作节拍安排(作业三原题,期中/期末高频考点)
**题目**:对下列指令分别安排微操作节拍:
1. STA X(存数指令)
2. AND X(逻辑与指令)
3. ADD #a(立即数加法指令)
**答案**
**STA X 的执行周期节拍安排:**
| 节拍 | 微操作 |
|------|--------|
| T₀ | Ad(IR)→MAR, 1→W |
| T₁ | ACC→MDR |
| T₂ | MDR→M(MAR) |
注意 T₀ 同时发出地址和写命令,这是考试中的常见写法,体现了微操作的并行性。
**AND X 的执行周期节拍安排:**
| 节拍 | 微操作 |
|------|--------|
| T₀ | Ad(IR)→MAR, 1→R |
| T₁ | M(MAR)→MDR |
| T₂ | (ACC)∧(MDR)→ACC |
逻辑与指令需要先从内存取操作数,再和ACC做逻辑与运算。
**ADD #a 的执行周期节拍安排:**
| 节拍 | 微操作 |
|------|--------|
| T₀ | Ad(IR)→MDR |
| T₁ | (ACC)+(MDR)→ACC |
立即数加法不需要访存,操作数直接在指令的地址字段里,只需两步即可完成。
### 真题2:指令执行过程分析(复习资料原题)
**题目**:分析 `MOV R0,04H` 指令的执行过程,说明需要几个机器周期、访存几次。
**答案**
该指令需要 **5 个机器周期**,共 **访存 3 次**(取指 2 次 + 取操作数 1 次)。
**取指阶段**:PC→MAR→读主存→MDR→IR,这一步把 MOV 指令从内存取到 IR 中。
**执行阶段**PC+1→MAR→读 04H→MAR→读 M(04H)→R0。
执行过程的关键在于:PC 加 1 后不是直接执行完毕,而是继续用 PC 的值去取操作数地址 04H,再用 04H 去内存中读取真正的数据送到 R0。所以访存次数多于你可能预期的数量。计数机器周期时,每一次访存操作对应一个机器周期,再加上取指的一个周期,总共 5 个。
### 真题3:取指周期微操作链路(必须掌握,考试必考)
**题目**:用链路形式写出取指周期的微操作序列,并说明 PC 加 1 能否与其他操作并行。
**答案**
取指周期的完整链路:**PC→MAR→1→R→M(MAR)→MDR→MDR→IR→OP(IR)→CU→(PC)+1→PC**
六步顺序不可变:
1. PC→MAR(送地址)
2. 1→R(发读命令)
3. M(MAR)→MDR(读指令到MDR
4. MDR→IR(送指令到IR
5. OP(IR)→CU(操作码译码)
6. (PC)+1→PCPC加1
PC 加 1 可以与译码(第5步)并行执行。因为译码操作使用的是 IR 中的操作码字段,而 PC 加 1 操作使用的是 PC 寄存器本身,两者没有数据依赖关系,所以可以在同一个节拍内同时进行。这是考试中常问的一个细节,很多人会忽略。
---
## ⚡ 知识点速记卡
> 考前快速过一遍,30秒回忆整章核心
**微操作命令** = 控制单元发出的最基本控制信号,不可再分。如 PC→MAR、1→R。
**指令周期四阶段**:取指(所有指令)→ 间址(间接寻址才要)→ 执行(所有指令)→ 中断(有中断才要)。
**取指周期六步**(必背,考试必考):PC→MAR → 1→R → M(MAR)→MDR → MDR→IR → OP(IR)→CU → (PC)+1→PC。PC加1可与译码并行。
**间址周期四步**Ad(IR)→MAR → 1→R → M(MAR)→MDR → MDR→Ad(IR)。目的:形式地址→有效地址。
**访存指令执行周期**:ADD X(读+加)、STA X(写:1→W, ACC→MDR→M(MAR))、LDA X(读:M(MAR)→MDR→ACC)。先送地址,再读写内存,最后CPU内部操作。STA和LDA的数据流方向和读写命令是考试常考的区分点。
**非访存指令**:CLA清零、COM取反、SHR右移、CSL循环左移、STP停机,不访存所以快。
**控制单元输入**:时钟、操作码(IR)、标志、外来信号(中断/总线请求)。**输出**:CPU内部控制信号 + 控制总线信号。
**微操作节拍安排**(高频考题类型):给出指令写出各节拍微操作,注意同一节拍内无冲突的微操作可并行(如 T₀ 同时做 Ad(IR)→MAR 和 1→R)。立即数指令不需要访存,节拍数更少。
**考试常见题型**:默写取指/间址/执行周期微操作序列、给指令安排节拍、分析指令执行过程(机器周期数和访存次数)、取指周期六步顺序及并行关系。
> [!tip] 考试范围提示
> 本章不考 9.2.3~9.2.5。复习重点为:例题9.1、9.2,课后习题9.1~9.8、9.11、9.12。
---
## 🔗 相关链接
- [[00_计算机组成原理学习指南]] - 返回主目录
- [[08_CPU结构与功能]] - 上一章
- [[10_控制单元设计]] - 下一章
---
## 📚 参考资料
- 教材:《计算机组成原理》第3版 - 唐朔飞
- 复习资料:计算机组成原理知识点总结
- 习题:作业三、作业四、课后习题9.1~9.8、9.11、9.12
---
*本章难度:⭐⭐⭐⭐ 中等*
*重要程度:⭐⭐⭐⭐ 重要*
*补充版本:增加了通俗解释、实际例子、例题、真题精选与考试技巧*