第四课算术逻辑单元Word文档格式.docx
《第四课算术逻辑单元Word文档格式.docx》由会员分享,可在线阅读,更多相关《第四课算术逻辑单元Word文档格式.docx(7页珍藏版)》请在冰豆网上搜索。
![第四课算术逻辑单元Word文档格式.docx](https://file1.bdocx.com/fileroot1/2023-1/9/f5321054-129d-48ef-a3c7-739ffca7b81d/f5321054-129d-48ef-a3c7-739ffca7b81d1.gif)
加减法。
它还会做很多其他的事情,比如给某个数字加1,“把两个数字相加”这叫增量运算
2)最简单的加法电路:
是拿2个bit加在一起(bit是0或1);
有2个输入:
A和B,一个输出,就是两个数字的和,需要注意的是:
A,B,输出,这3个都是单个(bit)(0或1)
3)输入只有4种可能:
前三个是0+0=01+0=10+1=1(记住在二进制里面,1与true相同,0与false相同。
4)这组输入和输出,和XOR门的逻辑完全一样,
AXOR
B
所以我们可以把XOR用作1位加法器(adder)
INPUT
OUTPUT
A
B
SUM
1
但第四个输入组合,1+1,是个特例。
1+1=2(显然)但二进制里面没有2,二进制里1+1的结果是0,1进到下一位,和是10(二进制)XOR的输出。
只对了一部分。
1+1输出0,但我们需要一根额外的线代表“进位”只有输出是1和1时,进位才是true因为算出来的结果用一个bit存不下,方便的是,我们刚好有个逻辑门能做这个事,“AND”门,只有当两个输入为“true”的输出才为“true”所以我们把它加到电路中。
这个电路叫叫“半加器”
Carry
半加器就是两个逻辑门组成的电路
ATRUE
BTRUEXORFALSE
ANDTRUE
再简化就变成如下图
AHALFADDERSUM
BCARRY
1)把半加器封装成一个单独组件:
两个输入
A和B都是1位,两个输出“总和”和“进位”
2)如果想处理超过1+1的运算,我们需要全加器,半加器输出了进位,意味着我们算下一列的时候,还有之后的每一列,我们的加3个位在一起,并不是2个
3)全加器表格
C
CARRY进位
SUM总和
有3个输入:
A,B,C都是1个bit
所以最大可能是1+1+1“总和1”进位“1”
所以要两条线输出“总和”和“进位”
我们可以用半加器做全加器
我们先用半加器将A和B相加,把C输入到第二个半加器,最后用一个OR门检查进位是不是true
全加器=半加器+半加器+OR(检查)
AAhalfCcarry
BBadderDAhalfCOR
CBadderDSUM
再提升一层抽象,全加器,作为独立组件,全加器会把“A”“B”“C”三个输入加起来,输出“总和”和“进位”
AFULLCARRY
BADDERSUM
有了新组件,可以相加两个8位数字,叫两个数字A和B
我们从A和B的第一位开始,叫A0和B0,现在不用处理任何进位,因为是第一位加法,我们可以用半加器来加这个数字,输出叫sum0,现在加A1和B1,因为A0和B0的结果有可能进位,所以这次要用全加器,除了A1和B1,还要连上进位,然后,把这个全加器的进位连到下个全加器的输入,处理A2,和B2,以此类推,把8个bit搞定
A0sum0
B0halfadder
SUM1
A1FULLADDER
B1SUM2
A2FULLADDER
B2SUM3
A3FULLADDER
B3SUM4
A4FULLADDER
B4SUM5
A5FULLADDER
B5SUM6
A6FULLADDER
B6SUM7
A7FULLADDER
B7SUM8
A8FULLADDER
B8CARRY
注意每个进位是怎么连接到下一个全加器的,所以这个叫“8位行波进位加法器”,注意最后一个全加器有进位的输出.
如果第9位有进行,代表着2个数字的和太大了,超过来8位,这叫“溢出”,一般来说,“溢出”的意思是:
两个数字的和太大了,超过了用来表示的位数,这会导致错误和不可预期的结果。
着名例子:
吃豆人用8位在当前关卡数,如果你过了256关(8位bit最大表示255),ALU会溢出,造成一连串错误和乱码,使当前关卡无法进行。
这个bug成了厉害吃豆人吃豆人玩家的代表,如果想避免溢出,我们可以加更多全加器,可以操作16或32位数字,让溢出更难发生,但代价是更多逻辑门,另外一个缺点是,每次进位都需要一点时间
现代计算机(加法电路)
电子移动很快,但如今的量级是每秒几十亿运算,所以会造成影响。
叫“超前进加位器”把二进制相加,ALU的算术单元,也能做一些其他数字运算,一般支持8个操作,就想加法器一样,这些操作也是由逻辑门构成的,有趣的是,没有乘法和除法
因为简单的ALU没有专门的电路来处理,而是把乘法用多次加法来实现,假设想算12×
5,这和把“12加5次是一样的”所以要5次ALU操作来实现这个乘法,很多简单的处理器都是这样做的:
恒温器,电视遥控器和微波炉,当然,手机和电脑有专门做乘法乘法的算术单元,乘法电路电路比加法电路复杂,只是更多逻辑门,所以便宜的处理器没有。
ALU的另一半——逻辑单元
逻辑单元执行逻辑操作:
比如之前讨论过的AND,OR,和NOT操作,它也能做简单的数值和测试,比如一个数字是不是负数,例如:
这是检查ALU输出是否为0的电路,它用一堆OR门检查其中一位是否为1,哪怕只有一个bit(位)是1,我们就知道那个数字肯定不是,然后用一个NOT门取反。
以下就是ALU的一个高层次概括,从零做零几个主要组件,比如行波进位加法器,它们只是一堆逻辑门巧妙地组合在一起而已
A70
A60OR00
A500oR
A40OROROUT
NOT
A30
A20OR0
A100oR
A00OR
74181只能处理4位输入,74181用了大概70个逻辑门,但不能执行乘除,8位ALU会需要数百个逻辑门,特殊符号代表ALU我们的8位ALU有两个输入A和B都是8位(bits)我们需要告诉ALU进行一些操作,例如加法或减法
(8bits)inputA(8bits)inputB
“1000=ADD”“1000”可能代表加法命令,“1100”代
表减法命令=subtract操作代码告诉我们ALU执行什么操
(4bits)OPERATIONCODE作,输出结果8位的
我们用4位的操作代码
OUTPUT
ALU还会输出一堆标志(Flag)“标志”是1位的,代表特定状态,
Flags:
Overflow(bit)溢出标志
Zero(bit)(true)零标志
Negative(bit)负标志
如果想知道想知道两个数字是否相等,比如相减两个数字,结果为0,我们的零测试电路(前面做的)会将零标志设为TRUE
(1),如果想知道:
A是否小于B,可以用ALU来算A减B,看负标志,是否为true,如果是true就知道A小于B,还有一条连到加法器的进位,如果溢出,我们就知道,这叫溢出标志,高级ALU有更多标志,但3个标志是ALU普遍通用的{半加器:
处理一个bit,2个输入}{全加器:
处理1个bit,3个输入}{8bit加法:
1个半加器,7个全加器}