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

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变0SHR是算术右移一位相当于除以2CSL是循环左移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 是把累加器的值存到内存地址XLDA 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 X1→W, ACC→MDR→M(MAR)、LDA XM(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
---
*本章难度:⭐⭐⭐⭐ 中等*
*重要程度:⭐⭐⭐⭐ 重要*
*补充版本:增加了通俗解释、实际例子、例题、真题精选与考试技巧*