Appearance
微程序控制器
2026 大纲 五(四)控制器的功能和工作原理(微程序控制器)。
把答案先算好存起来,运行时查表
硬布线是把
这个换法带来一个漂亮的对称:机器指令级上,用户程序放在主存、由 PC 索引;微指令级上,微程序放在控制存储器 CM、由 μAR 索引。一条机器指令的执行,就是跑一小段 CM 里的微程序。CPU 因此有内外两层取指–执行循环,"微程序"这个名字正由此而来。
四个容易混的概念先分清:微操作是最基本不可再分的操作(如
🔴 微命令是因,微操作是果。
是微命令,它打开那个门所造成的"PC 内容送上总线"才是微操作。两者一一对应所以常被混用,但含义有别。
还有一对贯穿全篇的关系:相容指可以在同一时刻发出(
🔴 CM 是 ROM,而且独立于主存。 微程序出厂即定,运行期不应被程序改动——否则一个用户程序就能改写"加法指令是怎么执行的"。CM 不占主存地址空间、程序无法访问。少数机器用可写控制存储器 WCS 支持自定义指令,那是特例。
🔴 微程序慢在哪:多了一次存储器访问。它要先按 μAR 访问 CM、把微指令读出装进 μIR,然后才能输出控制信号;硬布线经几级门延迟就出来了。这是"用查表换设计复杂度"必付的代价。
交互可视化
一、微程序控制器的结构

(袁春风《计算机组成与系统结构》第 3 版,见文末教材出处)
工作流程是一个闭环:
- IR 中的操作码送入微地址形成部件(映射逻辑),转换出该指令微程序的入口地址
- 入口地址送入微地址寄存器 μAR
- 按 μAR 从 CM 读出一条微指令,装入微指令寄存器 μIR
- μIR 的操作控制字段直接输出为各条微命令,送往数据通路
- μIR 的顺序控制字段给出下一条微指令的地址,送回 μAR,回到第 3 步
与硬布线相比多出来的三块就是 CM、μIR、微地址形成部件:控制信号不再由组合逻辑算出,而是事先编好存进 CM,运行时一条条取出来。层次关系为
二、微指令格式:水平型与垂直型
微指令分两个主要字段:操作控制字段(本条要发哪些微命令)与顺序控制字段(下一条微指令的地址或其计算方式)。
| 对比项 | 水平型 | 垂直型 |
|---|---|---|
| 微指令字长 | 长 | 短 |
| 并行性 | 强 | 弱 |
| 微程序长度 | 短 | 长 |
| 执行速度 | 快 | 慢 |
| 编写难度 | 较复杂 | 简单 |
🔴 这五行不必分开记,它们只有一条主线:水平型用空间换时间,垂直型用时间换空间。 把微命令摊开成"一位一根线",字长就大、但一拍能干很多事;编码压缩之后字长小、但一拍只能干一件事。剩下四行都是这一句的推论。
水平型的最小字长
三、操作控制字段的三种编码方式
| 方式 | 做法 | 代价 |
|---|---|---|
| 直接编码(直接控制) | 每一位直接对应一个微命令,不需译码 | 简单直观、速度最快;字长等于微命令总数,CM 容量大 |
| 字段直接编码 | 把互斥的微命令分组,每组内用二进制编码 | 显著缩短字长;需字段译码器,速度略慢 |
| 字段间接编码 | 一个字段的含义取决于另一个字段的取值 | 可进一步压缩字长;译码更复杂、并行性更受限 |
字段直接编码是算题的主场,两条规则是硬的:
🔴 ① 互斥的微命令分在同一字段,相容的分在不同字段(同组内每拍只能选一个,所以只有互斥的才能同组);② 每个字段必须留一种编码(通常全 0)表示"本组这一拍不发命令",所以
位只能表示 个微命令,不是 个。漏掉这个"不操作"编码,位数就会少算。
字段直接编码到底压掉多少位:20 个微命令分 4 组的逐组推算(想弄清"为什么每组要多留一个不操作编码"如何影响位数时展开)
某处理器有 20 个微命令,可分为 4 组互斥的微命令,各组分别有 3、5、8、4 个。求操作控制字段的位数。
每组要能表示"本组的微命令数
| 组 | 微命令数 | 需表示的状态数 | 位数 |
|---|---|---|---|
| 1 | 3 | ||
| 2 | 5 | ||
| 3 | 8 | ||
| 4 | 4 |
直接编码需要 20 位,压缩了 40%。若忘了留"不操作"编码,第 3 组会按
四、下一条微指令的地址从哪来
| 方式 | 做法 |
|---|---|
| 断定方式(下地址字段法) | 微指令中设专门的下地址字段,直接给出后继微地址 |
| 计数器方式 | 类似 PC 自增, |
| 条件转移 | 根据状态条件(CF、ZF 等)在两个地址中选一个 |
| 由操作码映射 | 每条机器指令开始时,由操作码转换出微程序的入口地址 |
断定方式要算下地址字段的位数,这是本篇最爱考的一处:
🔴
,而 。取指与指令种类无关、全机共用一份,所以是"加"上去不是"乘"进去。
🔴 指令条数不等于微指令条数。 拿"32 条指令"直接取
是本节最典型的错法。CM 的容量同理按微指令总数算:单元数 微指令总数,每单元的位数 微指令字长。
另外记一条时间换算:每条微指令通常占一个时钟周期,所以
下地址字段位数的完整推算,含两种典型错法各错在哪(想核对自己会不会漏算公共取指微程序时展开)
某机采用微程序控制器,共 32 条指令,公共的取指微程序含 2 条微指令,各指令对应的微程序平均由 4 条微指令组成,采用断定法确定下条微指令地址。求下地址字段至少几位。
两处容易算错:① 漏掉公共取指微程序的 2 条,得
之所以是"加 2"而不是"每条指令各含一份取指":取指过程与指令种类无关,写成一段公共的取指微程序由所有指令共用,各指令的微程序只含自己的执行部分,执行完跳回公共取指入口。
五、微程序设计步骤
- 分析每条机器指令的功能,写出微操作序列
- 将同一时钟周期可并行的(相容的)微操作归并为一条微指令
- 编写微指令序列,即微程序
- 确定每条微指令的下址字段
- 将全部微程序固化进控制存储器
考点速记
- 核心思路是函数难算就把答案存起来:CM(ROM,独立于主存、程序不可访问、不占主存地址空间)存放全部控制信号,运行时按 μAR 查;层次为机器指令 → 微程序 → 微指令 → 微命令,微命令是因、微操作是果。
- 水平型用空间换时间、垂直型用时间换空间,五项对比全由这条主线推出;字段直接编码的分组原则是互斥同组、相容异组,且每组要留一个"不操作"编码,故
位只能表示 个微命令。 - 下地址字段位数
,微指令总数要加上公共取指微程序——指令条数不等于微指令条数;微程序控制器慢在多一次访存,胜在改 ROM 即可修改指令功能,适合 CISC。
这一节在真题里被考过的形式(下方「真题练习」里属于本篇的那几道):
- 给若干互斥类的微命令个数,问操作控制字段至少几位:逐组按
算再相加。⚠️ 那个 是"本组这一拍不发命令"的编码,漏了整个字段会少位。 - 给指令条数、公共取指微程序条数、每条指令的平均微指令数,问下地址字段至少几位:先算
得微指令总数,再取对数向上取整。⚠️ 两处常错:漏掉公共取指那几条;或把指令条数直接当微指令数。 - 挑关于主存储器(MM)与控制存储器(CS)的错误叙述:常设的错点是"CS 按内容访问"——CS 和 MM 一样按地址访问(由 μAR 给地址)。而"MM 在 CPU 外、CS 在 CPU 内""MM 存指令和数据、CS 存微指令""MM 用 RAM 和 ROM、CS 用 ROM"三条都对。
- 问 CPU 能理解并直接执行的是哪几种指令:微指令与机器指令。伪指令是给汇编器看的命令、根本不生成机器码;汇编指令要先由汇编程序翻译成机器指令。
易错:字段编码时漏掉"不操作"编码,把
位当成能表示 个微命令。
易错:算下地址字段时漏掉公共取指微程序,或直接拿指令条数取对数。
易错:认为控制存储器是按内容访问的。它按地址访问,由 μAR 索引。
易错:把伪指令或汇编指令当成 CPU 能直接执行的。
教材出处
- 微程序控制器的基本结构(图 5.29):袁春风《计算机组成与系统结构》第 3 版 §5.3 多周期处理器,印刷页 p157