P5 算术逻辑单元-How Computers Calculate-the ALU

传送门:P5 算术逻辑单元-How Computers Calculate-the ALU

        好了,之前讲的运算都是基于齿轮等物理硬件而实现的,现在开始讲基于逻辑门的算术运算!


算术逻辑单元    ALU

        算术逻辑单元(arithmetic and logic unit) 是能实现多组算术运算和逻辑运算的组合逻辑电路,简称ALU。

        英特尔 74181:第一个封装在单个芯片内的完整ALU,只能处理4位输入。


ALU组成    1个算术单元和1个逻辑单元

        算术单元

        负责计算机里的所有数字操作。

        基于逻辑门的算术单元:我们可以用上一P学习到的用晶体管实现两个数的相加,但是涉及到多个数相加的情况时,必然需要更多的晶体管,此时电路复杂性增加,因此我们最终采用逻辑门来抽象实现加法等算术运算。

        半加器:

不完善的半加器

        对于单个异或门的半加器来说,除了1 + 1 的结果无法体现进位之外,其他情况结果正确,因此我们需要添加额外的输出CARRY作为“进位”。

完善的半加器

        这里的与门只考虑是否进位,也就是当两个输入都为1时,输出1,其他情况为0。

        全加器:如果运算超过1 + 1,即类似1 + 1 + 1(为什么不是10  + 1 或 1 + 10呢?因为每一个输入端都是一个字节,意味每一个输入端只能是1 或者 0,而不可能是10)这种超过两个数的情况时,就需要采用全加器来实现算术运算(注意:全加器只适用3个数相加)

全加器表格
全加器的逻辑电路

        8位行波进位加法器:  

8位行波进位加法器

        可以看到,A0 + B0采用半加器独立组件,而之后的独立组件都采用全加器,这是因为在运算A0 + B0 时没有上一步的进位作为第三输入端,所以采用半加器就足够了。

        溢出:最后全加器的进位carry必须满足恒为0,如果为1则说明运算结果超出8位,发生溢出现象,这会导致错误和不可预期的结果。

8位存储关卡数(最高关卡255)的吃豆人溢出现象

        解决溢出:添加更多的全加器,使得最终结果大于8位即可,但电路的复杂性和进位耗费的时间会因此增加。

        超前进位加法器    现代计算机用的加法器:超前进位加法器(carry look ahead adder)是对普通的全加器进行改良而设计成的并行加法器,主要是针对普通全加器串联时互相进位产生的延迟进行了改良。超前进位加法器是通过增加了一个不是十分复杂的逻辑电路来做到这点的。


        逻辑单元

        负责实现单个或多个数值的逻辑判断,比如:A是否为0,A是否大于B,A是否小于B等。

A是否为0的逻辑电路实现

        行波进位加法器:串行进位,高位的运行要等待低位的进位传到。不同于并行进位如选择进位或超前进位等等。

        8位ALU:

基础的8位ALU

        上面的输入端 INPUT:A和B,皆为8个字节;

        左边的操作代码 OPERATION CODE:指示ALU执行4个字节数值对应的命令代码,比如1000 = ADD,1100 = SUBTRACT;

        下面的输出 OUTPUT:一个输出端,8个字节;

        右边的标志 FLAG:1个字节

        (1)OVERFLOW:溢出标志,通过对两个数执行加法运算,判断最后一个全加器的进位端是否为1,若为1,则表示溢出;

        (2)ZERO:0标志,运用上面提及到的A是否为0的逻辑电路,判断某一个数是否为0;

        (3)NEGATIVE:比较标志,对A与B进行减法运算,通过对结果和0进行比较,输出A与B的大小关系,若为1,则A < B。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容