算数逻辑单元
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 普遍用的
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战