arithmetic and logic unit 算术逻辑单元,简称ALU,是计算机的数学大脑,也就是计算机里负责运算的组件,好比把两个数相加。基本其余的组件都用到了ALU,它有两个 单元 一个算术单元,一个逻辑单元测试
算术单元,它主要负责计算机里的全部数字操做,好比加减法,自增自减等。 接下来,使用最简单的加法电路,即两个bit相加,bit是0或者1,来看看它是怎么设计与运行的。设计
首先有两个输入,A和B,一个输出,即A和B的和,这里三个数A,B,输出,都是单个bit(0或1)。那么输入只有四种可能:3d
上面这三种的输入和输出,与XOR(异或)门的逻辑是同样的,因此能够用XOR门做为一位加法器,可是第四种组合:1+1 = 2是个特例,但在二进制里没有2,所以1+1的结果是0,1进到下一位。真值表和XOR门与下图所示:cdn
由这两个逻辑门组合而成的组件,就是大名鼎鼎的 半加器 ! 即两个输入 A 和 B 都是 1 位 ,两个输出 "总和" 与 "进位",没有进位输入的加法器电路。blog
因为半加器没有进位输入,所以想要处理超过1+1的运算,就须要用到 全加器,半加器输出了进位,所以在计算下一列的时候,还有以后的每一列,咱们须要将 三个位 加在一块儿,而不在是两个。游戏
所以全加器有三个输入,A,B,C(都是1个bit),因此最大的可能就是1+1+1,总和1,进位1,所以也须要两条输出线,“总和”和“进位”数学
可使用半加器,作全加器:it
先用半加器将A和B相加,而后将C输入到第二个半加器,最后用一个 OR 门检查进位是否是 true。 这样全加器就使用了,来看看真值表和图示:io
这就是大名鼎鼎的 全加器 ,它会把三个输入A,B,C加起来,输出“总和”和“进位”。class
一、先从A和B的第一位开始,称为A0和B0,因为是第一次相加,不用处理任何进位,直接使用 半加器 相加,输出叫sum0;
二、如今相加A1和B1,由于A0和B0的结果有可能进位,因此使用 全加器,除了A1和B1,还要连上进位,输出为sum1;
三、把上一步获得的进位输入到 下一个全加器,处理A2和B2
四、以此类推,处理完8个bit。
以下图所示:
若是第9位有进位,表明2个数字的和,超过了8个bit,这被称为“溢出(overfloe)”。最著名的就是“吃豆人”的关卡数,由于是使用8个bit记录关卡数的,所以最大值为255,当玩家进入256关的时候,就会发生溢出,致使游戏界面出现乱码。想要避免溢出,能够加更多的全加器,能够操做16或者32个bit的数字,让溢出更难发生,但代价是更多的逻辑门和更长的时间
简单的ALU是没有专门的电路来处理乘法和除法,而是用屡次加法来实现乘法,好比12X5,这和将12加5次是同样的,因此要5次ALU操做来实现这个乘法,虽然比较慢(相对而言),可是胜在简单。
比较先进的ALU,好比计算机和手机中,有专门作乘法的部分,乘法电路比加法复杂,但只是须要更多的逻辑门进行组装。
逻辑单元是执行各类逻辑操做的,好比AND,OR,NOT等操做,也能作简单的数值测试,好比一个数字是否是负数。
在工程上,工程师们使用大“V”来表示ALU。来看一下8-bit ALU的输入与输出:
Thanks!