1、2.2 定点加法、减法运算,一、补码的加减法运算1、加法任意两个数的补码之和,等于该两数和的补码。X+Y补= X补+Y补 (mod 2) 两个数不管正负,均用补码表示,符号位应当做数值参加运算,符号位相加所产生的进位要丢掉,结果为补码。,可以证明: X+Y补= X补+Y补 X-Y补= X补+-Y补 -Y补的求法:将Y补连同符号位求反加1。 例: X1001 Y0101,求 X+Y?解: X补=01001Y补=00101X+Y补=X补+Y补=01001+00101 =01110 例: X1001 Y-0101,求 X+Y?解: X补=01001Y补=11011X+Y补=X补+Y补=01001+1
2、1011 =00110,定点运算器 定点加减法,例: X0.1011 Y-0.0101,求 X+Y?解:,X补=0. 1 0 1 1,Y补=1. 1 0 1 1,+,0,1,1,0,10.,丢到,1,X补+Y补=0.0110 X+Y=0.0110,定点运算器 定点加减法,例: X-11001 ,Y-00011,求 X+Y?解:,X补=1 0 0 1 1 1,Y补=1 1 1 1 0 1,+,0,0,1,0,1 1,丢到,1,X补+Y补=100100 X+Y=-11100,0,由以上两例看到,补码加法的特点: 一是符号位要作为数的一部分一起参加运算。 二是要在模2的意义下相加,即超过2的进位要丢
3、掉!,定点运算器定点加减法,补码的减法: X补- Y补=X+(-Y)补=X补+-Y补(-Y)的补码称为Y补的机器负数,由Y补求-Y补的过程称为将Y补“变补”或对Y补求补,由Y补求-Y补的方法是,不管Y的真值为正或为负,都是将Y补的各位连同符号位在内全变反后,最低位加1。,定点运算器 定点加减法,例: X-0.1011 Y-0.0110,求 XY?解:,X补=1. 0 1 0 1,-Y补=0. 0 1 1 0,+,1,1,0,1,1.,XY补1.1011 XY=-0.0101,二、溢出及其判别方法,在计算机中,由于机器码的尾数通常是给定的(如16位字长,32位字长),因此,在计算机中数的表示范围
4、是有限的,若两数进行加减运算的结果超出了给定的取值范围,就称为溢出。一旦出现溢出,必须及时处理,否则会出现错误。,1、溢出,例1:X=1010 Y=1001 求 X+Y,解: X补= 0 1 0 1 0 + Y补= 0 1 0 0 1,1 0 0 1 1,例2:X=-1010 Y=-1011 求 X+Y,解: X补= 1 0 1 1 0 + Y补= 1 0 1 0 1,0 1 0 1 1,较大正数相加产生进位,影响符号位,较大的负数对应 较小的正数补码 相加无进位, 符号位自己相加,2、溢出原因:1)两个正数太大:产生进位而改变了符号位;2)两个负数绝对值太大:对应的补码太小,不 能向符号位产
5、生进位,使符号位相加后,向前产生进位。,1、两异号数相加或两同号数相减是否会产生溢出? 2、仅当两同号数相加或两异号数相减时才有可能产生溢出?,问题:,决不会产生溢出,正确,例: X-0.100 Y-0.101,求 X+Y?解:,X补=1. 1 0 0,Y补=1. 0 1 1,+,1,1,1,10.,丢到,1,两负数相加,结果应为负数,但运算结果为正数,表明有溢出发生。数据向前无进位,符号位向前有进位,3、溢出的判断,1)采用单符号位的判断方法,例: X100 ,Y-11,求 X-Y?解:,X补=0 1 0 0,-Y补=0 1 1 0,+,0,1,1,一个正数减去一个负数,结果为正数,但计算结
6、果为负数,表明有溢出发生,出错 数据向前有进位,符号位向前无进位,0,溢出逻辑表达式为:V=Cf C0(其中Cf为符号位产生的进位, C0为最高有效位产生的进位),溢出的原因:之所以发生错误,是因为运算结果产生了溢出。两个正数相加,结果大于机器所能表示的最大正数,称为上溢。而两个负数相加,结果小于机器所能表示的最小负数,称为下溢。为了判断“溢出”是否发生,可采用两种检测的方法。第一种方法是采用双符号位法,这称为“变形补码”或“模4补码”。从而可使模2补码所能表示的数的范围扩大一倍。,定点运算器 定点加减法,采用双符号位的判断方法每个操作数的补码符号用两个二进制数表示,称为交形补码,用“00”表
7、示正数,“11”表示负数,左边第一位叫第一符号位,右边第一位称为第二符号位,两个符号位同时参加运算,如果运算结果两符号位相同,则没有溢出发生。如果运算结果两符号位不同,则表明产生了溢出。“10”表示负溢出(下溢出),说明运算结果为负数,“01”表示正溢出(下溢出),说明运算结果为正数。,定点运算器 定点加减法,采用双符号位的判断方法,定点运算器 定点加减法,利用进位值的判断方法两补码数进行加减运算时,若最高数值位产生向符号的进位而符号位不产生进位时,发生正溢出,若最高数值位无进位而符号位有进位时,发生负溢出 。,例: X+0.1100 Y+0.1000,求 X+Y?解:,X补=00. 1100
8、,Y补=00. 1000,+,01.0100,正数太大了,向前有进位,而符号位向前无进位;两个符号位:01,表示溢出,例: X-0.1100 Y-0.1000,求 X+Y?解:,X补=11. 0100,Y补=11. 1000,+,10.1100,负数绝对值太大了对应的补码小,向前无进位,而符号位向前有进位;两个符号位:10,表示溢出,溢出逻辑表达式为:V=Sf1 Sf2(其中Sf1为最高符号位,Sf2为第二符号位),由此可以得出如下结论: 1. 当以模4补码运算,运算结果的二符号位相异时,表示溢出;相同时,表示未溢出。 2. 模4补码相加的结果,不论溢出与否,最高符号位始终指示正确的符号。,三
9、、基本的加法/减法器,1、一位全加器,FA,Ai,Bi,Ci,Ci+1,Si,向高位进位,本位输出结果,表2.2 一位全加器真值表,两个输出端的逻辑表达式: SiAiBiCi Ci1AiBiBiCiCiAi,SiAiBiCi Ci1AiBiBiCiCiAi 按此表达式组成的一位全加器示图: Ci+1=(Ai Bi)Ci AiBi,n个1位的全加器(FA)可级联成一个n位的行波进位加减器。M为方式控制输入线, 当M0时,作加法(AB)运算;当M1时,作减法(AB)运算,在后一种情况下,AB运算转化成A补B补运算,求补过程由B1来实现。,单符号位判溢出 双符号正溢出0.1001 00.1001+
10、0.1100 00.11001.0101 10.0101负溢出1.0111 11.0111+ 1.0011 + 11.001110.1010 10.1010,补码加减法的逻辑实现,图示:n个1位全加器组成。单符号位判溢出。V=c0 c1双符号位判溢出。V=Sf1 Sf2,y0,y1,V,=1,cn=0 做加法c0=1 做减法(求反加1),定点运算器定点乘法,定点原码一位乘法 设被乘数X原=XfXn-1Xn-2X1X0乘 数Y原=YfYn-1Yn-2Y1Y0乘 积X原=ZfZ2n-1Z2n-2Z1Z0运算原则:同号相乘为正,异号相乘为负,符号可按:异或运算得到,数值部分的运算方法与普通的十进制乘
11、数相类似 。,定点运算器定点乘法,手工算法,0. 1 1 0 1,0. 1 0 1 1,1 1 0 1,1 1 0 1,0 0 0 0,1 1 0 1,+,1 0 0 0 1 1 1 1,0.,l 两个n位数相乘,其积为2n位,则需要2n位长的加法器,这不适用于定点机的形式。,l 机器一次只能进行两个数的相加,不能进行多个数据的加法。,l 手工计算中,乘数的每一位是0还是1都可直接看见,而在计算机中,采用放乘数的寄存器的每一位直接决定本次相加数是被乘数还是0是很不方便的,若采用该寄存器的最低一位来执行这种判断就简便了。,定点运算器定点乘法,运算法则:计算机中执行乘法时,积的符号位由被乘数和乘数
12、的符号位通过一个半加器实现。数值部分的运算规则是:从最低位Y0开始,当乘数Yi为1时,将上次部分积加上被乘数的绝对值,然后右移一位,得到新的部分积;当Yi为0时,则写下全0。然后再对乘数Y的高一位进行类似乘法运算。重复“加右移”操作N次,可得到最后的乘积。,定点运算器定点乘法,例:X=0.1101,Y=0.1011, 求X*Y=?解: |X|=00.1101 |Y|=00.1011部分积 乘数 说明,定点运算器定点乘法,结果:计算:X=-0.1101 Y=0.0110,用原码阵列乘法器求X*Y?,X*Y=0.10001111,X*Y=1. 01001110,定点运算器定点乘法,原码一位乘法的逻
13、辑电路图,存放部分积,存放被乘数,存放乘数。 一、 R0清零,R2存放被乘数,R1存放乘数。乘法开始时,“启动”信号时控制置,于是开启时序脉冲,当乘数寄存其最末位为“时,部分积和被乘数在加法器中相加,其结果输出至的输入端。一旦控制脉冲到来,控制信号使部分积右移位,与此同时,乘数寄存其也在控制型号作用下右移一位,且计数器记数一次, 二、 将步骤三重复执行N次 三、 当计数器n时,计数器的溢出信号使控制触法器置,关闭时序脉冲,乘法宣告结束。,定点运算器定点乘法,原码算法存在的缺点:一是符号位需要单独运算,最后给运算结构以正确的符号;二是对于采用补码存储的机器,从存储器中取出的是操作数的补码,需先将
14、其转换成原码,这样很不方便,而且影响速度。,定点运算器定点乘法,定点一位补码乘法:补码乘法的特点是乘数、被乘数用补码表示,符号位参加运算,希望得到的结果就是乘积的补码,符号位在运算中形成。,定点运算器定点乘法,X*Y补=X补*Y=X补-YS+Y12-1+Y2*2-2+Yn2-n=X补-YS+(Y1-Y12-1)+(Y22-1-Y22-2)+(YN2-(n-1)-Yn2-n)=X补(Y1-YS)+(Y2-Y1)2-1+(Yn-Yn-1)2-(n-1)+(0-Yn)2-n=X补(Y1-YS)+2-1(X补(Y2-Y1)+2-1(X补(Y3-Y2)+2-1(X补 (Yn-Y n-1)+2-1(X补(
15、Y n+1-Yn)(Y n+1=0),定点运算器-定点乘法,递推公式为: P0补=0 P1补= 2-1(P0补+(Y n+1-Yn) X补) P2补= 2-1(P1补+(Y n-Yn-1) X补) Pi补= 2-1(Pi-1补+(Y n-i+2-Yn-i+1) X补) Pn补= 2-1(Pn-1补+(Y 2-Y1) X补) Pn+1补= Pn补+(Y 1-Ys) X补=X*Y补,在乘数的最低位之后,增加一位补充位。 从低位到高位,依次判断相邻的两位乘数的状态,根据比较结果决定本次的操作,见下表,第二步操作循环执行n1次。但最后一步不移位,包括一位符号位,所得乘积为2n1位,其中n为尾数位数。,
16、算法:,定点运算器定点乘法,例:X补=0.1101,Y补=0.1011,求X*Y=? 解: 部分积 乘数 说明,0 0 . 0 0 0 0,0. 1 0 1 1 0,Y n+1=0,1 1 . 0 0 1 1,YnY n+1=10, 加-X补,+,1 1 . 0 0 1 1,1 1 . 1 0 0 1,1 0 1 0 1 1,右移一位,+,0 0 . 0 0 0 0,YnY n+1=11, 加0,1 1 . 1 0 0 1,1 1 . 1 1 0 0,1 1 0 1 0 1,右移一位,+,0 0 . 1 1 0 1,YnY n+1=01, 加X补,0 0 . 1 0 0 1,0 0 . 0 1
17、 0 0,1 1 1 0 1 0,右移一位,+,1 1 . 0 0 1 1,1 1 . 0 1 1 1,YnY n+1=10, 加-X补,1 1 . 1 0 1 1,1 1 1 1 0 1,右移一位,0 0 . 1 1 0 1,+,YnY n+1=01, 加X补,0 0 . 1 0 0 0,1 1 1 1 0 1,最后一次不移位,定点运算器定点乘法,结果:X=-0.1101,Y=0.1011,求(X*Y)补=?,X*Y补=0.10001111,X*Y补=1. 01110001,补码一位乘法的逻辑实现,被乘数的符号和乘数的符号都参加运算。乘数寄存器有附加位,其初始状态为“”。当乘数和部分积每次右
18、移时,部分积最低位移至的首位位置,故必须是具有右移功能的寄存器。被乘数寄存器的每一位用原码或反码经多路开关传送到加法器对应位的一个输入端,而开关的控制信号由的输出译码器产生。当0时,送补;当时,送补,即送的反码且在加法器最末位加上“”。保存部分积,它也是具有右移功能的移位寄存器,其符号位与加法器符号位始终一致。当计数器时,封锁和控制信号,使最后一步不移位。,定点运算器定点除法,定点原码一位除法在定点计算机中,完成两个原码表示的数相除时,商的符号由两数的符号位和原码乘法运算方法一样,用模2求和得到,而商的数值部分则是两个正数相除得到。设被除数 X原=Xf.X1X2Xn除 数 Y原=Yf.Y1Y2
19、Yn则商 Q原=(Xf + Yf).(X1X2Xn/Y1Y2Yn),定点运算器定点除法,计算机中执行除法时,商的符号位由被除数和除数的符号位通过一个半加器实现;对于数值部分,由于定点小数的绝对值小于1,如果被除数大于或等于除数,则商就大于或等于1,因而会产生溢出,这是不允许的。因此在执行除法以前,先要判别是否溢出,不溢出时才执行除法运算。判别溢出的方法是被除数减去除数,若差为正,就表示溢出。,定点运算器定点除法,手工计算除法的方法: 设被除数为X=0.1001,Y=0.1011,求X/Y=?,定点运算器定点除法,0.1 1 0 1 1101 1 0 1 1 01 1 0 11 0 0 1 01
20、 1 0 11 0 1 0 01 1 0 1 0 1 1 1,X/Y=0.1101 余数=0.0111*2-4,恢复余数法,恢复余数法的运算规则:计算机中进行除法时,是模仿十进制除法笔算的过程,但又不能完全照搬。在机器中判断是否够减,必须先做减法,若余数为正,表示够减;若余数为负,表示不够减 ,不够减时,必须恢复原来的余数,以便再继续往下运算,这种方法称为恢复余数法。要恢复原来的余数,只要当前的余数加上除数即可。,定点运算器定点除法,例:X=0.1001 , Y=0.1011, 用恢复余数法求X/Y=? 解: X原=X补=0.1001Y补=0.1011-Y补=1.0101,解: 被除数/余数
21、商数 q 说明,定点运算器定点除法,Q原=0.1101 R原=0.0001,R=2-4*0.0001,结果:,定点运算器定点除法,恢复余数法的缺点:当某一次-Y的差值为负时,要多一次+Y恢复余数的操作,降低了执行速度,又使控制线路变得复杂,因此在计算机中很少采用。,定点运算器定点除法,在恢复余数除法中,若第i-1次求商的余数为+Ri-1时,下一次求商用的方法是Ri=2Ri-1-Y当Ri0时,第i位的商上0,而恢复余数的操作结果应为 Ri+Y,下一次,即第i+1次求商的减法操作是Ri+1=2(Ri +Y)-Y=2 Ri +Y上述公式表明,当某一次求商,其减得的差值为负,即Ri 0时,本次上商为0
22、,继续求下一位商时,可以不必恢复余数,而是直接将负的差值左移一位后(得2 Ri ),再采用加上除数的方法来完成。,定点运算器定点除法,加减交替法的规则:首先作X-Y,余数为正,表明产生溢出,应终止除法运算;余数为负,上商为0(作为商的符号位),然后重复下述操作n次,可得商的n位数值 a. 余数左移一位。 b. 余数为正时,减除数;余数为负时,加除数。 c. 所得的新余数为正时,上商为1;为负时,上商为0。由于运算中余数共左移了n次,相当于乘2n,故最后得余数应乘上2-n才是真正的正确余数。,定点运算器定点除法,例:X=0.1001,Y=0.1011,求X/Y 解:X补=0.1001Y补=0.1
23、011-Y补=1.0101,解: X原=X补=X=0.1001,Y补=0.1011,-Y补=1.0101 被除数X/余数r 商数q 说明,+-Y补,Q=0.1101 R=2-4*0.0001,结果:,定点运算器定点除法,寄存器为 n位,是双向移位寄存器,R0为双向移位寄存器。除法开始前R1可存放被除数的低n位,R0保存被除数或者余数。在进商左移的过程中,被除数(余数)的低位部分由串行移至。每次进商置于R1的最末位,由加法器符号位f来设置,运算结束后R1存放n位的商,R0中存放余数。,补码一位除法 : 符号位参加运算,除数与被除数均用双符号补码表示。 被除数与除数同号,被除数减除数。被除数与除数
24、异号,被除数加上除数。商符号位的取值见III 。 余数与除数同号,商上1,余数左移1位减去除数;余数与除数异号,商上0,余数左移1位加上除数。 采用校正法包括符号位在内,应重复III n+1次。,补码一位除法的流程图,商的校正原则 当刚好能除尽时(即运算过程中任一步余数为0),如果除数为正,则商不必校正;若除数为负,则商需要校正,即加2-n进行修正。 不能除尽时,如果商为正,则不必校正;若商为负,则商需要加2-n进行修正。,余数的校正原则 若商为正,当余数与被除数异号时,则应将余数加上除数进行修正才能获得正确的余数。 若商为负,当余数与被除数异号时,则余数需减去除数进行校正。,定点运算器定点除
25、法,例:X=0.1001,Y=0.1011,求X/Y补 解:X补=0.1001Y补=0.1011-Y补=1.0101,定点运算器定点除法,解:X补=0.1001,Y补=0.1011,-Y补=1.0101被除数/余数 商数 说明,定点运算器定点除法,例:X=0.100,Y=-0.101,求X/Y补 解:X补=0.100Y补=11.011-Y补=00. 101,定点运算器定点除法,解:X补=0.100,Y补=11. 011,-Y补=00.101 (用双符号表示)被除数/余数 商数 说明,定点运算器定点除法,Q补=1. 010 R补=0.010*2-3,结果: 不能除尽,商为负,需校正(x/y)补=
26、1.001+0.001=1.010 余数与被除数异号,需校正:余数r补=(1.101+0.101)* 2-3=0.010 * 2-3,定点运算器定点除法,例:X=0.1001,Y=-0.1001,求X/Y补 解:X补=0.1001Y补=11. 0111-Y补=00. 1001,定点运算器定点除法,解:X补=0.1001,Y补=11. 0111,-Y补=00. 1001 (用双符号表示)被除数/余数 商数 说明,定点运算器定点除法,Q补=1. 0000 R补=0.0000*2-4,结果: 中间由一步余数为零表示能除尽,除数为负,需校正:(x/y)补=1.1111+0.0001=1.0000 余数与被除数异号,需校正: 余数r补=(1.1111+0.0001)* 2-4=0.0000 * 2-4,