1、第3章 运算方法与运算器第第3章章 运算方法与运算器运算方法与运算器3.1 定点数的算术运算与实现3.2 逻辑运算和移位操作3.3 定点运算器3.4 浮点数的算术运算与浮点运算器并联习题第3章 运算方法与运算器3.1 定点数的算术运算与实现定点数的算术运算与实现定点数的机器数有原码、反码、补码等形式,本节以定点小数的补码形式来讨论定点数的加、减、乘、除运算。因为补码运算可以将减法转换为加法,补码的符号位同补码的数值位一样参与运算,且补码运算规则简单,易于实现,所以现代计算机中的数据普遍采用补码。第3章 运算方法与运算器3.1.1 定点数加减运算定点数加减运算1补码加减运算规则补码加减运算规则假
2、设定点小数x的补码为x补,定点小数y的补码为y补,则有:x+y补=x补+y补 (mod 2)(3-1)x-y补=x补-y补=x补+-y补 (mod 2)(3-2)根据式(3-1)和式(3-2),补码加减运算的规则如下:规则1,参与运算的数是补码,运算结果也是补码。规则2,符号位同数值位一样参与运算,其结果的符号取决于运算结果的补码。第3章 运算方法与运算器规则3,加法运算时,直接将两个数的补码相加;减法运算时,需要将减数变补(即用y补求-y补),然后再与被减数的补码相加。这是由于数据采用补码形式后,减法运算转换成了加法运算,所以计算机实现加减运算只需加法器,无需减法器。我们在进行减法运算时也只
3、能按加法进行运算。规则4,补码的运算是有模的运算,如果运算结果超出了模(即符号位的运算产生了进位),则模将自动丢失。这样处理的结果并非错误,但还需要进一步进行溢出判断。第3章 运算方法与运算器2溢出与溢出判断溢出与溢出判断溢出是指运算结果超出了机器所能表示的数的范围。如果运算结果超出了机器所能表示的最大正数,则称为上溢(正溢出);如果运算结果超出了机器所能表示的最小负数,则称为下溢(负溢出)。一旦出现溢出,机器将无法表示正确结果,因此,计算机在运算的过程中必须正确判断溢出并及时处理。第3章 运算方法与运算器1)单符号判别法单符号判别法是根据参与运算数的符号和运算结果的符号进行判断溢出。设x补=
4、x0.x1x2xn-1,y补=y0.y1y2yn-1,z补=x+y补=z0.z1z2zn-1,溢出标志为V,则溢出标志V与符号位(x0、y0、z0)之间的关系如表3-1所示。根据真值表3-1,可得出溢出的判断条件为V=x0y0z0+x0y0z0(x0 y0)(x0 y0)第3章 运算方法与运算器表表3-1 溢出标志溢出标志(V)与符号位与符号位(x0、y0、z0)之间的真值表之间的真值表第3章 运算方法与运算器2)双符号判别法双符号判别法也称为变形补码法,是根据结果的变形补码来进行判断溢出的。变形补码的定义如下:设x为n位的二进制数据,式(3-3)和式(3-4)分别给出了x为定点小数0.x1x
5、2xn-1和x为定点整数x1x2xn-1的变形补码定义。第3章 运算方法与运算器定点小数变形补码的定义如下:(3-3)定点整数变形补码的定义如下:(3-4)第3章 运算方法与运算器由定义可知:(1)变形补码只是比普通补码多了一位符号位,所以,变形补码也称双符号位补码。如:x补=x0.x1x2xn-1,则x变补=x0 x0.x1x2xn-1,其中,x0 x0为00表示正数,x0 x0为11表示负数。第3章 运算方法与运算器(2)变形补码的加减运算与普通补码的加减运算相同,只不过两个符号位都参与了运算,运算结果为:,其中是结果的两个符号位,其含义为:,表示结果为正,无溢出;,表示结果为负,无溢出;
6、,表示结果正溢出;,表示结果负溢出。00zz0000zz11zz001n2100zzzzz01zz0010zz00第3章 运算方法与运算器由此可见,当不一致时,结果便产生溢出。因此,采用变形补码进行运算时,溢出的判断条件为。00zz000000zzzzzzV第3章 运算方法与运算器3)进位判别法当最高有效位产生进位而符号位无进位时,产生正溢;当最高有效位无进位而符号位产生进位时,产生负溢。故溢出的判断条件为V=CsC0,其中Cs为符号位产生的进位,C0为最高有效位产生的进位。第3章 运算方法与运算器3补码加减运算的步骤补码加减运算的步骤补码的加减运算虽然十分简单,但一定要注意运算步骤的完整。为
7、此,特归纳补码的加减运算步骤如下:步骤1 求x补、y补、-y补。步骤2 按式(3-1)和式(3-2)进行二进制加法运算。注意:只能按加法进行运算,即使是减法运算,也要将减数变补(即由y补求-y补),然后再与被减数相加。步骤3 利用溢出判断条件,判断运算结果的正确性。第3章 运算方法与运算器【例例3-1】已知x的真值,用补码的加减运算计算xy。x=+0.1010,y=+0.0011 x=-0.1101,y=-0.1011解解:x补=0.1010,y补=0.0011,-y补=1.1101x+y补=x补+y补=0.1010+0.0011=0.1101x-y补=x补-y补=x补+-y补=0.1010+
8、1.1101=0.0111进位位第3章 运算方法与运算器具体运算过程如下:由单符号判别法可知,xy的结果没有发生溢出。第3章 运算方法与运算器 x补=1.0011,y补=1.0101,-y补=0.1011x+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章 运算方法与运算器【例例3-2】已知x的真值,利用变形补码求xy。x=+0.1010,y=+0.0011 x=-0.11
9、01,y=-0.1011解解:x变补=00.1010,y变补=00.0011,-y变补=11.1101x+y变补=x变补+y变补=00.1010+00.0011=00.1101x-y变补=x变补-y变补=x变补+-y变补=00.1010+11.1101=00.0111+11.1101第3章 运算方法与运算器具体运算过程如下:由双符号判别法可知,xy结果的双符号相同,所以没有发生溢出。第3章 运算方法与运算器 x变补=11.0011,y变补=11.0101,-y变补=00.1011x+y变补=x变补+y变补=11.0011+11.0101=10.1000 x-y变补=x变补-y变补=x变补+-y
10、变补=11.0011+00.1011=11.1110第3章 运算方法与运算器具体运算过程如下:由双符号判别法可知,x+y结果的双符号为10,所以运算结果发生了溢出。而x-y结果的双符号为11,不会发生溢出。第3章 运算方法与运算器【例例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.101
11、01。21第3章 运算方法与运算器4补码加减运算的逻辑实现补码加减运算的逻辑实现1)一位全加器设一位全加器FA(Full Addition)的输入为Ai和Bi,进位输入为Ci,结果输出为Si,进位输出为Ci+1,则一位全加器的真值表如表3-2所示。根据表3-2可得输入与输出之间的逻辑表达式:Si=(AiBi)Ci (3-5)Ci+1=AiBi+(AiBi)Ci(3-6)第3章 运算方法与运算器由式(3-5)和式(3-6)可知,一位全加器逻辑电路如图3-1(b)所示。假设单位逻辑门电路(与门、与非门、或门、或非门)的时间延迟为T,则一个异或门的时间延迟为3T,一位全加器产生Zi的时间延迟为6T,
12、进位传递(由Ci到Ci+1)时间为2T。第3章 运算方法与运算器表表3-2 一位全加器的真值表一位全加器的真值表第3章 运算方法与运算器2)n位补码加减运算的逻辑电路n位补码加减运算的逻辑电路需要n个一位全加器FA、外加控制信号M(M=0,实现加法;M=1,实现减法)组成。其逻辑电路如图3-1(a)所示。第3章 运算方法与运算器图3-1 n位补码加减运算电路第3章 运算方法与运算器为了进一步讨论进位关系,将式(3-5)中进位输出Ci+1的关系式改变为如下形式:Ci+1=AiBi+(AiBi)Ci=Gi+PiCi其中,Gi=AiBi,为进位生成函数;Pi=AiBi,为进位传递函数。下面讨论n位补
13、码加减运算的进位关系。已知(3-7)第3章 运算方法与运算器由式(3-7)可知,高位的进位Ci仅仅是它的低一位进位Ci-1的函数,也就是说,只有产生出Ci-1后才能产生Ci,这种进位关系称为行波进位或串行进位。行波进位的补码加减运算时间主要取决于进位的传递时间。为了提高补码的加减运算速度,进位关系往往采用并行进位,即高位的进位Ci都是C0的函数。C1=G0+P0C0C2=G1+P1C1=G1+P1G0+P1P0C0 Cn-1=Gn-2+Pn-2Cn-2=Gn-2+Pn-2Gn-3+Pn-3Pn-4P1G0+Pn-3Pn-4P1P0C0(3-8)第3章 运算方法与运算器由式(3-8)可知,n越大
14、,进位逻辑电路越复杂,因此,往往将n位按4位进行分组。不难证明n/4-1组间的进位信号G和传递信号P的表达式如下:第3章 运算方法与运算器它们同样满足。所以各组的进位为:*i*i*i*1iCPGCn位定点数的加减运算进行分组后,组内可以按上述并行进位关系进行加法,而组间既可以是串行进位关系,也可以是组间并行进位关系,这里不再嫯述。第3章 运算方法与运算器在实际的运算器中,参与运算的数据和运算结果通常存放在寄存器中,控制器控制将数据送入加法器,并进行加法运算,再将运算结果送回寄存器。图3-2给出了带有寄存器的实现补码加减运算的逻辑电路。其中寄存器A、B分别存放参与运算的两个补码数据,运算结果送回
15、寄存器A保存。第3章 运算方法与运算器图3-2 实现补码加减运算的逻辑电路第3章 运算方法与运算器3.1.2 定点数乘法运算定点数乘法运算1补码与真值的关系补码与真值的关系设x补=x0.x1x2xn-1,则当x0时,x补=0.x1x2xn-1=xi2-i当x0时,x补=1.x1x2xn-1=2+x所以x=x补-2=-1+0.x1x2xn-1=-1+xi2-i对于任何数x,其补码与真值的关系如下:x=-x0+xi2-i=-x0+0.x1x2xn-1 (3-9)1n1i11ni第3章 运算方法与运算器2补码的右移补码的右移1n2101n1iii0 xx0.xx2xxx1n1iii001n1iii0
16、2x21x21x2x21x21x211n21001n21001n1i1)i(i0 xxx.xxxxx0.xx2xx1n2100 xxx.xx补x21所以 第3章 运算方法与运算器3补码的一位乘法补码的一位乘法设被乘数x补=x0.x1x2xn-1,乘数y补=y0y1y2yn-1,则xy补=x补(-y0+yi2-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)第
17、3章 运算方法与运算器在乘数y补的最低位yn-1之后再添加一位yn,并令yn=0,在乘法运算开始时令部分积Z0=0,便可以得到布斯(Booth)递推公式如下:Z0补=0Z1补=Z0补+(yn-yn-1)x补2-1,yn=0Z2补=Z1补+(yn-1-yn-2)x补2-1Zi补=Zi-1补+(yn-i+1-yn-i)x补2-1Zn-1补=Zn-2补+(y2-y1)x补2-1Zn补=Zn-1补+(y1-y0)x补Booth算法规则如表3-3所示,其操作流程如图3-3所示,最后一步(i=n)时不进行右移操作,即得到xy补。第3章 运算方法与运算器表表3-3 Booth算法规则算法规则第3章 运算方法
18、与运算器图3-3 补码一位乘Booth算法流程图第3章 运算方法与运算器【例3-4】已知x和y的真值,x=-0.1101,y=0.1011,利用补码的一位乘求xy。解解:x补=11.0011,y补=00.1011,-x补=00.1101第3章 运算方法与运算器所以xy补=11.01110001,xy的真值为-0.10001111B。第3章 运算方法与运算器通过例3-4补码一位乘法的运算过程分析,用硬件实现补码一位乘法时,只需三个寄存器和一个n位加法器,实现补码一位乘法的硬件逻辑电路如图3-4所示。图中A、B、C为三个寄存器。在运算开始时,寄存器A用于存放乘积和部分积的高位部分,初始内容为0。寄
19、存器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章 运算方法与运算器图3-4 实现补码一位乘的逻辑电路第3章 运算方法与运算器4补码的二位乘
20、法补码的二位乘法根据布斯递推公式,若将两步合并为一步,即可导出补码的两位乘法公式。设上次部分积为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,其值及其对应的操作
21、如表3-4所示。第3章 运算方法与运算器【例例3-5】已知x=-0.1101,y=-0.0101,利用补码的二位乘求xy。解解:x补=11.0011,y补=11.1011,-x补=00.1101,则所以xy补=00.01000001,xy的真值为+0.01000001B。第3章 运算方法与运算器表表3-4 (yn-i-2yn-i-2+yn-i-1)与与Zi+2补补的关系的关系第3章 运算方法与运算器5并行乘法运算并行乘法运算由于乘法运算约占全部算术运算的1/3,因此采用高速乘法器件,无论从速度上还是从效益上来讲都是十分必要的。随着大规模集成电路的迅速发展,出现了各种形式的流水阵列乘法器,它们属
22、于并行乘法器。在此只简单介绍阵列乘法器的基本原理。第3章 运算方法与运算器1)无符号数阵列乘法器设A为m位的无符号二进制整数(A=am-1a1a0),B为n位的无符号二进制整数(B=bn-1b1b0),A、B的数值(真值)分别是a、b,其乘积为P(P=AB),是一个mn位无符号二进制整数,即P=pm+n-1p1p0,数P的真值为p,则1m0iii2aa1n0jjj2bb1nm0kkk1m0iji1n0jji1n0jjj1m0iii2p 2)ba(2b2abap 第3章 运算方法与运算器位积aibjaibj|0im-1和0jn-1可以用mn个逻辑与门并行产生,乘积pk可由相同位权(2k)的位积相
23、加,再加上来自低位的进位产生。利用位积相加来实现乘法运算的器件称为阵列乘法器,如图3-5所示。该阵列乘法器从根本上避免了一位乘和两位乘中所需的大量重复的相加和移位操作,从而提高了乘法运算的速度。第3章 运算方法与运算器图3-5 mn位不带符号的阵列乘法器第3章 运算方法与运算器2)带符号数阵列乘法器带符号数阵列乘法器带符号数阵列乘法器是在无符号数阵列乘法器的基础上增加了符号处理和求补电路,所以也称为符号求补的阵列乘法器。第3章 运算方法与运算器(1)求补器。求补器按照扫描来进行求补操作。对于n位带符号定点整数A=an-1a1a0,从A的最低位a0开始向高位进行扫描,直到找到第一个“1”(例如a
24、i=1,0in-1),则该位置的1以及比ai低的所有位都保持不变,其余的位(比ai高的所有位,不包括ai位)都求反,即实现了对A的求补。第i位扫描的输出为Ci,则Ci=ai+Ci-1,C-1=0。求补器的输出ai*=aiECi-1,0in-1,E为控制信号,当E=1时,启动求补器进行求补;当E=0时,ai*=ai,显然,数的符号位可以作为控制信号E。图3-6所示为一个4位的对2求补器电路。第3章 运算方法与运算器图3-6 对2求补器电路第3章 运算方法与运算器(2)带求补器的阵列乘法器。设A=anan-1a1a0,B=bnbn-1b1b0,A和B为n+1位带符号定点整数。则P=AB=P2n-1
25、P2n-2P1P0P2n=anbn其中,P为一个2n位带符号数,P2n为乘积的符号位。第3章 运算方法与运算器图3-7所示为(n+1)(n+1)位带求补器的阵列乘法器。该带求补器的阵列乘法器使用了三个求补器,两个算前求补器是对A和B求绝对值,然后,将两个数的绝对值送入无符号数阵列乘法器中进行相乘,即得到2n位乘积的绝对值P2n-1P2n-2P1P0。最后,再根据异或门输出的符号位P2n,控制算后求补器对P2n-1P2n-2P1P0求补,即得到2n+1位的乘积P2nP2n-1P2n-2P1P0。第3章 运算方法与运算器图3-7 (n+1)(n+1)位带求补器的阵列乘法器第3章 运算方法与运算器3
26、.1.3 定点数除法运算定点数除法运算定点数除法可以分为恢复余数法和不恢复余数两种。我们在定点数原码除法中主要讨论恢复余数的除法,而在定点数补码除法中主要讨论不恢复余数的除法(加减交替法)。第3章 运算方法与运算器1原码的恢复余数法原码的恢复余数法设被除数为x,其原码为x原=x0.x1x2xn-1,除数为y,其原码为y原=y0.y1y2yn-1,则商q=x/y,其原码为q原=(x0y0)+(0 x1x2xn-1/0.y1y2yn-1)。商的符号为q0=(x0y0),商的数值部分是(0.x1x2xn-1/0.y1y2yn-1),实质上是两个正数求商的运算,类似于十进制数的除法运算,其算法如下:第
27、3章 运算方法与运算器(1)判断xy。如果xy,则商的整数位上0,x的低位补0,得余数r0。(2)比较r0与2-1y。如果r02-1y,表示够减,则小数点后的第一位商上1,做r0-2-1y,得余数r1;如果r02-1y,表示不够减,则小数点后的第一位商上0,不做r0-2-1y,其余数为r1=r0。(3)比较r1与2-2y。如果r12-2y,表示够减,则小数点后的第二位商上1,做r1-2-2y,得余数r2;如果r12-2y,表示不够减,则小数点后的第二位商上0,不做r1-2-2y,其余数为r2=r1。(4)最后比较rn-2与2-(n-1)y。如果rn-22-(n-1)y,表示够减,则小数点后的第
28、n-1位商上1,做rn-22-(n-1)y,得余数rn-1;如果rn-22-(n-1)y,表示不够减,则小数点后的第n-1位商上0,不做rn-2-2-(n-1)y,其余数为rn-1=rn-2。第3章 运算方法与运算器机器的比较必须先做减法,若余数为正,表示够减;否则,表示不够减。不够减时,由于机器已经做过了减法运算,因此,必须恢复原来的余数后再继续往下运算,所以这种除法称为恢复余数的除法。事实上,不够减时不必要恢复余数,可以根据余数的符号继续往下进行运算,这种除法称为不恢复余数的除法,也叫加减交替法。第3章 运算方法与运算器【例例3-6】已知x=0.1011,y=0.1101,利用恢复余数法求
29、xy。解解:因为-y补=11.0011第3章 运算方法与运算器所以xy的商为0.1101B,余数为0.0111B。第3章 运算方法与运算器2补码的加减交替法补码的加减交替法在进行补码的除法运算时,由于被除数和除数都采用补码形式,因此在判断是否够减时,需要比较它们的绝对值大小,即同符号采用加法,不同符号采用减法。在被除数的绝对值小于除数的绝对值(商不溢出)的情况下,补码的加减交替法算法如下:(1)判符号位。首先通过判断被除数与除数的大小,来确定是进行加法运算还是减法运算。如果被除数与除数同符号,用被除数减去除数;否则,被除数加上除数。然后,判断余数与除数的符号是否相同,来决定商的符号位是1还是0
30、。如果余数与除数的符号相同,上商“1”;否则,上商“0”。所上的商即为结果的符号位。第3章 运算方法与运算器(2)求商的数值位。如果上次上商1,将余数左移一位后减去除数;如果上次上商0,将余数左移一位后加上除数。然后判断本次操作后的余数,如果余数与除数的符号相同,上商“1”;否则,上商“0”。如此重复进行n-1次(设数值位是n位)。(3)商的最后一位一般采用恒值1法。对于定点小数而言,最低位置的1相当于2-n,因此,恒值1法所产生的最大误差为2-n。若要求商的精度较高,可按第(2)步再进行一次操作以求得商的第n位。当除不尽时,若商为负,则在商的最低位加1,使商从反码转换成补码;若商为正,商的最
31、低位不加1。第3章 运算方法与运算器【例例3-7】已知x=0.1011,y=0.1101,利用补码的加减交替法求xy。解解:x补=00.1011,y补=00.1101,-y补=11.0011。第3章 运算方法与运算器所以xy商的补码为00.1101,xy余数的补码为00.0111 第3章 运算方法与运算器3并行除法运算并行除法运算并行除法运算类似于并行乘法运算,它采用了大规模集成电路阵列除法器。阵列除法器有多种,如不恢复余数的阵列除法器、补码阵列除法器等。这里以不恢复余数的阵列除法器为例,来介绍并行除法器的组成。1)可控的加/减单元(CAS)可控的加/减单元(CAS)的逻辑电路如图3-8所示。
32、它具有4个输入端和4个输出端,当输入线P=0时,CAS做加法运算;当输入线P=1时,CAS做减法运算。第3章 运算方法与运算器图3-8 可控的加/减单元逻辑电路第3章 运算方法与运算器CAS单元输入与输出之间的逻辑关系如下所示:(3-10)当P=0时,逻辑关系表达式(3-10)等同于我们很熟悉的一位全加器的逻辑表达式,即(3-11)第3章 运算方法与运算器当P=1时,逻辑关系表达式(3-10)等同于下式:(3-12)其中,=Bi 1,Ci为借位输入,Ci+1为借位输出 iB第3章 运算方法与运算器2)不恢复余数的阵列除法器在不恢复余数的阵列除法器中,每一行所进行的操作是加法还是减法,取决于前一
33、行输出的符号与被除数的符号是否一致。当不够减时,部分余数相对于被除数要改变符号,此时,产生一个商位“0”,除数首先沿对角线右移,然后,加到下一行的部分余数上;当够减时,部分余数不改变符号,此时,产生一个商位“1”,下一行的操作是减法。下面以4位不恢复余数的阵列除法器为例来说明其原理。第3章 运算方法与运算器4位不恢复余数的阵列除法器逻辑原理图如图3-9所示。其中,被除数x=0.x1x2x3x4x5x6(双倍长度于除数),除数y=0.y1y2y3,商q=0.q1q2q3,余数r=0.00r3r4r5r6。阵列除法器由44个CAS单元组成,单元之间的互联是用n=3的阵列来表示的。被除数x沿最上面一
34、行和最右边对角线的垂直线进行输入,除数y沿最上边一行的对角线进行输入;而商q沿最左边进行输出,余数r沿最下面一行的垂直线进行输出。最上面一行所进行的初始操作是减法,所以,控制信号P置“1”。减法是采用2的求补器来实现的,右端各个CAS单元上的反馈线作为初始的进位输入,即最低位加上“1”。第3章 运算方法与运算器每一行最左边单元的进位输出决定商的取值,当前的商反馈到下一行,以确定下一行所进行的操作。由于进位输出信号表示当前部分余数的符号,因此,它将决定下一行所进行的操作是加法还是减法。第3章 运算方法与运算器图3-9 4位不恢复余数的阵列除法器第3章 运算方法与运算器【例例3-8】已知x=0.1
35、01001,y=0.111,求xy。解解:在计算机中,减法运算通过加补码实现,因此先求出:-y补=1.001。第3章 运算方法与运算器所以商q=0.101,余数r=0.000110。第3章 运算方法与运算器3.2 逻辑运算和移位操作逻辑运算和移位操作计算机除了能进行加、减、乘、除等基本算术运算以外,还可以对逻辑数进行逻辑运算。逻辑数是指无符号的二进制数。逻辑运算主要指逻辑与、逻辑或、逻辑异或等。第3章 运算方法与运算器3.2.1 逻辑运算逻辑运算设参与逻辑运算的两个数为x和y,x=x0 x1x2xn-1,y=y0y1y2yn-1。可做如下逻辑运算:1逻辑与逻辑与(逻辑乘逻辑乘)记作“”或“”,
36、若z=xy=z0z1z2zn-1,则zi=xiyi,i0,1,2,n-1。2逻辑或逻辑或(逻辑加逻辑加)记作“”或“+”,若z=xy=z0z1z2z n-1,则zi=xiyi,i0,1,2,n-1。3逻辑异或逻辑异或(逻辑异逻辑异)记作“”,若z=xy=z0z1z2zn-1,则zi=xiyi,i0,1,2,n-1。第3章 运算方法与运算器【例例3-9】已知x=01101011B,y=11101001B,分别求xy、xy、xy。解解:第3章 运算方法与运算器3.2.2 移位操作移位操作在定点数的运算中有左移和右移操作,在浮点数的运算中也用到移位操作,可见移位操作的重要性。由于机器字长的限制,当机
37、器数进行左移或右移时,必然会使机器数产生空位和移出,移出的位移到进位标志(而所产生的空位是填“0”、填“1”还是填符号位或原来的进位标志),因此,移位操作分为逻辑移位、算术移位和循环移位,如图3-10所示。第3章 运算方法与运算器图3-10 移位操作示意图第3章 运算方法与运算器3.3 定定点点运运算算器器运算器是CPU的重要组成部分,是专门处理数据的部件,根据所处理数据的不同,运算器可以分为定点运算器和浮点运算器。运算器的核心是算术逻辑单元(ALU),除此之外,还有各类寄存器(通用寄存器、累加器、数据缓冲寄存器、标志寄存器等)、数据多路选择器和数据总线等。第3章 运算方法与运算器3.3.1
38、算术逻辑单元算术逻辑单元1一位算术逻辑单元一位算术逻辑单元已知Xi和Yi是一位二进制数,其算术运算的和Fi=Xi+Yi。从表面上看,Fi只能是算术运算的结果。如果Xi或Yi是Ai、Bi的逻辑函数,例如X=AiBi(Ai+Bi),则当Yi=0时,Fi=Xi+Yi=Xi=AiBi(Ai+Bi),那么Fi便是Ai、Bi逻辑运算的结果。因此,一位算术逻辑单元是在一位加法器的基础上再加一个逻辑函数发生器构成的,如图3-11所示。第3章 运算方法与运算器图3-11 一位算术逻辑单元第3章 运算方法与运算器因此,一位算术逻辑单元的逻辑表达式为Fi=XiYiCn+iCn+i+1=XiYi+YiCn+i+Cn+
39、iXiS0、S1、S2、S3是用来控制逻辑函数发生器的输入Ai和Bi,逻辑函数发生器的输出Xi和Yi分别是受S2S3控制的Ai和Bi的组合函数和受S0S1控制的Ai和Bi的组合函数,其函数关系如表3-5所示。第3章 运算方法与运算器表表3-5 Xi、Yi与控制信号与控制信号(S0、S1、S2、S3)和数和数据输入据输入(Ai、Bi)的关系的关系第3章 运算方法与运算器由表3-5可写出Xi和Yi的逻辑表达式为第3章 运算方法与运算器结合一位全加器FA输出与输入之间的逻辑表达式,可得一位算术逻辑单元的一组逻辑表达式如下:(3-13)第3章 运算方法与运算器24位算术逻辑单元位算术逻辑单元4位算术逻
40、辑单元是由4个一位算术逻辑单元组成,其内部的一位算术逻辑单元之间的进位关系可以是串行进位,也可以是并行进位。图3-12给出了串行进位的4位算术逻辑单元。第3章 运算方法与运算器图3-12 4位ALU第3章 运算方法与运算器先行进位的4位算术逻辑单元(74181ALU)除产生4 位的数据输出(F0F1F2F3)和1位进位输出Cn+4外,又多产生2个输出,一个是G,进位发生输出;另一个是P,进位传递输出。根据式(3-13),74181ALU内部采用先行进位的进位关系如下:第3章 运算方法与运算器第0位向第1位的进位公式为:Cn+1=Y0+X0Cn(Cn是向第0位的进位);第1位向第2位的进位公式为
41、: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)第3章 运算方法与运算器综上所述,用TTL电路实现的4位算术逻辑单元(74181ALU)的逻辑电路如图3-13所示。M为逻辑运算与算术运算的控制信号。当M=1时,封锁了各位的进位输出,进行的是逻辑
42、运算;当M=0时,进行的是算术运算。74181ALU有两种工作方式:一种是采用正逻辑工作方式,另一种是采用负逻辑工作方式。无论哪一种工作方式都是等效的,都有16种逻辑运算和16种算术运算。表3-6列出了正逻辑74181ALU算术/逻辑运算功能表。74181ALU正、负逻辑的引脚图如图3-14所示。第3章 运算方法与运算器图3-13 74181ALU逻辑电路第3章 运算方法与运算器图3-14 74181ALU正、负逻辑的引脚图第3章 运算方法与运算器表表3-6 正逻辑正逻辑74181ALU算术算术/逻辑运算功能表逻辑运算功能表第3章 运算方法与运算器3两级先行进位的两级先行进位的ALU74181
43、ALU为了方便多个74181ALU的连接,特设置了P和G两个先行进位输出端。如果将4个74181ALU的先行进位输出端(P0、G0,P1、G1,P2、G2,P3、G3)送到先行进位部件74182CLA,又可实现第二级的先行进位,即组与组之间的先行进位。按照式(3-14)可得先行进位部件74182CLA的进位逻辑关系如下:第3章 运算方法与运算器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+P3P2P1P0
44、Cn令G*=G3+G2P3+G1P3P2+G0P3P2P1,P*=P3P2P1P0,则Cn+4=G*+P*Cn用TTL电路实现的先行进位部件74182CLA的逻辑电路如图3-15所示。其中,G*称为成组进位发生输出,P*称为成组进位传递输出。第3章 运算方法与运算器图3-15 74182CLA的逻辑电路第3章 运算方法与运算器由此可见,一个先行进位部件74182CLA可以连接4个74181ALU,实现一个16位的组间、组内都是先行进位的ALU,如图3-16所示。第3章 运算方法与运算器图3-16 16位全先行进位的ALU第3章 运算方法与运算器显然,用两个16位全先行进位的ALU进行级联,便可
45、以组成一个32位的ALU。两个16位全先行进位ALU之间的进位采用的是串行进位,如图3-17所示。第3章 运算方法与运算器图3-17 32位全先行进位的ALU第3章 运算方法与运算器3.3.2 定点运算器的基本结构定点运算器的基本结构1单总线结构运算器单总线结构运算器单总线结构运算器的特点是所有部件都连在一组总线上,在同一时间内,只能允许有一个数据放在总线上,参与运算的两个数据无法同时送到ALU,因此在ALU的两个输入端分别设置了A、B两个缓冲器。运算结束时,再通过单总线将结果存于目的寄存器。单总线结构运算器的主要缺点是操作速度慢。单总线结构运算器模型如图3-18所示。第3章 运算方法与运算器
46、图3-18 单总线结构运算器模型第3章 运算方法与运算器2双总线结构运算器双总线结构运算器双总线结构运算器的特点是操作部件连接在两组总线上,可以通过这两组总线同时传输数据,从而保证了在同一时间内将参与运算的两个数据送到ALU并进行运算,但运算结果不能直接送到总线,因为此时的两组总线都被参与运算的两个数据占用着,所以在ALU的输出端设置一个数据缓冲寄存器,运算结果通过缓冲寄存器再送到总线。显然,双总线结构运算器的执行速度比单总线结构运算器的执行速度快。双总线结构运算器如图3-19所示。第3章 运算方法与运算器图3-19 双总线结构运算器模型第3章 运算方法与运算器3三总线结构运算器三总线结构运算
47、器三总线结构运算器的特点是操作部件连接在三组总线上,可以通过这三组总线同时传输数据,不仅保证了在同一时间内将参与运算的两个数据送到ALU并进行运算,还可以将运算结果直接送到总线上。与前两种结构的运算器相比较,三总线结构运算器的执行速度最快,不过其控制也更复杂。在三总线结构运算器中,还设置一个总线旁路器,其目的是:当一组总线上的数据不需要操作时,可以通过总线旁路器将此数据直接送到其它总线上,而不必经过ALU。三总线结构运算器如图3-20所示。第3章 运算方法与运算器图3-20 三总线结构运算器模型第3章 运算方法与运算器3.3.3 定点运算器模型定点运算器模型运算器是由算术逻辑单元(ALU)、寄
48、存器(通用寄存器、累加器、数据缓冲寄存器、标志寄存器等)、数据多路选择器和数据总线等组成的。图3-21给出了定点运算器模型。该模型的核心是ALU,实现对数据的算术运算和逻辑运算;AC是累加器,它实际上也是寄存器,只不过使用得较频繁而已;AC不仅用来存放参与运算的数据,还用来存放ALU运算的结果。在此模型中,所有运算结果都只能存放于AC中;STR为状态寄存器,其内设置有多个状态标志,例如零标志、进位标志、溢出标志、符号标志等,数据在ALU中运算的过程中会对STR中的标志产生影响;DR为数据缓冲积存器,运算器与存储器之间的数据交换必须通过DR,设置DR主要是解决速度匹配问题。第3章 运算方法与运算
49、器图3-21 定点运算器模型第3章 运算方法与运算器3.4 浮点数的算术运算与浮点运算器浮点数的算术运算与浮点运算器3.4.1 浮点数的加减运算浮点数的加减运算设两个浮点数x和y分别为:x=Mx2ex x表示为Ex Mxy=My2ey y表示为Ey My其中,Ex、Ey分别是浮点数x和y的阶码机器数形式,通常采用移码;Mx、My为x和y的尾数机器数形式,通常采用补码。令z=xy,则z=xy=(Mx2ex-eyMy)2ey exey第3章 运算方法与运算器浮点数加减运算步骤如下:(1)0浮点数检查。如果加减运算中的两个浮点数x和y有一个为0,则浮点数的加减运算就没有必要严格按照上述步骤进行,从而
50、节约了运算时间,因此,0浮点数检查是十分必要的。(2)对阶。阶码表示的是小数点的位置,对阶实际上是使小数点对齐。当两个浮点数的阶码不相同时,将阶码小的浮点数的尾数右移E(E=|ex-ey|位,其阶码值增加E,使两个浮点数的阶码值相同,此操作称为对阶。因为浮点数的尾数右移时丢失的是低位数值位,这样造成的浮点数误差较小。(3)尾数加减。对阶完成后,即可进行尾数的加减。不论是加法还是减法,都必须按加法进行运算。第3章 运算方法与运算器(4)结果规格化。尾数的加减运算结果未必满足浮点数的规格化条件,却必须进行左规或右规。下面以变补形式的尾数为例来讨论左规、右规和舍入处理。第3章 运算方法与运算器当尾数