Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

算术逻辑单元

复习

  • 加法器已经能完成加法与补码减法
  • 与、或、非、异或门能完成逐位逻辑运算
  • 多路选择器可以从多个结果里选出一个

TL;DR

  • ALU 把常用算术和逻辑电路装进同一个盒子
  • 控制码决定 ALU 此刻做哪一种运算
  • ALU 只负责算,不负责保存结果

正文

  桌面上的电路越来越多了:这边是加减法器,那边是与门、或门和异或门。每次换一种运算都重新接线,和早期计算机换一道题就重插线缆没有区别。

  既然这些电路都有同样的输入 A、B,也都有一个结果,为什么不把它们接在一起,再用多路选择器挑一个结果送出去?

  这只大盒子就是算术逻辑单元,简称 ALU

给运算编号

  假设我们的极简 ALU 先支持四种运算:

控制码运算输出
00加法A + B
01减法A - B
10按位与A AND B
11按位或A OR B

  两位控制码能表示四种选择。所有电路可以同时得到自己的结果,但出口处的多路选择器只放行其中一个。

  如果以后还想增加异或、移位或比较,只需增加相应电路,并把控制码加宽。现代 ALU 功能更多,原理没有变化:运算电路负责算,选择器负责选。

跟着一个输入走一遍

  令 A = 0101B = 0011

控制码运算过程输出
005 + 31000
015 - 30010
100101 AND 00110001
110101 OR 00110111

  A 和 B 没有变,只是控制码变了,出口的答案就跟着变。这是我们第一次造出一个真正“可选功能”的部件。

ALU 不会记事

  这里要留意:输入一撤走,输出也会随之消失。ALU 像一张草稿纸上的心算过程,会算,却不会记住刚才算出了什么。

  在解决记忆之前,我们还要让 ALU 多说一句话。有时结果本身不够,例如结果是 0、结果为负、无符号数产生进位、有符号数发生溢出,这些情况以后都会影响机器下一步做什么。

  下一章,我们给 ALU 装几盏小小的指示灯。

思考题

  若 ALU 想支持 8 种运算,控制码至少需要几位?为什么?

小结

知识点

  • ALU 将多种运算封装成一个部件
  • 控制码与多路选择器决定输出哪种结果
  • ALU 是组合逻辑,本身不保存结果

思考题答案(仅供参考)

  至少需要 3 位,因为 3 位控制码有 2³ = 8 种组合,刚好能为 8 种运算各分配一个编号。

协议

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

封面图

设计师 | 南国微雪