算数逻辑单元

1、算术逻辑单元,简称 ALU

2、计算机里负责运算的组件,基本其他所有部件都用到了它

3、ALU 有 2 个单元,1 个算术单元和 1 个逻辑单元

 

算术单元

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

2、数学运算

(1)加法

(2)带进位的加法

(3)减法

(4)带借位的减法

(5)取反

(6)增量(+1)

(7)减量(-1)

(8)数字无改变通过

3、没有专门电路处理乘法、除法,多次加法实现乘法

 

半加器

1、最简单的加法电路,是拿 2 个 bit 加在一起(bit 是 0 或 1),二进制里,1 与 true 相同,0 与 false 相同

2、有 2 个输入:A 和 B,1 个输出:就是两个数字的和,需要注意的是:A,B,输出,这 3 个都是单个 bit(0 或 1)

3、输入只有四种可能,前三个:0 + 0 = 0,1 + 0 = 1,0 + 1 = 1,这组输入和输出,和 XOR 门的逻辑完全一样,可以把 XOR 用作 1 位加法器

4、第四个输入组合,是个特例:1+1=2,但二进制里没有 2,XOR 门的输出,只对了一部分, 1+1 输出 0,因为算出来的结果用 1 个 bit 存不下,且只有输入是 1 和 1 时,进位才是 true

5、需要一根额外的线代表“进位”,AND 门充当进位

6、把“半加器”封装成一个单独组件

 

全加器

1、有 3 个输入:A,B,C(都是 1 bit),两条输出线:总和,进位

2、用半加器做全加器

(1)用半加器将 A 和 B 相加,把 C 输入到第二个半加器

(2)最后用一个 OR 门检查进位是不是 true

3、把全加器作为独立组件

 

8 位加法器

1、8位行波进位加法器

2、组成

(1)从 A  和 B 的第一位开始,叫 A0 和 B0,,现在不用处理任何进位,因为是第一次加法,所以可以用半加器,来加这2个数字,输出叫 sum0

(2)现在加 A1 和 B1,因为 A0 和 B0 的结果有可能进位,所以这次要用全加器,除了 A1 和 B1,还要连上进位,输出叫 sum1,然后,把这个全加器的进位连到下个全加器的输入,处理 A2 和 B2

(3)以此类推,把 8 个 bit 都搞定

(4)最后一个全加器有进位输出

 

溢出(overflow)

1、两个数字的和太大了,超过了用来表示的位数

2、这会导致错误和不可预期的结果

3、避免溢出,可以加更多全加器

(1)可以操作 16 或 32 位数字

(2)代价是更多逻辑门,另外一个缺点是,每次进位都要一点时间

 

超前进位加法器

1、现代计算机用的加法电路

2、速度更快,功能相同:把二进制数相加

 

逻辑单元

1、执行逻辑操作,比如 AND,OR,NOT 操作

2、它也能做简单的数值测试,比如一个数字是不是负数

3、例,检查 ALU 输出是否为 0 的电路,用一堆 OR 门检查其中一位是否为 1,哪怕只有一个位是1,然后用一个 NOT 门取反,所以只有输入的数字是 0,输出才为 1

 

8 位 ALU

1、两个输入,A和B,都是 8 位

2、需要告诉 ALU 执行什么操作,例如加法或减法

(1)用 4 位的操作代码,操作代码告诉 ALU 执行什么操作

(2)例如,1000 可能代表加法命令,1100 代表减法命令

3、输出结果是 8 位的

(1)ALU 还会输出一堆标志(Flag),标志是 1 位的,代表特定状态

(2)零标志设为 true(1),比如两个数字是否相等,两个数字相减,结果为 0

(3)A 是否小于 B,可以用 ALU 来算 A 减 B,看负标志是否为 true

(4)溢出标志,连到加法器的进位,检测是否有溢出

4、高级 ALU 有更多标志,这 3 个标志是 ALU 普遍用的

posted @   半条咸鱼  阅读(760)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示