当前位置: 首页 > news >正文

408计算机组成原理:微程序控制器——概念串联记忆版

复习位置:计算机组成原理 -> CPU / 控制器 -> 微程序控制器
目标:这部分不靠“秒杀口诀”硬背,而是把机器指令、微程序、微指令、微命令、微操作、CMAR、CMDR、控制存储器、微地址形成、微指令编码串成一条完整逻辑链。
只要这条链不断,选择题里的概念就不容易混。


一、先搭整个框架:把它看成“机器指令的翻译系统”

微程序控制器本质上是在做一件事:

把一条机器指令 拆成若干个更细的控制步骤 再一步一步控制CPU内部部件完成动作

所以先建立最重要的五层关系:

机器指令 ↓ 微程序 ↓ 微指令 ↓ 微命令(控制信号) ↓ 微操作(硬件真正执行的动作)

这是整章的主干。

以后任何概念忘了,都先回到这条链。


二、五个概念到底是什么

1. 机器指令

就是程序员和CPU指令系统层面看到的指令,例如:

ADD R1, R2 LOAD R1, [1000] JMP 2000

一条机器指令完成的是一个相对完整的功能。

但是CPU内部不能“一步”完成它。

例如一条ADD可能需要:

取指 译码 取操作数 执行加法 写回结果

因此需要继续拆。


2. 微程序

一条机器指令对应一段用于解释执行它的微程序。

也就是:

一条机器指令 ≈ 一段微程序

微程序本质上是一串按顺序执行的微指令。

例如:

ADD机器指令 ↓ 对应的微程序 微指令1 微指令2 微指令3 微指令4 ...

所以:

微程序 = 多条微指令组成的程序

3. 微指令

微程序中的“一条指令”。

一条微指令决定:

这一拍CPU内部要同时做哪些微操作 + 下一条微指令去哪里

所以一条微指令通常包含两大类信息:

① 操作控制信息 ② 顺序控制 / 下地址信息

可以把它理解为:

微指令 = “这一拍干什么” + “下一拍去哪”

4. 微命令

控制器向CPU内部各部件发出的控制信号,称为微命令。

例如:

PCout MARin Read MDRout IRin ALUadd

这些本质上都是:

控制信号

所以:

微命令 ≈ 控制信号

5. 微操作

硬件收到微命令后真正执行的最基本动作。

例如:

PC -> MAR M(MAR) -> MDR MDR -> IR R1 + R2 -> R1

所以:

微命令:命令硬件“做什么” 微操作:硬件实际“做了什么”

可以简单理解为:

微命令 = 发号施令 微操作 = 真正动作

三、必须形成的层次关系

这是408概念题最常考的地方。

一条机器指令 ↓ 一段微程序 ↓ 多条微指令 ↓ 一条微指令中可包含若干微命令 ↓ 微命令控制微操作

所以不要再把这些概念混在同一层。


四、微程序控制器硬件结构:只抓4个东西

微程序控制器图看起来复杂,其实最核心只有:

CM CMAR CMDR 微地址形成部件

1. CM:控制存储器

Control Memory,控制存储器。

它存放:

微程序

而微程序又是:

很多条微指令

所以更准确地说:

控制存储器CM中存放微指令

注意它不是主存。

主存存的是:

机器指令和数据

控制存储器存的是:

实现机器指令所需要的微程序

2. CMAR:微地址寄存器

CMAR保存:

下一条要从控制存储器中取出的微指令地址

它和主存系统中的MAR很像。

可以类比:

MAR -> 指向主存中的地址 CMAR -> 指向控制存储器中的微指令地址

3. CMDR:微指令寄存器

从控制存储器中读出的微指令,要先送到:

CMDR

然后CMDR中的:

操作控制字段

产生微命令。

而:

顺序控制 / 下地址字段

参与形成下一条微指令地址。


4. 微地址形成部件

它负责解决:

下一条微指令到底在哪?

最后形成的新微地址送入:

CMAR

五、把整个执行过程串成一个循环

这是这部分最应该在脑中形成的动态图。

CMAR ↓ 控制存储器 CM ↓ 取出一条微指令 ↓ CMDR ↓ 操作控制字段产生微命令 ↓ CPU执行若干微操作 ↓ 顺序控制信息 + 条件状态 ↓ 形成下一条微地址 ↓ CMAR

然后继续下一轮。

所以微程序控制器可以记成一个循环:

地址 -> 取微指令 -> 发控制信号 -> 算下一地址 -> 再取

六、最容易混的地方:机器指令操作码和微地址

这里是高频易错点。

1. 微程序入口地址从哪里来

CPU取到一条机器指令后,必须先知道:

这条机器指令对应的微程序从哪里开始?

例如:

ADD -> 加法微程序入口 SUB -> 减法微程序入口 LOAD -> 访存微程序入口

谁能区分ADD、SUB、LOAD?

当然是:

机器指令的操作码

所以:

机器指令操作码 ↓ 微地址形成部件 ↓ 对应微程序入口地址

结论:

微程序入口地址 由机器指令的操作码形成。

2. 下一条微指令地址从哪里来

进入微程序以后,已经不是在问:

“执行哪一条机器指令?”

而是在问:

“当前微程序下一步执行哪一条微指令?”

这时要看:

微指令中的下地址字段 + 条件状态 + 顺序控制逻辑

所以一定区分:

微程序入口地址 -> 机器指令操作码 微程序内部下一条微指令地址 -> 微地址 / 下地址字段等顺序控制信息

这两个问题非常容易被题目故意混在一起。


七、后继微地址到底怎么形成

下一条微指令地址并不只有一种来源。

常见来源包括:

1. 当前微地址 + 1 2. 微指令中的下地址字段 3. 根据条件标志决定分支地址 4. 根据机器指令操作码形成某个微程序入口

可以把它们统一理解成:

“顺序执行” + “转移” + “从机器指令跳到对应微程序入口”

八、一条微指令为什么可以控制多个微操作

CPU内部某些微操作可以同时发生。

例如:

PC -> MAR 同时 PC + 1 -> PC

只要两者之间没有资源冲突,就可以安排在同一个时钟周期。

所以一条微指令往往可以同时发出多个微命令。

这也是为什么会出现:

微指令编码方式

这个考点。


九、微指令的三种编码思想

重点理解:

如何用有限的微指令位数 表示大量微命令?

1. 直接编码法

最简单粗暴。

一个微命令对应一个控制位:

某位=1 -> 发出对应微命令 某位=0 -> 不发

例如:

PCout | MARin | Read | MDRout | IRin 1 1 1 0 0

表示这一拍同时发出前三个微命令。

优点

不需要复杂译码 速度快 并行性强

缺点

微指令很长 控制存储器容量大

记忆:

直接编码: “一个命令占一个坑” 所以长,但快。

2. 字段直接编码法

这是408更喜欢考计算的方式。

把互斥的微命令分到同一个字段里。

所谓互斥,就是:

这些微命令不可能在同一拍同时执行

例如:

R1out R2out R3out R4out

总线同一时刻通常只能有一个寄存器输出,所以可以放在同一字段中编码。

假设一个字段中有:

7个互斥微命令

通常还需要保留一种:

“不发任何微命令”

因此需要表示:

7 + 1 = 8种状态

字段位数:

log2(8) = 3位

更一般地:

若某字段有n个互斥微命令 需要位数: ceil(log2(n+1))

其中+1就是:

无操作状态

优点

比直接编码短 还能保持不同字段之间的并行性

缺点

需要译码 速度比直接编码稍慢

3. 字段间接编码法

某个字段的含义还需要通过另一个字段解释。

本质:

进一步压缩微指令长度

代价:

译码更复杂 速度更慢 并行能力受到更多限制

强化阶段记住:

越编码 -> 越短 但译码越复杂 -> 越慢

即可。


十、水平型微指令和垂直型微指令

这也是非常容易混的一组。


水平型微指令

特点:

一次能表示很多微命令 并行能力强 字长较长 编码较直接 译码少 执行速度快

可以理解成:

一条微指令横向铺开很多控制位

所以叫“水平型”。

关键词:

长 快 并行强

垂直型微指令

更像普通机器指令:

需要操作码译码 一条微指令表达的微操作较少 字长短 并行性弱 译码复杂 速度较慢

关键词:

短 慢 类似机器指令

一张表记住

对比水平型垂直型
微指令长度
微命令表示较直接编码程度高
并行能力
译码
速度
控制存储器容量较大较小

记忆:

水平:铺得开 -> 长、并行、快 垂直:压得紧 -> 短、译码、慢

十一、微程序控制器为什么比硬布线控制器灵活

硬布线控制器的控制逻辑:

直接做在组合逻辑电路里

如果要增加或修改机器指令:

可能需要重新设计硬件逻辑

而微程序控制器的控制逻辑:

主要写在控制存储器中的微程序里

所以修改功能时:

修改微程序

通常比改硬件方便。

因此:

微程序控制器:灵活,易修改 硬布线控制器:速度快,但修改困难

十二、为什么微程序控制器通常更慢

硬布线控制器:

组合逻辑直接产生控制信号

微程序控制器:

还要访问控制存储器 取出微指令 再产生控制信号

多了:

访问控制存储器

这个过程。

所以总体:

硬布线:快 微程序:稍慢

这和前面的“灵活性”正好形成交换:

速度换灵活性

十三、把硬布线和微程序控制器放在一起记

项目硬布线控制器微程序控制器
控制信号来源组合逻辑电路微指令
速度较慢
设计较复杂较规整
修改扩展困难容易
适合RISC等简单控制复杂指令系统更方便

不要机械理解最后一行,408主要还是考:

硬布线:快 微程序:灵活

十四、你之前容易混的三个典型题

题1:微程序入口地址由什么形成?

正确:

机器指令的操作码字段

原因:

操作码决定“这是哪条机器指令” -> 也就决定“去哪个微程序入口”

不要选:

微指令的微地址码字段

那是微程序内部找下一条微指令时使用的重要信息。


题2:机器指令与微指令是什么关系?

正确表述:

一条机器指令由一段用微指令编成的微程序解释执行。

关系:

机器指令 -> 微程序 -> 多条微指令

不是:

一条机器指令 = 一条微指令

题3:哪项关于微程序控制器正确?

正确:

微程序控制器比硬布线控制器更加灵活。

因为:

控制逻辑主要以微程序形式存放 修改微程序通常比重新设计硬件方便

十五、几个特别容易错的概念

1. “控制器产生的控制信号都叫微指令”

错误。

正确:

控制信号 = 微命令 微指令 = 包含若干微命令编码及顺序信息的一条控制字

2. “微处理器运行的程序就叫微程序”

错误。

微处理器只是:

CPU实现形式

微程序是:

微程序控制器内部的控制程序

两者没有这个定义关系。


3. “采用微程序控制器的CPU叫微处理器”

错误。

微处理器

和:

微程序控制器

是两个完全不同的概念。


4. “微程序存在主存中”

错误。

微程序通常存放在:

控制存储器CM

十六、如何把所有东西真正串起来

建议脑中保留三张“心智图”。


心智图1:层级关系

机器指令 ↓ 微程序 ↓ 微指令 ↓ 微命令 ↓ 微操作

解决:

谁包含谁? 谁控制谁?

心智图2:微程序控制器循环

CMAR ↓ CM ↓ CMDR ↓ 发出微命令 ↓ CPU完成微操作 ↓ 形成下一微地址 ↓ CMAR

解决:

CMAR、CMDR、CM分别干什么? 下一条微指令怎么取?

心智图3:两个地址问题

机器指令操作码 -> 微程序入口地址 微指令下地址/顺序控制信息 -> 下一条微指令地址

解决:

操作码和微地址为什么总分不清?

十七、做题时的判断顺序

看到微程序控制器选择题,不要先搜索记忆碎片。

先判断题目属于哪层。

如果问:

机器指令执行

想到:

微程序

如果问:

微程序由什么组成

想到:

微指令

如果问:

控制信号叫什么

想到:

微命令

如果问:

CPU内部最基本动作

想到:

微操作

如果问:

微程序入口

想到:

机器指令操作码

如果问:

当前微程序下一步去哪

想到:

下地址 / 顺序控制

如果问:

存放微程序

想到:

控制存储器CM

十八、考前速记表

机器指令 -> 微程序 -> 微指令 -> 微命令 -> 微操作 CM:存微程序/微指令 CMAR:存微地址 CMDR:存当前微指令 机器指令操作码 -> 微程序入口地址 微指令下地址字段 + 条件 -> 下一微指令地址 直接编码: 长、快、并行强 字段编码: 短一些,要译码 水平型: 长、并行强、快 垂直型: 短、并行弱、译码多 硬布线: 快,不灵活 微程序: 灵活,较慢

十九、这部分对应回去复习哪里

408计算机组成原理 -> CPU -> 控制器 -> 微程序控制器

重点复习顺序建议:

1. 五层关系 2. 微程序控制器基本结构 3. 微地址形成 4. 微指令格式与编码 5. 水平型/垂直型 6. 微程序与硬布线控制器对比

二十、最后用一个完整例子收口

CPU取到:

ADD R1,R2

首先:

IR中的机器指令操作码

告诉微地址形成部件:

去ADD微程序入口

入口地址进入:

CMAR

控制存储器根据CMAR:

取出ADD微程序的第一条微指令

送入:

CMDR

CMDR中的操作控制字段发出微命令,例如:

R1out R2out ALUadd R1in

CPU内部完成对应微操作。

与此同时:

CMDR中的顺序控制信息 + 条件状态

形成下一条微指令地址,送回CMAR。

如此反复:

微指令1 -> 微指令2 -> 微指令3 ...

直到ADD对应的整段微程序执行完毕。

然后CPU再去执行下一条机器指令。


最后的记忆主线

如果过几天又忘了,只重新默写这一段:

一条机器指令对应一段微程序; 微程序由多条微指令组成; 微指令发出若干微命令; 微命令控制CPU完成微操作。 CMAR给地址, CM取微指令, CMDR装微指令, 控制字段发命令, 顺序字段找下一地址。 操作码找微程序入口, 微地址找下一条微指令。

只要这条主线还在,其他零碎知识基本都能重新推出来。

http://www.cnnetsun.cn/news/3943643.html

相关文章:

  • Python招聘大数据分析系统:从爬虫到可视化全流程解析
  • 揭秘2024年网站建设哪家好xm37真相:老板必看避坑指南与实战建议
  • 显卡驱动彻底清理终极指南:Display Driver Uninstaller 完全解决方案
  • Python类型提示详解:从基础到高级应用
  • 程序员段子背后的实战智慧:从经典梗到云原生避坑指南
  • 从拼错一个单词到命中正确业务数据,深入理解 SAP HANA 与 ABAP CDS 的 Fuzzy Search
  • SpringBoot+MySQL实现大学图书借阅管理系统
  • 如何快速构建现代化WinForm应用:SunnyUI终极控件库完全指南
  • NCM格式解密实战:突破网易云音乐限制的完全攻略
  • C语言高级语法:内存管理与数据结构实战
  • 深入解析吉林市建设局网站功能与民生服务价值,市民必看的权威资讯平台指南
  • 容度原理终极推演:月球上的“反物质矿藏”及其千万亿美元级价值
  • SQL视图创建与优化实战指南
  • Redis高性能背后的线程模型解析
  • 企业级数据中心升级:核心模块与优化策略
  • 农化行业业财一体化数字化转型实践与解决方案
  • UE5 Niagara碰撞系统迁移指南:从参数映射到性能优化
  • 中国矿山建设网站:深耕行业十余年,我们如何重新定义矿山工程服务的信任与价值
  • 麒麟信安操作系统与工控安全方案的技术突破与应用
  • 洛本兔子艺术IP:萌趣造型与社会观察的完美结合
  • Spring AI Alibaba实战:构建Human-in-the-Loop人机协同系统
  • BetterGenshinImpact终极指南:解放双手,告别重复劳动
  • Office安装神器,流批了
  • 数据库如何根据全表 NDV 估算子集的 NDV
  • 揭秘上海网站建设yes404:如何避开技术陷阱,打造真正转化率高且用户体验极佳的网站解决方案
  • VMware去虚拟化实战:打造隐形Win10虚拟机绕过软件检测
  • Unity DoTween回调函数全解析:从原理到实战避坑指南
  • 从零配置OGRE 3D引擎:C++图形开发入门与旋转立方体实战
  • DLSS Swapper终极指南:一键智能升级游戏画质与性能的完整教程
  • 小学生学C++编程语法知识(什么是多态(Polymorphism))