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

GitHub链接:https://github.com/WilliamWuLH/My-notes-about-CCCS
如果你觉得不错可以 ⭐Star 和 Fork ❤

计算机科学速成课 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(二进制),此时需要额外的输出代表“进位”,见下表:

INPUTINPUTOUTPUTOUTPUT
ABCARRYSUM
0000
0101
1001
1110

可以用以下电路实现,这个电路叫做“半加器”(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,具体每种可能见下表:

ABCCARRYSUM
00000
00101
01001
01110
10001
10110
11010
11111

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

在这里插入图片描述

抽象化,把全加器作为独立组件,全加器会把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有更多标志,以上的三个是基本都有的。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值