算术逻辑单元
复习
- 加法器已经能完成加法与补码减法
- 与、或、非、异或门能完成逐位逻辑运算
- 多路选择器可以从多个结果里选出一个
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 = 0101、B = 0011:
| 控制码 | 运算过程 | 输出 |
|---|---|---|
00 | 5 + 3 | 1000 |
01 | 5 - 3 | 0010 |
10 | 0101 AND 0011 | 0001 |
11 | 0101 OR 0011 | 0111 |
A 和 B 没有变,只是控制码变了,出口的答案就跟着变。这是我们第一次造出一个真正“可选功能”的部件。
ALU 不会记事
这里要留意:输入一撤走,输出也会随之消失。ALU 像一张草稿纸上的心算过程,会算,却不会记住刚才算出了什么。
在解决记忆之前,我们还要让 ALU 多说一句话。有时结果本身不够,例如结果是 0、结果为负、无符号数产生进位、有符号数发生溢出,这些情况以后都会影响机器下一步做什么。
下一章,我们给 ALU 装几盏小小的指示灯。
思考题
若 ALU 想支持 8 种运算,控制码至少需要几位?为什么?
小结
知识点
- ALU 将多种运算封装成一个部件
- 控制码与多路选择器决定输出哪种结果
- ALU 是组合逻辑,本身不保存结果
思考题答案(仅供参考)
至少需要 3 位,因为 3 位控制码有 2³ = 8 种组合,刚好能为 8 种运算各分配一个编号。
协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
封面图
设计师 | 南国微雪