Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

算术逻辑单元

复习

  • 有符号数与原码:原码用符号位表示正负;反码需要回卷进位参与运算,且仍有两个零
  • 补码:补码是反码加 1,能统一加减法且只有一个零
  • 减法器:减法器复用加法器,把减数取反再加一

TL;DR

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

正文

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

  好在,这些电路有一个共同点:它们都拿同样的输入 A、B,也都吐出一个结果。既然如此,为什么不把它们并排接在一起,再用一个多路选择器,挑其中一个结果送出去?

  • 忘记了多路选择器?请返回《常见复杂逻辑门》

  这个把许多运算装在一起的大盒子,就是 算术逻辑单元,简称 ALU(Arithmetic Logic Unit)。

给运算编号

  假设我们的极简 ALU 先支持四种运算,那么用两位控制码就够了:

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

思考题 1

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

  注意:盒子里所有电路 同时 在进行计算。加法器、减法器、与门、或门各自都得到了自己的答案。出口处的多路选择器,只放行我们此刻想要的那一个。这就像四条流水线一起运转,最后用一个道岔决定让哪条线的成品出来。

  控制码从哪来?机器可以自己给出,但目前的话,为了避免把我们自己绕晕了,我们还是人工吧,后面可以让它自动化。

  不过注意,这里提到了“控制码”的概念,它是一种控制信号。所以,我们已经在逐渐开始接触“控制单元”了,它也是一种信号,只是不参与运算。

  • 忘记了控制单元?请返回最最开始的《计算机的构成》

举个例子

  令 A = 0101(5)、B = 0011(3),看看控制码一变,出口的答案怎么跟着变:

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

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

  虽然很简陋,但这是一个巨大的成功:机器从“只会做一件事”迈向了“听命令做事”。

思考题 2

  盒子里所有电路都在同时运算,这是不是浪费?如果只想省电,有没有办法让没被选中的电路也停下来?

ALU 不会记事

  这里要特别留意一件事:输入一撤走,输出也会随之消失。

  ALU 像草稿纸上的心算,算得快,却不会把刚才的结果记下来。你让它算 2 + 3,它给你 5;可你一转手去算别的,那个 5 就没了。想算 2 + 3 + 4,中间的结果 5 无处安放。

  这是典型的 组合逻辑:输出只取决于此刻的输入,与“过去”无关。没有一点点关系的那种,算完了转头就忘。

  而且有时结果本身不够——结果是不是 0、结果是不是负数等等。

  听起来很傻,结果我们不会自己看吗?

  那下面这两种情况呢?

  • 无符号数相加减,有没有产生进位或借位。
  • 有符号数相加减,有没有发生位数不够导致溢出的情况。

  这些我们就完全无从得知了,要得知可能还得自己手算一遍。但这些情况以后都会影响机器下一步该做什么。所以 ALU 还需要多“说”几句,把自己的判断一并报出来。

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

小结

知识点

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

参考资料

  1. Wikipedia(zh):算术逻辑单元:ALU 的功能与结构
  2. Wikipedia(zh):多路复用器:用选择信号从多路输入中挑一路

思考题答案(仅供参考)

思考题 1

  至少需要 3 位。因为 3 位控制码有 2³ = 8 种组合,刚好能为 8 种运算各分配一个编号。每多一位控制码,可表示的运算种类就翻一倍。

思考题 2

  确实有浪费:没被选中的那些电路也在耗电。

  想省电,可以在每路运算的出口再串一个“使能开关”(本质上还是与门),只让被选中的那一路真正输出、翻转,其余保持安静。这既省电,也避免了多路结果同时挤上输出线。不过代价是电路更复杂,所以简单的时候可以不管它。

协议

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

封面图

设计师 | 南国微雪