版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章运算方法与运算器
3.1定点数的算术运算与实现3.2逻辑运算和移位操作3.3定点运算器3.4浮点数的算术运算与浮点运算器并联习题3.1定点数的算术运算与实现定点数的机器数有原码、反码、补码等形式,本节以定点小数的补码形式来讨论定点数的加、减、乘、除运算。因为补码运算可以将减法转换为加法,补码的符号位同补码的数值位一样参与运算,且补码运算规则简单,易于实现,所以现代计算机中的数据普遍采用补码。3.1.1定点数加减运算
1.补码加减运算规则假设定点小数x的补码为[x]补,定点小数y的补码为[y]补,则有:[x+y]补=[x]补+[y]补
(mod2)
(3-1)[x-y]补=[x]补-[y]补=[x]补+[-y]补
(mod2)
(3-2)根据式(3-1)和式(3-2),补码加减运算的规则如下:规则1,参与运算的数是补码,运算结果也是补码。规则2,符号位同数值位一样参与运算,其结果的符号取决于运算结果的补码。规则3,加法运算时,直接将两个数的补码相加;减法运算时,需要将减数变补(即用[y]补求[-y]补),然后再与被减数的补码相加。这是由于数据采用补码形式后,减法运算转换成了加法运算,所以计算机实现加减运算只需加法器,无需减法器。我们在进行减法运算时也只能按加法进行运算。规则4,补码的运算是有模的运算,如果运算结果超出了模(即符号位的运算产生了进位),则模将自动丢失。这样处理的结果并非错误,但还需要进一步进行溢出判断。
2.溢出与溢出判断溢出是指运算结果超出了机器所能表示的数的范围。如果运算结果超出了机器所能表示的最大正数,则称为上溢(正溢出);如果运算结果超出了机器所能表示的最小负数,则称为下溢(负溢出)。一旦出现溢出,机器将无法表示正确结果,因此,计算机在运算的过程中必须正确判断溢出并及时处理。
1)单符号判别法单符号判别法是根据参与运算数的符号和运算结果的符号进行判断溢出。设[x]补=x0.x1x2…xn-1,[y]补=y0.y1y2…yn-1,[z]补=[x+y]补=z0.z1z2…zn-1,溢出标志为V,则溢出标志V与符号位(x0、y0、z0)之间的关系如表3-1所示。根据真值表3-1,可得出溢出的判断条件为V =x0y0z0+x0y0z0(x0y0)(x0y0)表3-1溢出标志(V)与符号位(x0、y0、z0)之间的真值表
2)双符号判别法双符号判别法也称为变形补码法,是根据结果的变形补码来进行判断溢出的。变形补码的定义如下:设x为n位的二进制数据,式(3-3)和式(3-4)分别给出了x为定点小数±0.x1x2…xn-1和x为定点整数 ±x1x2…xn-1的变形补码定义。定点小数变形补码的定义如下:(3-3)定点整数变形补码的定义如下:(3-4)由定义可知:
(1)变形补码只是比普通补码多了一位符号位,所以,变形补码也称双符号位补码。如:[x]补=x0.x1x2…xn-1,则[x]变补=x0x0.x1x2…xn-1,其中,x0x0为00表示正数,x0x0为11表示负数。
(2)变形补码的加减运算与普通补码的加减运算相同,只不过两个符号位都参与了运算,运算结果为:,其中是结果的两个符号位,其含义为:,表示结果为正,无溢出;,表示结果为负,无溢出;,表示结果正溢出;,表示结果负溢出。由此可见,当不一致时,结果便产生溢出。因此,采用变形补码进行运算时,溢出的判断条件为。
3)进位判别法当最高有效位产生进位而符号位无进位时,产生正溢;当最高有效位无进位而符号位产生进位时,产生负溢。故溢出的判断条件为V=Cs
C0,其中Cs为符号位产生的进位,C0为最高有效位产生的进位。
3.补码加减运算的步骤补码的加减运算虽然十分简单,但一定要注意运算步骤的完整。为此,特归纳补码的加减运算步骤如下:步骤1求[x]补、[y]补、[-y]补。步骤2按式(3-1)和式(3-2)进行二进制加法运算。注意:只能按加法进行运算,即使是减法运算,也要将减数变补(即由[y]补求[-y]补),然后再与被减数相加。步骤3利用溢出判断条件,判断运算结果的正确性。
【例3-1】
已知x的真值,用补码的加减运算计算x ± y。① x=+0.1010,y=+0.0011② x=-0.1101,y=-0.1011解:① [x]补=0.1010,[y]补=0.0011,[-y]补=1.1101
[x+y]补=[x]补+[y]补=0.1010+0.0011=0.1101
[x-y]补=[x]补-[y]补=[x]补+[-y]补
=0.1010+1.1101=0.0111进位位具体运算过程如下:由单符号判别法可知,x±y的结果没有发生溢出。② [x]补=1.0011,[y]补=1.0101,[-y]补=0.1011
[x+y]补=[x]补+[y]补=1.0011+1.0101=0.1000
[x-y]补=[x]补-[y]补=[x]补+[-y]补=1.0011+0.1011=1.1110具体运算过程如下:由单符号判别法可知,x+y的结果为正,而参与运算的两个数是负数,所以结果发生了溢出。而x-y的结果不会发生溢出。
【例3-2】
已知x的真值,利用变形补码求x±y。①x=+0.1010,y=+0.0011②x=-0.1101,y=-0.1011解:①[x]变补=00.1010,[y]变补=00.0011,
[-y]变补=11.1101
[x+y]变补=[x]变补+[y]变补=00.1010+00.0011=00.1101
[x-y]变补=[x]变补-[y]变补=[x]变补+[-y]变补
=00.1010+11.1101=00.0111 + 11.1101具体运算过程如下:由双符号判别法可知,x±y结果的双符号相同,所以没有发生溢出。② [x]变补=11.0011,[y]变补=11.0101,[-y]变补=00.1011
[x+y]变补=[x]变补+[y]变补=11.0011+11.0101=10.1000
[x-y]变补=[x]变补-[y]变补=[x]变补+[-y]变补
=11.0011+00.1011=11.1110
具体运算过程如下:由双符号判别法可知,x+y结果的双符号为10,所以运算结果发生了溢出。而x-y结果的双符号为11,不会发生溢出。
【例3-3】
已知x=-0.10111,y=-0.10001,求(x+y)。解:因为[x]变补=11.01001,[y]变补=11.01111,所以
[x]变补=11.10100,[y]变补=11.10111
[(x+y)]变补=[x]变补+[y]变补
=11.10100+11.10111=11.01011溢出判断:由于结果的双符号位相同,未产生溢出,运算结果正确。所以(x+y)的真值为-0.10101。
4.补码加减运算的逻辑实现
1)一位全加器设一位全加器FA(FullAddition)的输入为Ai和Bi,进位输入为Ci,结果输出为Si,进位输出为Ci+1,则一位全加器的真值表如表3-2所示。根据表3-2可得输入与输出之间的逻辑表达式:Si = (AiBi)Ci(3-5)Ci+1 = AiBi+(AiBi)·Ci
(3-6)由式(3-5)和式(3-6)可知,一位全加器逻辑电路如图3-1(b)所示。假设单位逻辑门电路(与门、与非门、或门、或非门)的时间延迟为T,则一个异或门的时间延迟为3T,一位全加器产生Zi的时间延迟为6T,进位传递(由Ci到Ci+1)时间为2T。表3-2一位全加器的真值表
2) n位补码加减运算的逻辑电路
n位补码加减运算的逻辑电路需要n个一位全加器FA、外加控制信号M(M=0,实现加法;M=1,实现减法)组成。其逻辑电路如图3-1(a)所示。图3-1n位补码加减运算电路为了进一步讨论进位关系,将式(3-5)中进位输出Ci+1的关系式改变为如下形式:Ci+1=AiBi+(Ai
Bi)·Ci=Gi+Pi·Ci其中,Gi=AiBi,为进位生成函数;Pi=Ai
Bi,为进位传递函数。下面讨论n位补码加减运算的进位关系。已知(3-7)由式(3-7)可知,高位的进位Ci仅仅是它的低一位进位Ci-1的函数,也就是说,只有产生出Ci-1后才能产生Ci,这种进位关系称为行波进位或串行进位。行波进位的补码加减运算时间主要取决于进位的传递时间。为了提高补码的加减运算速度,进位关系往往采用并行进位,即高位的进位Ci都是C0的函数。C1=G0+P0·C0C2=G1+P1·C1=G1+P1G0+P1P0·C0
Cn-1=Gn-2+Pn-2·Cn-2=Gn-2+Pn-2Gn-3+…+Pn-3Pn-4…P1G0+Pn-3Pn-4…P1P0·C0(3-8)由式(3-8)可知,n越大,进位逻辑电路越复杂,因此,往往将n位按4位进行分组。不难证明n/4-1组间的进位信号G*和传递信号P*的表达式如下:它们同样满足。所以各组的进位为:
n位定点数的加减运算进行分组后,组内可以按上述并行进位关系进行加法,而组间既可以是串行进位关系,也可以是组间并行进位关系,这里不再嫯述。在实际的运算器中,参与运算的数据和运算结果通常存放在寄存器中,控制器控制将数据送入加法器,并进行加法运算,再将运算结果送回寄存器。图3-2给出了带有寄存器的实现补码加减运算的逻辑电路。其中寄存器A、B分别存放参与运算的两个补码数据,运算结果送回寄存器A保存。图3-2实现补码加减运算的逻辑电路3.1.2定点数乘法运算
1.补码与真值的关系设[x]补=x0.x1x2…xn-1,则当x≥0时,[x]补=0.x1x2…xn-1=xi×2-i当x<0时,[x]补=1.x1x2…xn-1=2+x所以x=[x]补-2=-1+0.x1x2…xn-1=-1+xi×2-i对于任何数x,其补码与真值的关系如下:x=-x0+xi×2-i=-x0+0.x1x2…xn-1(3-9)2.补码的右移所以
3.补码的一位乘法设被乘数[x]补=x0.x1x2…xn-1,乘数[y]补=y0·y1y2…yn-1,则
[x·y]补=[x]补×(-y0+yi×2-i)=[x]补×[-y0+y12-1+y22-2+…+yn-12-(n-1)]=[x]补×[-y0+(y1-y12-1)+(y22-1-y22-2)+…+(yn-12-(n-2)-yn-12-(n-1)]=[x]补×[(y1-y0)+(y2-y1)2-1+…+(yn-1-yn-2)2-(n-2)+(0-yn-1)2-(n-1)]在乘数[y]补的最低位yn-1之后再添加一位yn,并令yn=0,在乘法运算开始时令部分积Z0=0,便可以得到布斯(Booth)递推公式如下:
[Z0]补=0
[Z1]补={[Z0]补+(yn-yn-1)[x]补}×2-1,yn=0
[Z2]补={[Z1]补+(yn-1-yn-2)[x]补}×2-1
[Zi]补={[Zi-1]补+(yn-i+1-yn-i)[x]补}×2-1
[Zn-1]补={[Zn-2]补+(y2-y1)[x]补}×2-1
[Zn]补={[Zn-1]补+(y1-y0)[x]补}
Booth算法规则如表3-3所示,其操作流程如图3-3所示,最后一步(i=n)时不进行右移操作,即得到[x·y]补。表3-3Booth算法规则图3-3补码一位乘Booth算法流程图
【例3-4】已知x和y的真值,x=-0.1101,y=0.1011,利用补码的一位乘求x·y。解:[x]补=11.0011,[y]补=00.1011,[-x]补=00.1101所以[x·y]补=11.01110001,x·y的真值为-0.10001111B。通过例3-4补码一位乘法的运算过程分析,用硬件实现补码一位乘法时,只需三个寄存器和一个n位加法器,实现补码一位乘法的硬件逻辑电路如图3-4所示。图中A、B、C为三个寄存器。在运算开始时,寄存器A用于存放乘积和部分积的高位部分,初始内容为0。寄存器C用于存放乘数和部分积的低位部分,初始内容为乘数;yn-1和yn用于控制进行+[x]补还是+[-x]补。寄存器B用于存放被乘数,可以在yn-1和yn控制下输出原码和反码,当执行+[x]补时,输出原码;当执行+[-x]补时,输出反码。Cx是乘法控制触发器,Cx=1,允许产生移位脉冲,以控制进行乘法运算;否则停止进行乘法运算。计数器i用于记录乘法次数,在运算开始时,计数器i清0,每进行一次运算,计数器i进行加1,当计数到n+1时,结束运算。另外,当i=n时,将计数器i清0,使得在进行第n+1次运算时,不再进行移位。图3-4实现补码一位乘的逻辑电路
4.补码的二位乘法根据布斯递推公式,若将两步合并为一步,即可导出补码的两位乘法公式。设上次部分积为[Zi]补,本次的部分积则为[Zi+1]补={[Zi]补+(yn-i-yn-i-1)[x]补}×2-1下次的部分积为[Zi+2]补={[Zi+1]补+(yn-i-1-yn-i-2)[x]补}×2-1把[Zi+1]补代入[Zi+2]补中,可得
[Zi+2]补={{[Zi]补+(yn-i-yn-i-1)[x]补}×2-1+
(yn-i-1-yn-i-2)[x]补}×2-1
={[Zi]补+(yn-i-2yn-i-2+yn-i-1)[x]补}×2-2在(yn-i-2yn-i-2+yn-i-1)中,yn-i、yn-i-2、yn-i-1的初始值分别为附加位yn=0、yn-1、yn-2,其值及其对应的操作如表3-4所示。
【例3-5】
已知x=-0.1101,y=-0.0101,利用补码的二位乘求x·y。解:[x]补=11.0011,[y]补=11.1011,[-x]补=00.1101,则所以[x·y]补=00.01000001,x·y的真值为+0.01000001B。表3-4(yn-i-2yn-i-2+yn-i-1)与[Zi+2]补的关系
5.并行乘法运算由于乘法运算约占全部算术运算的1/3,因此采用高速乘法器件,无论从速度上还是从效益上来讲都是十分必要的。随着大规模集成电路的迅速发展,出现了各种形式的流水阵列乘法器,它们属于并行乘法器。在此只简单介绍阵列乘法器的基本原理。
1)无符号数阵列乘法器设A为m位的无符号二进制整数(A=am-1…a1a0),B为n位的无符号二进制整数(B=bn-1…b1b0),A、B的数值(真值)分别是a、b,其乘积为P(P=A·B),是一个m+n位无符号二进制整数,即P=pm+n-1…p1p0,数P的真值为p,则
位积aibj{aibj | 0≤i≤m-1和0≤j≤n-1}可以用m×n个逻辑与门并行产生,乘积pk可由相同位权(2k)的位积相加,再加上来自低位的进位产生。利用位积相加来实现乘法运算的器件称为阵列乘法器,如图3-5所示。该阵列乘法器从根本上避免了一位乘和两位乘中所需的大量重复的相加和移位操作,从而提高了乘法运算的速度。图3-5m×n位不带符号的阵列乘法器
2)带符号数阵列乘法器带符号数阵列乘法器是在无符号数阵列乘法器的基础上增加了符号处理和求补电路,所以也称为符号求补的阵列乘法器。
(1)求补器。求补器按照扫描来进行求补操作。对于n位带符号定点整数A=an-1…a1a0,从A的最低位a0开始向高位进行扫描,直到找到第一个“1”(例如ai=1,0≤i≤n-1),则该位置的1以及比ai低的所有位都保持不变,其余的位(比ai高的所有位,不包括ai位)都求反,即实现了对A的求补。第i位扫描的输出为Ci,则Ci=ai+Ci-1,C-1=0。求补器的输出ai*=ai
ECi-1,0≤i≤n-1,E为控制信号,当E=1时,启动求补器进行求补;当E=0时,ai*=ai,显然,数的符号位可以作为控制信号E。图3-6所示为一个4位的对2求补器电路。图3-6对2求补器电路
(2)带求补器的阵列乘法器。设A=anan-1…a1a0,B=bnbn-1…b1b0,A和B为n+1位带符号定点整数。则
P=A·B=P2n-1P2n-2…P1P0
P2n=an
bn其中,P为一个2n位带符号数,P2n为乘积的符号位。图3-7所示为(n+1)×(n+1)位带求补器的阵列乘法器。该带求补器的阵列乘法器使用了三个求补器,两个算前求补器是对A和B求绝对值,然后,将两个数的绝对值送入无符号数阵列乘法器中进行相乘,即得到2n位乘积的绝对值P2n-1P2n-2…P1P0。最后,再根据异或门输出的符号位P2n,控制算后求补器对P2n-1P2n-2…P1P0求补,即得到2n+1位的乘积P2nP2n-1P2n-2…P1P0。图3-7(n+1)×(n+1)位带求补器的阵列乘法器3.1.3定点数除法运算定点数除法可以分为恢复余数法和不恢复余数两种。我们在定点数原码除法中主要讨论恢复余数的除法,而在定点数补码除法中主要讨论不恢复余数的除法(加减交替法)。
1.原码的恢复余数法设被除数为x,其原码为[x]原=x0.x1x2…xn-1,除数为y,其原码为[y]原=y0.y1y2…yn-1,则商q=x/y,其原码为[q]原=(x0y0)+(0·x1x2…xn-1/0.y1y2…yn-1)。商的符号为q0=(x0y0),商的数值部分是(0.x1x2…xn-1/0.y1y2…yn-1),实质上是两个正数求商的运算,类似于十进制数的除法运算,其算法如下:
(1)判断x<y。如果x<y,则商的整数位上0,x的低位补0,得余数r0。
(2)比较r0与2-1y。如果r0≥2-1y,表示够减,则小数点后的第一位商上1,做r0-2-1y,得余数r1;如果r0<2-1y,表示不够减,则小数点后的第一位商上0,不做r0-2-1y,其余数为r1=r0。
(3)比较r1与2-2y。如果r1≥2-2y,表示够减,则小数点后的第二位商上1,做r1-2-2y,得余数r2;如果r1<2-2y,表示不够减,则小数点后的第二位商上0,不做r1-2-2y,其余数为r2=r1。
(4)最后比较rn-2与2-(n-1)y。如果rn-2≥2-(n-1)y,表示够减,则小数点后的第n-1位商上1,做rn-2≥2-(n-1)y,得余数rn-1;如果rn-2<2-(n-1)y,表示不够减,则小数点后的第n-1位商上0,不做rn-2-2-(n-1)y,其余数为rn-1=rn-2。机器的比较必须先做减法,若余数为正,表示够减;否则,表示不够减。不够减时,由于机器已经做过了减法运算,因此,必须恢复原来的余数后再继续往下运算,所以这种除法称为恢复余数的除法。事实上,不够减时不必要恢复余数,可以根据余数的符号继续往下进行运算,这种除法称为不恢复余数的除法,也叫加减交替法。
【例3-6】
已知x=0.1011,y=0.1101,利用恢复余数法求x÷y。解:因为[-y]补=11.0011所以x÷y的商为0.1101B,余数为0.0111B。
2.补码的加减交替法在进行补码的除法运算时,由于被除数和除数都采用补码形式,因此在判断是否够减时,需要比较它们的绝对值大小,即同符号采用加法,不同符号采用减法。在被除数的绝对值小于除数的绝对值(商不溢出)的情况下,补码的加减交替法算法如下:
(1)判符号位。首先通过判断被除数与除数的大小,来确定是进行加法运算还是减法运算。如果被除数与除数同符号,用被除数减去除数;否则,被除数加上除数。然后,判断余数与除数的符号是否相同,来决定商的符号位是1还是0。如果余数与除数的符号相同,上商“1”;否则,上商“0”。所上的商即为结果的符号位。
(2)求商的数值位。如果上次上商1,将余数左移一位后减去除数;如果上次上商0,将余数左移一位后加上除数。然后判断本次操作后的余数,如果余数与除数的符号相同,上商“1”;否则,上商“0”。如此重复进行n-1次(设数值位是n位)。
(3)商的最后一位一般采用恒值1法。对于定点小数而言,最低位置的1相当于2-n,因此,恒值1法所产生的最大误差为±2-n。若要求商的精度较高,可按第(2)步再进行一次操作以求得商的第n位。当除不尽时,若商为负,则在商的最低位加1,使商从反码转换成补码;若商为正,商的最低位不加1。
【例3-7】
已知x=0.1011,y=0.1101,利用补码的加减交替法求x÷y。解:[x]补=00.1011,[y]补=00.1101,[-y]补=11.0011。所以x÷y商的补码为00.1101,x÷y余数的补码为00.0111
3.并行除法运算并行除法运算类似于并行乘法运算,它采用了大规模集成电路——阵列除法器。阵列除法器有多种,如不恢复余数的阵列除法器、补码阵列除法器等。这里以不恢复余数的阵列除法器为例,来介绍并行除法器的组成。
1)可控的加/减单元(CAS)可控的加/减单元(CAS)的逻辑电路如图3-8所示。它具有4个输入端和4个输出端,当输入线P=0时,CAS做加法运算;当输入线P=1时,CAS做减法运算。图3-8可控的加/减单元逻辑电路
CAS单元输入与输出之间的逻辑关系如下所示:(3-10)当P=0时,逻辑关系表达式(3-10)等同于我们很熟悉的一位全加器的逻辑表达式,即(3-11)当P=1时,逻辑关系表达式(3-10)等同于下式:(3-12)其中,=Bi1,Ci为借位输入,Ci+1为借位输出
2)不恢复余数的阵列除法器在不恢复余数的阵列除法器中,每一行所进行的操作是加法还是减法,取决于前一行输出的符号与被除数的符号是否一致。当不够减时,部分余数相对于被除数要改变符号,此时,产生一个商位“0”,除数首先沿对角线右移,然后,加到下一行的部分余数上;当够减时,部分余数不改变符号,此时,产生一个商位“1”,下一行的操作是减法。下面以4位不恢复余数的阵列除法器为例来说明其原理。
4位不恢复余数的阵列除法器逻辑原理图如图3-9所示。其中,被除数x=0.x1x2x3x4x5x6(双倍长度于除数),除数y=0.y1y2y3,商q=0.q1q2q3,余数r=0.00r3r4r5r6。阵列除法器由4×4个CAS单元组成,单元之间的互联是用n=3的阵列来表示的。被除数x沿最上面一行和最右边对角线的垂直线进行输入,除数y沿最上边一行的对角线进行输入;而商q沿最左边进行输出,余数r沿最下面一行的垂直线进行输出。最上面一行所进行的初始操作是减法,所以,控制信号P置“1”。减法是采用2的求补器来实现的,右端各个CAS单元上的反馈线作为初始的进位输入,即最低位加上“1”。每一行最左边单元的进位输出决定商的取值,当前的商反馈到下一行,以确定下一行所进行的操作。由于进位输出信号表示当前部分余数的符号,因此,它将决定下一行所进行的操作是加法还是减法。图3-94位不恢复余数的阵列除法器
【例3-8】
已知x=0.101001,y=0.111,求x
y。解:在计算机中,减法运算通过加补码实现,因此先求出:[-y]补=1.001。所以商q=0.101,余数r=0.000110。3.2逻辑运算和移位操作计算机除了能进行加、减、乘、除等基本算术运算以外,还可以对逻辑数进行逻辑运算。逻辑数是指无符号的二进制数。逻辑运算主要指逻辑与、逻辑或、逻辑异或等。3.2.1逻辑运算设参与逻辑运算的两个数为x和y,x=x0x1x2…xn-1,y=y0y1y2…yn-1。可做如下逻辑运算:
1.逻辑与(逻辑乘)记作“∧”或“·”,若z=x∧y=z0z1z2…zn-1,则zi=xi∧yi,i∈{0,1,2,…,n-1}。
2.逻辑或(逻辑加)记作“∨”或“+”,若z=x∨y=z0z1z2…zn-1,则zi=xi∨yi,i∈{0,1,2,…,n-1}。
3.逻辑异或(逻辑异)记作“”,若z=x
y=z0z1z2…zn-1,则zi=xiyi,i∈{0,1,2,…,n-1}。
【例3-9】
已知x=01101011B,y=11101001B,分别求x∧y、x∨y、xy。解:3.2.2移位操作在定点数的运算中有左移和右移操作,在浮点数的运算中也用到移位操作,可见移位操作的重要性。由于机器字长的限制,当机器数进行左移或右移时,必然会使机器数产生空位和移出,移出的位移到进位标志(而所产生的空位是填“0”、填“1”还是填符号位或原来的进位标志),因此,移位操作分为逻辑移位、算术移位和循环移位,如图3-10所示。图3-10移位操作示意图3.3定 点 运 算 器运算器是CPU的重要组成部分,是专门处理数据的部件,根据所处理数据的不同,运算器可以分为定点运算器和浮点运算器。运算器的核心是算术逻辑单元(ALU),除此之外,还有各类寄存器(通用寄存器、累加器、数据缓冲寄存器、标志寄存器等)、数据多路选择器和数据总线等。3.3.1算术逻辑单元
1.一位算术逻辑单元已知Xi和Yi是一位二进制数,其算术运算的和Fi=Xi+Yi。从表面上看,Fi只能是算术运算的结果。如果Xi或Yi是Ai、Bi的逻辑函数,例如X=Ai·Bi(Ai+Bi),则当Yi=0时,Fi=Xi+Yi=Xi=Ai·Bi(Ai+Bi),那么Fi便是Ai、Bi逻辑运算的结果。因此,一位算术逻辑单元是在一位加法器的基础上再加一个逻辑函数发生器构成的,如图3-11所示。图3-11一位算术逻辑单元因此,一位算术逻辑单元的逻辑表达式为
Fi=XiYiCn+i
Cn+i+1=XiYi+YiCn+i+Cn+iXi
S0、S1、S2、S3是用来控制逻辑函数发生器的输入Ai和Bi,逻辑函数发生器的输出Xi和Yi分别是受S2S3控制的Ai和Bi的组合函数和受S0S1控制的Ai和Bi的组合函数,其函数关系如表3-5所示。表3-5Xi、Yi与控制信号(S0、S1、S2、S3)和数据输入(Ai、Bi)的关系由表3-5可写出Xi和Yi的逻辑表达式为结合一位全加器FA输出与输入之间的逻辑表达式,可得一位算术逻辑单元的一组逻辑表达式如下:(3-13)
2.4位算术逻辑单元
4位算术逻辑单元是由4个一位算术逻辑单元组成,其内部的一位算术逻辑单元之间的进位关系可以是串行进位,也可以是并行进位。图3-12给出了串行进位的4位算术逻辑单元。图3-124位ALU先行进位的4位算术逻辑单元(74181ALU)除产生4位的数据输出(F0F1F2F3)和1位进位输出Cn+4外,又多产生2个输出,一个是G,进位发生输出;另一个是P,进位传递输出。根据式(3-13),74181ALU内部采用先行进位的进位关系如下:第0位向第1位的进位公式为:Cn+1=Y0+X0Cn(Cn是向第0位的进位);第1位向第2位的进位公式为:Cn+2=Y1+X1Cn+1=Y1+Y0X1+X1X0Cn;第2位向第3位的进位公式为:Cn+3=Y2+X2Cn+2=Y2+Y1X2+Y0X2X1+X2X1X0Cn;第3位的进位输出公式为:Cn+4=Y3+X3Cn+3=Y3+Y2X3+Y1X3X2+Y0X3X2X1+X3X2X1X0Cn。令G=Y3+Y2X3+Y1X3X2+Y0X3X2X1,P=X3X2X1X0,则Cn+4=G+PCn(3-14)综上所述,用TTL电路实现的4位算术逻辑单元(74181ALU)的逻辑电路如图3-13所示。M为逻辑运算与算术运算的控制信号。当M=1时,封锁了各位的进位输出,进行的是逻辑运算;当M=0时,进行的是算术运算。74181ALU有两种工作方式:一种是采用正逻辑工作方式,另一种是采用负逻辑工作方式。无论哪一种工作方式都是等效的,都有16种逻辑运算和16种算术运算。表3-6列出了正逻辑74181ALU算术/逻辑运算功能表。74181ALU正、负逻辑的引脚图如图3-14所示。图3-1374181ALU逻辑电路图3-1474181ALU正、负逻辑的引脚图表3-6正逻辑74181ALU算术/逻辑运算功能表
3.两级先行进位的ALU
74181ALU为了方便多个74181ALU的连接,特设置了P和G两个先行进位输出端。如果将4个74181ALU的先行进位输出端(P0、G0,P1、G1,P2、G2,P3、G3)送到先行进位部件74182CLA,又可实现第二级的先行进位,即组与组之间的先行进位。按照式(3-14)可得先行进位部件74182CLA的进位逻辑关系如下:Cn+x=G0+P0Cn
Cn+y=G1+P1Cn+x=G1+G0P1+P1P0CnCn+z=G2+P2Cn+y=G2+G1P2+G0P2P1+P2P1P0CnCn+4=G3+P3Cn+z=G3+G2P3+G1P3P2+G0P3P2P1+P3P2P1P0Cn令G*=G3+G2P3+G1P3P2+G0P3P2P1,P*=P3P2P1P0,则Cn+4=G*+P*Cn用TTL电路实现的先行进位部件74182CLA的逻辑电路如图3-15所示。其中,G* 称为成组进位发生输出,P* 称为成组进位传递输出。图3-1574182CLA的逻辑电路由此可见,一个先行进位部件74182CLA可以连接4个74181ALU,实现一个16位的组间、组内都是先行进位的ALU,如图3-16所示。图3-1616位全先行进位的ALU显然,用两个16位全先行进位的ALU进行级联,便可以组成一个32位的ALU。两个16位全先行进位ALU之间的进位采用的是串行进位,如图3-17所示。图3-1732位全先行进位的ALU3.3.2定点运算器的基本结构
1.单总线结构运算器单总线结构运算器的特点是所有部件都连在一组总线上,在同一时间内,只能允许有一个数据放在总线上,参与运算的两个数据无法同时送到ALU,因此在ALU的两个输入端分别设置了A、B两个缓冲器。运算结束时,再通过单总线将结果存于目的寄存器。单总线结构运算器的主要缺点是操作速度慢。单总线结构运算器模型如图3-18所示。图3-18单总线结构运算器模型
2.双总线结构运算器双总线结构运算器的特点是操作部件连接在两组总线上,可以通过这两组总线同时传输数据,从而保证了在同一时间内将参与运算的两个数据送到ALU并进行运算,但运算结果不能直接送到总线,因为此时的两组总线都被参与运算的两个数据占用着,所以在ALU的输出端设置一个数据缓冲寄存器,运算结果通过缓冲寄存器再送到总线。显然,双总线结构运算器的执行速度比单总线结构运算器的执行速度快。双总线结构运算器如图3-19所示。图3-19双总线结构运算器模型
3.三总线结构运算器三总线结构运算器的特点是操作部件连接在三组总线上,可以通过这三组总线同时传输数据,不仅保证了在同一时间内将参与运算的两个数据送到ALU并进行运算,还可以将运算结果直接送到总线上。与前两种结构的运算器相比较,三总线结构运算器的执行速度最快,不过其控制也更复杂。在三总线结构运算器中,还设置一个总线旁路器,其目的是:当一组总线上的数据不需要操作时,可以通过总线旁路器将此数据直接送到其它总线上,而不必经过ALU。三总线结构运算器如图3-20所示。图3-20三总线结构运算器模型3.3.3定点运算器模型运算器是由算术逻辑单元(ALU)、寄存器(通用寄存器、累加器、数据缓冲寄存器、标志寄存器等)、数据多路选择器和数据总线等组成的。图3-21给出了定点运算器模型。该模型的核心是ALU,实现对数据的算术运算和逻辑运算;AC是累加器,它实际上也是寄存器,只不过使用得较频繁而已;AC不仅用来存放参与运算的数据,还用来存放ALU运算的结果。在此模型中,所有运算结果都只能存放于AC中;STR为状态寄存器,其内设置有多个状态标志,例如零标志、进位标志、溢出标志、符号标志等,数据在ALU中运算的过程中会对STR中的标志产生影响;DR为数据缓冲积存器,运算器与存储器之间的数据交换必须通过DR,设置DR主要是解决速度匹配问题。图3-21定点运算器模型3.4浮点数的算术运算与浮点运算器3.4.1浮点数的加减运算设两个浮点数x和y分别为:
x=Mx×2exx表示为ExMx
y=My×2eyy表示为EyMy其中,Ex、Ey分别是浮点数x和y的阶码机器数形式,通常采用移码;Mx、My为x和y的尾数机器数形式,通常采用补码。令z=x±y,则z=x±y=(Mx×2ex-ey±My)×2eyex≤ey浮点数加减运算步骤如下:
(1) 0浮点数检查。如果加减运算中的两个浮点数x和y有一个为0,则浮点数的加减运算就没有必要严格按照上述步骤进行,从而节约了运算时间,因此,0浮点数检查是十分必要的。
(2)对阶。阶码表示的是小数点的位置,对阶实际上是使小数点对齐。当两个浮点数的阶码不相同时,将阶码小的浮点数的尾数右移E(E=|ex-ey|位,其阶码值增加E,使两个浮点数的阶码值相同,此操作称为对阶。因为浮点数的尾数右移时丢失的是低位数值位,这样造成的浮点数误差较小。
(3)尾数加减。对阶完成后,即可进行尾数的加减。不论是加法还是减法,都必须按加法进行运算。
(4)结果规格化。尾数的加减运算结果未必满足浮点数的规格化条件,却必须进行左规或右规。下面以变补形式的尾数为例来讨论左规、右规和舍入处理。当尾数加减运算结果的双符号位不同时,并不表示运算结果的溢出,因为影响浮点数大小的主要因素是阶码而不是尾数,仅表示尾数加减运算结果的绝对值大于1,向左破坏了规格化,因此,需要将尾数加减运算结果右移并相应地提高阶码来实现规格化,这种实现规格化的方法称为右规;当尾数加减运算结果的双符号位相同,且符号位与最高数值位相同时,尾数的加减运算结果不符合浮点数的规格化条件,因此需要将尾数加减运算结果左移并相应地降低阶码来实现规格化,这种实现规格化的方法称为左规;当尾数加减运算结果的双符号位相同,且符号位与最高数值位不相同时,尾数的加减运算结果符合浮点数的规格化条件,因此,不需要左规或右规。
(5)舍入处理。在对阶和右规时,需要将浮点数的尾数和尾数加减运算结果进行右移,被右移的低位部分会因此而丢失,从而造成一定的误差,因此,需要进行舍入处理。最简单的舍入处理方法有:①“0舍1入”法:如果右移时被丢掉的数值位的最高位为0,则舍去;否则,在数值的最低位加1。②“恒1”法:只要有数值位被丢掉,则在数值的最低位置“1”。
(6)溢出判断。浮点数加减运算结果的溢出判断取决于阶码的溢出。如果阶码没有溢出,浮点数加减运算结果不会溢出;如果阶码溢出,则需要进行相应的处理。阶码上溢:是指阶码超出了其所能表示的最大正数,一般认为结果是 ±∞。阶码下溢:是指阶码超出了其所能表示的最小负数,一般认为结果是0。
【例3-10】
已知x=2010×(-0.110100),y=2100×(0.101011),求x+y。解:①对阶(阶码和尾数均采用补码表示)。
[x]浮=00.010;11.001100
[y]浮=00.100;00.101011
浮点数x的阶码小,将x的尾数右移2位,x的阶码增2。即
[x]浮=00.100;11.110011x+y=2011×(+0.111100)②尾数求和。
11.110011
+
00.101011
100.011110③规格化。因为尾数求和的结果为00.011110,符号位与数值最高位相同,所以需进行左规,即尾数向左移1位,阶码减1,可得:00.011;00.111100。④舍入处理。采用“0舍1入”法,由于左规时移出一位0,所以舍去0。⑤溢出判别。由于运算结果的阶码未发生溢出,所以运算结果未溢出。x+y=2011×(+0.111100)
3.4.2浮点数的乘法和除法运算
1.浮点数的乘法和除法运算规则设两个浮点数x和y分别为:
x=Mx×2exx表示为ExMx
y=My×2eyy表示为EyMy其中,Ex、Ey分别是浮点数x和y的阶码机器数形式,通常采用移码,Mx、My为x和y的尾数机器数形式,通常采用补码,则浮点数的乘法和除法运算规则如下:浮点数的乘法运算规则:x×y=(Mx+My)·2(ex+ey)浮点数的除法运算规则:x÷y=(Mx÷My)·2(ex-ey)
2.浮点数的乘法和除法运算步骤浮点数的乘法和除法运算大体分为六步:第一步,0浮点数检查;第二步,阶码的加/减运算;第三步,尾数乘/除运算;第四步,结果规格化;第五步,舍入处理;第六步,溢出判断。由于浮点数加减结果规格化、舍入处理也适用于浮点数的乘法和除法运算,尾数乘/除运算与定点数的乘/除类似,所以在此只讨论阶码的加/减运算及溢出判断和舍入处理。
1)阶码运算对阶码的运算有+1、-1、求和、求差四种,运算的同时还需要检查阶码是否溢出。由于阶码通常采用补码、移码形式,而补码的运算和溢出判别在前面已讲过,所以在此只讨论阶码的加/减运算及溢出判断。
(1)移码运算。根据移码定义,对于n+1位的移码(1位符号和n位数值),[x]移=2n+x,-2n≤x<2n,则[x]移+[y]移=2n+x+2n+y=2n+(2n+(x+y))=2n+[x+y]移即直接用移码求阶码之和时,结果的最高位多了一位1,要得到正确的移码形式结果,则必须对结果的符号位取反。当混合使用移码和补码时,由于[y]补=2n+1+y(mod2n+1),则[x]移+[y]补=2n+x+2n+1+y=2n+1+(2n+(x+y))=2n+1+[x+y]移即[x+y]移=[x]移+[y]补
(mod2n+1)同理[x-y]移=[x]移+[-y]补
(mod2n+1)
(2)溢出判断。如果阶码运算的结果溢出,则上述各式均不成立。为了便于判断阶码运算的结果是否溢出,使用双符号位的阶码加法器,并规定移码的第二个符号位,即最高符号位恒用0参与运算,则溢出条件是结果的最高符号位为1。此时,若两符号位为10,表示结果上溢;若两符号位为11,表示结果下溢;若两符号位为00,表示结果为负;若两符号位为01,表示结果为正。
【例3-11】
已知x=+011,y=+110,求[x+y]移和[x-y]移,并判断是否溢出。解:[x]移=01011,[y]补=00110,[-y]补=11010,
[x+y]移=[x]移+[y]补=01011+00110=10001,双符号为10,结果上溢。
[x-y]移=[x]移+[-y]补=01011+11010=00101,双符号为00,结果正确。
2)舍入处理舍入处理的目的是尽量减少误差,其方法有截断处理和修正处理。截断处理也称为恒舍法,是无条件地丢掉正常尾数最低位之后的全部数值;修正处理是保留右移过程中移出的若干高位的值,然后再按某种规则,用所保留的高位值来修正尾数。其舍入规则有:
(1)只要尾数的最低位为1或移出丢掉的几位中有1,即把尾数的最低位置1,否则保持原来的0。
(2)最低位恒置1。
(3) 0舍1入。当失去的最高位的值为1时,把该1加到最低数值位上进行修正;否则,舍去丢掉的各位的值。
【例3-12】
已知[x1]补=11.01100000,[x2]补=11.01100001,[x3]补=11.01111001,求执行只保留小数点后4位有效数字的舍入操作值。解:执行舍入处理后,其结果分别为
[x1]补=11.0110(不舍不入)
[x2]补=11.0110(舍)
[x3]补=11.1000(入)
【例3-13】
已知x=2-5×0.0110011,y=23×(-0.1110010),阶码用4位移码表示,尾数(含数符)用8位补码表示,求x×y。要求用补码完成尾数乘法运算,运算结果的尾数保留高8位,并用尾数低位字长的值处理舍入操作。解:阶码采用双符号移码,尾数采用双符号补码,则
[Mx]补=00.0110011,[My]补=11.0001110
[Ex]移=00.011,[Ey]移=01.011,[Ey]补=00.011
[x]浮=00.011,00.0110011,[y]移=01.011,11.0001110①求阶码和。
[Ex+Ey]移=[Ex]移+[Ey]补=00011+00011=00110,其真值为-2。②尾数乘法运算可采用补码一位乘实现,即
[Mx]补×[My]补
=00.0110011×11.0001110=11.10100101001010③规格化处理。乘积的尾数符号位与最高数值位相同,不符合规格化要求,需进行左规,即尾数左移一位,阶码减1,此时,阶码为00101(-3),尾数为11.01001010010100。④舍入处理。尾数为负数,取尾数高位字长,按舍入规则,舍去低位字长,故尾数为1.0100101。[x×y]浮=00101,11.0100101x×y的真值为23×(-0.1011011)。3.4.3浮点运算器由于浮点数的运算是对阶码和尾数分别进行的运算,阶码是定点整数,尾数是定点小数,所以浮点运算器实质上是由两个定点运算器构成的,其工作原理结构图如图3-22所示。图3-22浮点运算器阶码运算部件用来对阶码进行加减运算,由寄存器(E1、E2)、计数器EC、并行加法器Fe组成。其中,E1、E2用于存放与R0、R1中尾数相对应的阶码。
1.尾数运算部件尾数运算部件用来对尾数进行加、减、乘、除运算,由寄存器(R0、R1、MQ)、并行加法器Fm组成。其中,R0、R1用于存放操作数,R0还用来存放运算结果;MQ是乘商寄存器,用来进行乘除运算;R0、MQ具有联合左移、右移功能;R1具有右移功能,用于实现对阶的移位。
2.工作原理
1)浮点数的加减运算
(1)阶码运算部件求出阶差E=E1-E2,并存放于EC中,EC根据符号判断出哪个浮点数的阶码小,控制将其相应的尾数(R0或R1)进行右移。若E为正,则E2小,控制R1进行右移,且每右移一位,EC-1;若E为负,则E1小,控制R0进行右移,且每右移一位,EC-1。一直控制移位到EC=0,完成浮点数的对阶操作。
(2)尾数运算部件完成对尾数的加减,并将结果存于R0中。
(3)判别运算结果,进行规格化。在规格化处理过程中,每将R0左移(或右移)一位,应将E1、E2中的较大者减1(加1)。规格化处理结束后,将其作为结果的阶码。
2)浮点数的乘除运算在进行浮点数的乘除运算时,阶码运算部件和尾数运算部件独立工作,阶码运算部件只做阶码的加减运算,尾数运算部件完成尾数的乘除运算,运算结束后对结果进行规格化处理。关联习题3.1已知[x]补、[y]补,计算[x+y]补和[x-y]补。(1) [x]补=0.11011,[y]补=0.00011(2) [x]补=0.10111,[y]补=1.00101(3) [x]补=1.01010,[y]补=1.100013.2已知[x]补、[y]补,计算[x+y]变补和[x-y]变补。(1) [x]补=100111,[y]补=111100(2) [x]补=011011,[y]补=110100(3) [x]补=101111,[y]补=0110003.3设某机字长为8位,给定十进制数:x=+49,y=-74,试按补码运算规则计算下列各题。(1) [x]补+[y]补
(2) [x]补-[y]补
(3)[-x]补+[
y]补(4) [2x-
y]补
(5) [
x+
y]补
(6) [-x]补+[2y]补3.4分别用原码一位乘法和补码一位乘法计算[x×y]原和[x×y]补。(1) x=0.11001,y=0.10001(2) x=0.01101,y=-0.10100(3) x=-0.10111,y=0.11011(4) x=-0.01011,y=-0.110103.5用补码两位乘法计算[x×y]原和[x×y]补。(1) x=0.11001,y=0.10001(2) x=0.10101,y=-0.01101(3) x=-0.01111,y=0.11101(4) x=-0.01001,y=-0.100103.6分别用原码不恢复余数法和补码不恢复余数法计算[x/y]原和[x/y]补。(1) x=0.01011,y=0.10110(2) x=0.10011,y=-0.11101(3) x=-0.10111,y=-0.11011(4) x=+10110,y=-001103.7在进行浮点加减运算时,为什么要进行对阶?说明对阶的方法和理由。3.8已知某模型机的浮点数据表示格式如下:其中,浮点数尾数和阶码的基值均为2,均采用补码表示。
(1)求该机所能表示的规格化最小正数和非规格化最小负数及其所对应的十进制真值。
(2)已知两个浮点数的机器数表示为EF80H和FFFFH,求它们所对应的十进制真值。
(3)已知浮点数的机器数表示为:[x]补=1111100100100101,[y]补=1111011100110100试按浮点加减运算,计算[x±y]补。3.9已知某机浮点数表示格式如下:其中,浮点数尾数和阶码的基值均为2,阶码用移码表示,尾数用补码表示。设x=0.110101×2-001,y=-0.100101×2+001,用浮点运算规则,计算x+y、x-y、x×y、x/y(要求写出详细运算步骤,并进行规格化)。3.10题3.10图给出了实现补码乘法的部分硬件框图。(1)请正确填写图中逻辑门AN
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026生物科技行业市场供需分析及投资发展前景研究报告
- 人教统编版语文八年级上册第3课 《首届诺贝尔奖颁发》同步练习(含答案)1
- 2026中国工程机械轮毂轴承单元技术升级与后市场服务模式
- 2026中国智能机器人控制系统配件行业市场供需分析及投资评估规划分析研究报告
- 2026中国智能公共设施管理系统行业市场供需分析及投资评估规划分析研究报告
- 2026隐私计算技术金融领域应用场景与合规框架报告
- 2026能源节约行业市场发展规模深度调研及节能减排技术应用与投资机会研判
- 绿氨:连接可再生能源与全球低碳化工体系的百亿美元级绿色分子产业
- 2026中国无刷直流电动机技术创新与产业化进程调研报告
- 2026中国智慧社区服务平台市场发展现状供需分析及居住服务投资前景规划分析报告
- JG/T 543-2018铝塑共挤门窗
- 服装公司售后管理制度
- 中医思维培养课件
- 中车株洲所校招笔试题目及答案
- GB/T 4948-2025铝合金牺牲阳极
- 公司图文服务采购方案投标文件(技术方案)
- 2025中国临床肿瘤学会CSCO结直肠癌诊疗指南解读课件
- 【北京市人社局】2025年北京市人力资源市场薪酬数据报告(一季度)
- 玉盘二部合唱简谱
- 中医基础理论脾课件
- 施工环境保护培训
评论
0/150
提交评论