Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

控制器

复习

  • PC 指向下一条指令
  • 指令用操作码说明要做什么
  • 执行一条指令仍要拆成若干个细小控制动作

TL;DR

  • 控制器按时钟节拍发出控制信号
  • 一条指令要经历取指、译码和执行
  • 控制器本质上是一台管理步骤的状态机

正文

  程序已经写好,PC 也指向第一条指令。可存储器、寄存器和 ALU 都不会主动行动。我们还缺一个指挥员。

  这个指挥员叫作控制器

把一句话拆成动作

  以“读取地址 20 到 A”为例,控制器不会喊出整句话,而会按拍发出细小信号:

  1. 把 PC 的值送到存储器地址线
  2. 读取指令,把它收进指令寄存器 IR;同时让 PC 加一
  3. 识别操作码,取出其中的地址 20
  4. 用地址 20 再读一次存储器,把数据写入 A

  前两步叫取指,第 3 步叫译码,第 4 步叫执行。不同指令的取指过程相同,执行阶段则各走各的路。

控制器也是状态机

  控制器要记住自己目前在“取指第 1 拍”“译码”还是“执行”,因此它正是第二十八章的状态机:

当前步骤 + 操作码 + 状态标志
              ↓
     本拍控制信号 + 下一步骤

  执行完成后,状态回到取指,开始下一条指令。只要时钟不停,这个循环就不停。

两种造法,只留一个印象

  控制信号可以由固定逻辑直接生成,叫硬布线控制;也可以把每一步需要的信号编码成更小的“微指令”保存起来,叫微程序控制。

  前者像固定线路,通常更快;后者像一本可查的步骤表,通常更灵活。我们的极简机器不必选边,只需知道两者最终都在做同一件事:按时发出正确的控制信号。

  指挥员到位了。下一章,把它与运算器和寄存器装进同一个盒子。

思考题

  为什么不同指令可以共用取指阶段,却要在执行阶段走不同的控制步骤?

小结

知识点

  • 取指、译码与执行
  • 指令寄存器 IR 保存当前指令
  • 控制器是产生控制信号的状态机
  • 硬布线与微程序是两种实现思路

思考题答案(仅供参考)

  所有指令都要先按 PC 从存储器取回并识别,所以取指过程相同;操作码不同后,要打开的寄存器、ALU 功能和写回位置不同,执行步骤自然不同。

协议

  本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

封面图

设计师 | 南国微雪