大家好,欢迎来到IT知识分享网。
前言
在上一期中,我们讲到了如何用二进制来表示数字,以及计算机是如何存储数字和文字信息的,但是计算机的真正目的是要计算,或者说是以有意义的方式处理数字,比如将两个数字相加这种最简单的操作,那么这个操作是由计算机的“算术逻辑单元“处理的,简称 ALU。
ALU 是计算机的数学大脑,等你理解了 ALU 的设计和功能之后,你就理解了现代计算机的基石。
ALU介绍
ALU 是计算机里负责所有运算的,所以基本上,其他所有部件也用到了它,今天我们要用上次学的布尔逻辑门(不清楚的看这里:计算机学科那些事儿(3)-布尔逻辑与逻辑门)来构建一个简单的 ALU 电路。
然后接下来几集,我们会用ALU从头做出一台电脑!
ALU 有 2 个单元,1 个算术单元和 1 个逻辑单元。我们先看算术单元。它负责计算机里的所有数字操作,比如加减法,它还做一些其他简单事,比如给某个数字+1。我们先看最简单的操作-“将两个数字相加”。
半加器
当我们将2 个 bit 加在一起的时候,有4种组合形式: 前三个是:0 + 0 = 0,1 + 0 = 1,0 + 1 = 1,所以这组输入和输出,与 XOR 门 (异或门)的逻辑完全一样,但是第四个输入组合,1+1= 10,是个特例,产生了进位,所以我们还需要一根额外的线代表进位,并且只有当输入是 1 和 1 时,进位才是“true”,这正好符合AND (与)逻辑。所以我们构建了下面的逻辑门电路,正好可以满足2个bit 相加的状况。这个电路叫做“半加器”。
全加器
让我们把这个半加器封装成一个单独组件,两个输入,A 和 B 都是 1 位 – 两个输出 “总和”与“进位”。如果我们将2个半加器连接起来,第一个半加器的“总和”作为第二个半加器的其中一个输入,那么我们就可以构建“全加器”了。如下图:
再进一步,我们可以将上面这个全加器封装成一个单独组件,这个组件有3个输入,2个输出。那么通过同样的连接我们可以做出一个电路相加两个 8 Bit数字。比如下图的 A 和 B, 其中 A0 ,B0 表示这2个数字的 第 0 个bit, A1,B1 表示 A,B 两个数字的第 1 个bit, 以此类推。
注意每个进位是怎么连到下一个全加器的,并且最后一个全加器有“进位”的输出。 这已经是个8位ALU电路了。
如果第 9 位有进位,代表着 2 个数字的和太大了,超过了 8 位。这叫“溢出”(overflow)。如果想避免溢出,我们可以加更多全加器,然后相加 16 或 32 位数字。这使得溢出更难发生,但代价是要用更多逻辑门。
ALU 一般可以支持如下8种操作:
你可能注意到没有乘法和除法,那是因为简单的 ALU 没有专门的电路来处理,而是把乘法用多次加法来实现。假设你想用“12”乘5,这和把“12”加 5 次是一样的。所以需要 5 次 ALU 操作来实现这个乘法,这就是许多简单的处理器,比如恒温器,电视遥控器和微波炉,做乘法的方法。
PS: 笔记本和手机有更好的处理器,有专门做乘法的算术单元(MUL)。
逻辑单元
我们现在讲 ALU 的另一半:逻辑单元,逻辑单元不执行算术,执行的是逻辑操作,比如之前讨论过的 AND,OR 和 NOT 操作,它也执行简单的数值测试,比如检查一个数字是不是负数,比如检查ALU的输出是否为0。
ALU抽象
工程师不想在用 ALU 时去管那些复杂性,一个ALU 内部可能有数百个逻辑门,所以想了一个特殊的符号来代表它,看起来像一个大“V”。比如我们上面的8位ALU 有两个输入,A和B,每个都是 8 位 (bits),我们还需要一种方法指定 ALU 应该执行什么操作,例如加法或减法,为此,我们用 4 Bit 的操作代码(后面某一期会讲)告诉 ALU 执行什么操作。如“1000” 可能会代表加法命令,而“1100”代表减法命令。
输入 A 和 B 的操作结果是 8 位输出,ALU 还输出一系列标志(Flag),代表特定状态的 1 位(bit)输出,如我们相减两个数字,结果为0,标志中会将零标志设为True(1),这在确定两个数字是否相等时非常有用;如果想测 A 是否小于 B,用 ALU 来算 A 减 B,看负标志是否为 true。
最后,还有一条线连到加法器的进位,所以如果有溢出,我们就能知道,这叫溢出标志!
总结与展望
这一期里,我们从头开始做了几个主要组件,比如半加器,3位全加器,8位全加器等,正如你看到的,只是一大堆逻辑门用巧妙的方式连在一起。
然后介绍了逻辑单元和抽象的ALU 应该具有的基本功能。但是如何利用ALU来做出CPU 呢? 在此之前,我们还需要了解电脑的“记忆”功能!
关于这个话题,我们下一期再讲~
PS:本系列文章首发于同名公众号:「 三邵爷的梦呓 」,关注并回复关键字「 1024 」,你懂得!
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/46853.html