计算机科学速成课 Crash Course Computer Science 第五集 算术逻辑单元 How Computers Calculate - the ALU

计算机科学速成课 Crash Course Computer Science

第五集 算术逻辑单元 How Computers Calculate - the ALU

ALU

表达和存储数字是计算机的重要功能,但是真正的目标是计算,有意义的处理数字,这些操作由计算机的“算术逻辑单元”(Arithmetic and Logic Unit)处理,简称ALU。

ALU是计算机的数学大脑,ALU是计算机里负责运算的组件,基本其他所有部件都用到了它。最著名的ALU:英特尔74181(Intel 74181),1970年发布时,它是第一个封装在单个芯片内的完整ALU。

算术单元

ALU有2个单元,1个算术单元和1个逻辑单元。算术单元负责计算机里的所有数字操作。

半加器

最根本的操作:把两个数字相加,使用逻辑门来实现,最简单的加法电路是拿2个bit加在一起,有2个输入:A和B,1个输出:就是两个数字的和,需要注意的是:A,B,输出,这三个都是单个bit(0或1)。输入有四种可能,由于 1+1=2 是个特例,二进制里没有2,二进制的1+1结果是0,1进到下一位,所以和为10(二进制),此时需要额外的输出代表“进位”,见下表:

INPUT INPUT OUTPUT OUTPUT
A B CARRY SUM
0 0 0 0
0 1 0 1
1 0 0 1
1 1 1 0

可以用以下电路实现,这个电路叫做“半加器”(half adder)。

在这里插入图片描述

抽象化,把半加器封装成一个单独组件,两个输入A和B都是1位,两个输出SUM和CARRY,如下所示:

在这里插入图片描述

全加器

想处理超过1+1的运算就需要“全加器”(Full Adder),半加器输出了进位,意味着在计算下一列时(包括之后的每一列)都得加3个位在一起,并不是2个。全加器有3个输入:A,B,C(都是1个bit),所以最大的可能是 1+1+1,全加器需要两条输出线:SUM和CARRY,此时(1+1+1)SUM=1,CARRY=1,具体每种可能见下表:

A B C CARRY SUM
0 0 0 0 0
0 0 1 0 1
0 1 0 0 1
0 1 1 1 0
1 0 0 0 1
1 0 1 1 0
1 1 0 1 0
1 1 1 1 1

可以用半加器实现全加器,先用半加器将A和B相加,然后把C输入到第二个半加器,最后用一个OR门检查进位是不是true。

在这里插入图片描述

扫描二维码关注公众号,回复: 10671805 查看本文章

抽象化,把全加器作为独立组件,全加器会把A,B,C三个输入加起来,输出SUM和CARRY。

8位数字相加

有了新组件就可以实现两个8位数字的相加,把两个数字假设为A和B,从A和B的第一位(A0和B0)开始,此时不需要处理任何进位,因为这是第一次加法,所以可以用半加器来加这两个数字,输出为sum0;接着加A1和B1,因为A0和B0的结果有可能进位,所以这次要用全加器,除了A1和B1,还需要连上进位,输出为sum1,然后把这个全加器的进位连到下一个全加器的输出,处理A2和B2。以此类推把8个bit都搞定,这叫“8位行波进位加法器”(8-bit ripple carry adder)。

在这里插入图片描述

溢出

注意到最后一个全加器有CARRY的输出,如果第9位有进位,代表着2个数字的和太大了,超过了8位,这种情况叫做“溢出”(overflow)。一般溢出的意思是两个数字的和太大了,超过了用来表示的位数,这会导致错误和不可预期的结果,著名的例子是吃豆人用8位存当前关卡数,如果玩到第256关时ALU会溢出,造成一连串错误和乱码使得该关卡无法进行,这个BUG成为牛逼吃豆人玩家的代表。

如果想避免溢出,我们可以加入更多的全加器,操作16或32位数字,让溢出更难发生,但是代价是更多逻辑门,另一个缺点是每次进位都要一点时间,在如今的量级是每秒几十亿次运算时会造成影响,所以现代计算机用的加法电路有点不同,叫“超前进位加法器”(carry-look-ahead adder),它更快并且做的事情一样。

其他算术运算

ALU的算术单元也能做一些其他的数学运算,一般支持8个操作:加法(add),带进位的加法(add with carry),减法(subtract),带借位的减法(subtract with borrow),negate,增量(+1,increment),减量(-1,decrement),数字无改变通过(pass through)。这些操作也是由逻辑门构成。Interestingly,这其中没有乘法和除法,因为简单的ALU没有专门的电路来处理,而是将乘法用多次加法实现,然而笔记本和手机有更好的处理器,有专门做乘法的算术单元。乘法电路比加法复杂,需要更多的逻辑门。

逻辑单元

ALU的另一半:逻辑单元(Logic Unit),逻辑单元执行逻辑操作,例如AND,OR,NOT操作,也能做简单的数值测试,比如一个数字是不是负数。如下为检查ALU输出是否为0的电路,它用一堆OR门检查其中一位是否为1。

在这里插入图片描述

英特尔74181只能处理4为输入,大概用了70个逻辑门,但是不能执行乘除。它向小型化迈出一大步,让计算机可以更强大更便宜。

ALU的抽象化

抽象化,用一个特殊符号来代表ALU,看起来像一个大“V”,如下所示:

在这里插入图片描述

高级ALU有更多标志,以上的三个是基本都有的。

发布了36 篇原创文章 · 获赞 5 · 访问量 5230

猜你喜欢

转载自blog.csdn.net/qq_43413123/article/details/104250757