1、第五章 计算机中的算术运算,学时:12学时 重点:掌握定点数的四则运算和浮点数的加减运算,定点数的运算 加减运算 乘法运算 原码一位乘法 补码一位乘法 除法运算 原码一位除法 补码一位除法 定点运算器的组成 浮点数的运算 浮点运算器的组成,主要内容,补码的加法运算任意两个数的补码之和,等于该两数和的补码。X补+Y补=X+Y补两个数不管正负,均用补码表示,符号位应当做数值参加运算,符号位相加所产生的进位要丢掉,结果为补码。,定点运算器定点加减法,例: X0.1011 Y-0.0101,求 X+Y?解:,定点运算器 定点加减法,X补=0. 1 0 1 1,Y补=1. 1 0 1 1,+,0,1,1
2、,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,补码的减法: X补- Y补=X+(-Y)补=X补+-Y补(-Y)的补码称为Y补的机器负数,由Y补求-Y补的过程称为将Y补“变补”或对Y补求补,由Y补求-Y补的方法是,不管Y的真值为正或为负,都是将Y补的各位连同符号位在内全变反后,最低位加1。,定点运算器定点加减法,例: X-0.1011 Y-0
3、.0110,求 XY?解:,定点运算器 定点加减法,X补=1. 0 1 0 1,-Y补=0. 0 1 1 0,+,1,1,0,1,1.,11,XY补1.1011 XY=-0.0101,溢出及其判别方法:在计算机中,由于机器码的尾数通常是给定的(如16位字长,32位字长),因此,在计算机中数的表示范围是有限的,若两数进行加减运算的结果超出了给定的取值范围,就称为溢出。一旦出现溢出,必须及时处理,否则会出现错误。,定点运算器定点加减法,采用单符号位的判断方法两异号数相加或两同号数相减决不会产生溢出,仅当两同号数相加或两异号数相减时才有可能产生溢出。两同号数相加时,如果结果的符号与参与运算的操作数符
4、号相反,则表明有溢出;两异号数相减时,如果结果的符号与被减数的符号相反,则表明有溢出。,定点运算器定点加减法,例: X-0.100 Y-0.101,求 X+Y?解:,定点运算器 定点加减法,X补=1. 1 0 0,Y补=1. 0 1 1,+,1,1,1,10.,丢到,1,两负数相加,结果应为负数,但运算结果为正数,表明有溢出发生,例: X100 ,Y-11,求 X-Y?解:,定点运算器 定点加减法,X补=0 1 0 0,-Y补=0 1 1 0,+,0,1,1,一个正数减去一个负数,结果为正数,但计算结果为负数,表明有溢出发生,出错,0,采用双符号位的判断方法每个操作数的补码符号用两个二进制数表
5、示,称为变形补码,用“00”表示正数,“11”表示负数,左边第一位叫第一符号位,右边第一位称为第二符号位,两个符号位同时参加运算,如果运算结果两符号位相同,则没有溢出发生。如果运算结果两符号位不同,则表明产生了溢出。“10”表示负溢出,说明运算结果为负数,“01”表示正溢出,说明运算结果为正数。,定点运算器 定点加减法,利用进位值的判断方法两补码数进行加减运算时,若最高数值位产生向符号的进位而符号位不产生进位时,发生正溢出,若最高数值位无进位而符号位有进位时,发生负溢出 。所谓正溢出,即超出机器所能表示的最大正数。所谓负溢出,即超出机器所能表示的最小负数。,定点运算器 定点加减法,定点加减法的
6、逻辑实现,定点运算器 定点加减法,FS F 加法器,XS X 0 1 寄存器,YS Y 0 1 寄存器,1F,YF,YF,XF,FX,A,C,B,定点加减法的逻辑实现,定点运算器 定点加减法,X补+Y补=F,X补,Y补,1F,YF,YF,XF,FX,A,C,B,定点原码一位乘法(Unsigned Binary Multiplication) 设被乘数X原=XfXn-1Xn-2X1X0乘 数Y原=YfYn-1Yn-2Y1Y0乘 积Z原=ZfZ2n-1Z2n-2Z1Z0运算原则:同号相乘为正,异号相乘为负,符号可按:异或运算得到,数值部分的运算方法与普通的十进制乘数相类似 。,定点运算器定点乘法,
7、手工算法,定点运算器定点乘法,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是很不方便的,若采用该寄存器的最低一位来执行这种判断就简便了。,运算法则:计算机中执行乘法时,积的符号位由被乘数和乘数的符号位通过一个半加器实现,数
8、值部分的运算规则是:从最低位Y0开始,当乘数Yi为1时,将上次部分积加上被乘数的绝对值,然后右移一位,得到新的部分积;当Yi为0时,将部分直接右移一位,得到新的部分积。重复“加右移”操作N次,可得到最后的乘积。,定点运算器定点乘法,例:X=0.1101,Y=0.1011, 求X*Y=?解: 部分积 乘数 说明,定点运算器定点乘法,0 0. 0 0 0 0,0 0. 1 1 0 1,+,Yf 1 0 1 1,0 0. 1 1 0 1,0 0. 0 1 1 0,0 0. 1 1 0 1,+,0 1. 0 0 1 1,0 0. 1 0 0 1,0 0. 0 0 0 0,+,0 0. 1 0 0 1,
9、0 0. 0 1 0 0,0 0. 1 1 0 1,0 1. 0 0 0 1,0 0. 1 0 0 0,+,1 Yf 1 0 1,1 1 Yf 1 0,1 1 1 Yf 1,1 1 1 1 Yf,Z0=0,Y0=1, +X,Y1=1, +X,Y2=0, +0,Y3=1, +X,右移,得Z1,右移,得Z2,右移,得Z3,右移,得Z4=X*Y,结果:,定点运算器定点乘法,Zf=Xf+Yf=0+0=0 Z原=0 . 10001111 X*Y=0.10001111,原码一位乘法的逻辑电路图,定点运算器定点乘法,存放部分积,存放被乘数,存放乘数。 一、 R0清零,R2存放被乘数,R1存放乘数。乘法开始时
10、,“启动”信号时控制置,于是开启时序脉冲,当乘数寄存其最末位为“时,部分积和被乘数在加法器中相加,其结果输出至的输入端。一旦打入控制脉冲到来,控制信号使部分积右移位,与此同时,乘数寄存其也在控制型号作用下右移一位,且计数器记数一次, 二、 将步骤三重复执行N次 三、 当计数器n时,计数器的溢出信号使控制触法器置,关闭时序脉冲,乘法宣告结束。,定点运算器定点乘法,x n-1 . x0,N-Bit Adder,Shift and Add Control Logic,Multiplicand,Add,Shift Right,Multiplier,C,Block Diagram,Partial Pro
11、ducts,原码算法存在的缺点:一是符号位需要单独运算,最后给运算结果以正确的符号;二是对于采用补码存储的机器,从存储器中取出的是操作数的补码,需先将其转换成原码,最后还要将结果转换为补码存放到机器中,这样做很不方便,而且影响速度。,定点运算器定点乘法,定点一位补码乘法:补码乘法的特点是乘数、被乘数用补码表示,符号位参加运算 ,希望得到的结果就是乘积的补码,符号位在运算中形成。但是与补码加减法不同,两数的补码如果直接相乘,结果不是乘积的补码。设被乘数X补0.123和乘数补0.12均为任意符号,则有补码乘法算式,这就是有名的布斯公式(Booths Algorithm)。,定点运算器定点乘法,X*
12、Y补=X补*Y=X补-Y0+Y12-1+Y2*2-2+Yn2-n=X补-Y0+(Y1-Y12-1)+(Y22-1-Y22-2)+(YN2-(n-1)-Yn2-n)=X补(Y1-Y0)+(Y2-Y1)2-1+(Yn-Yn-1)2-(n-1)+(0-Yn)2-n=X补(Y1-Y0)+2-1(X补(Y2-Y1)+2-1(X补(Y3-Y2)+2-1(X补 (Yn-Y n-1)+2-1(X补(Y n+1-Yn) (Y n+1=0)= X补 (Yi+1-Yi)2-i (Y n+1=0),定点运算器定点乘法,递推公式为: P0补=0 P1补= 2-1(P0补+(Y n+1-Yn) X补) P2补= 2-1(
13、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-Y0) X补=X*Y补,定点运算器-定点乘法,算法: 在乘数的最低位之后,增加一位补充位,初始值为0。 从低位到高位,依次判断相邻的两位乘数的状态,根据比较结果决定本次的操作,见下表,定点运算器-定点乘法,第二步操作循环执行n次。但最后一步不移位,包括一位符号位,所得乘积为位,其中为尾数位数。,例:X补=0.1101,Y补=0.1011,求X*Y=? 解: 部分积 乘数 说明,定点运算器定点乘法,0
14、 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 0 0,1 1 1 0 1 0,右移一位,+,1 1 . 0 0 1 1,1 1 . 0 1 1 1,YnY
15、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*Y补=0.10001111,定点运算器定点乘法, 被乘数的符号和乘数的符号都参加运算。 乘数寄存器有附加位,其初始状态为“”。当乘数和部分积每次右移时,部分积最低为移至的首位位置,故必须是具有右移功能的寄存器。 被乘数寄存器的每一位用原码或反码经多路开关传送到加法器对应位的一个输入端,而开关的控制信号由的输出译码器产生。当0时,送补;当时,送补,
16、即送的反码且在加法器最末位加上“”。 保存部分积,它也是具有右移功能的移位寄存器,其符号位与加法器符号位始终一致。 当计数器时,封锁和控制信号,使最后一步不移位。,原码两位乘法 两位乘法即从乘数的最低位开始每次取两位乘数与被乘数相乘得到一次部分积。 Yi-1yi=00,相当于0x,部分积加0,右移两位 Yi-1yi=01,相当于1x,部分积加|x|,右移两位 Yi-1yi=10,相当于2x,部分积加2|x|,右移两位 Yi-1yi=11,相当于3x,部分积加3|x|,右移两位,定点运算器定点乘法,定点运算器定点乘法,说明: 同原处理码一位乘法一样, 数值部分和符号部分分别处理 部分积和被乘数采
17、用三个符号位。 减|x|的操作是通过加|x|补来实现的。 当乘数为偶数位n时, 乘数的符号位设置两位00, 以便最后一步能处理前面可能留下的欠帐。此时, 需做n/2次移位,最多做n/(2+1)次加法。当乘数为奇数位n时, 乘数的符号位设置一位0, 此时, 需做(n1)/2次移位,最多做(n1)/2次加法。,定点运算器定点乘法,例:已知x0.100111,y0.101110,求xy? 解:x原1.100111, y原0.101110 |x|=0.100111,|x|补=0.10111, ,-|x|补=1.011001,定点运算器定点乘法,定点运算器定点乘法,部分积 乘数 说明000.000000
18、 001011100 初始状态 + 001.001110 yn-1ynCj=100, 部分积2|x|001.001110 001011100000.010011 100010110 部分积,乘数右移两位,0Cj + 111.011001 yn-1ynCj=110, 部分积|x|111.101100 100010110111.111011 001000101 部分积,乘数右移两位,1Cj + 111.011001 yn-1ynCj=101, 部分积|x|111.010100 001000101111.111011 000010001 部分积,乘数右移两位,1Cj + 000.100111 yn-
19、1ynCj=001, 部分积|x| 000.011100 000010001,x*y原1.011100000010 X*y=0.011100000010,定点运算器定点乘法,定点运算器定点乘法,补码两位乘,例:x补0.0101,y补=1.0101,求x*y补 解: x补1.1011,定点运算器定点乘法,部分积 乘数 说明000.0000 1101010 初始状态 + 000.0101 yn-1ynyn+1=010, 部分积x补000.0101 1101010000.0001 0111010 部分积、乘数右移两位 + 000.0101 yn-1ynyn+1=010, 部分积x补000.0110
20、0111010000.0001 1001110 部分积、乘数右移两位 + 111.1011 yn-1ynyn+1=110, 部分积x补111.1100 1001110 x*y补=1.11001001,x*y=-0.00110111,定点运算器定点乘法,硬件乘法器的常规设计是采用“串行移位”和“并行加法”相结合的方法,但是速度太慢,执行一次乘法的运算时间是执行一次加法时间的N倍。目前常用的是流水线式阵列乘法器。,定点运算器定点乘法,请同学们自学阵列式乘法器的工作原理!(P38-44),定点原码一位除法在定点计算机中,完成两个原码表示的数相除时,商的符号由两数的符号位按位相加得到,而商的数值部分则
21、是两个正数相除得到。设被除数 X原=Xf.X1X2Xn除 数 Y原=Yf.Y1Y2Yn则商 Q原=(Xf+Yf).(X1X2Xn/Y1Y2Yn),定点运算器定点除法,计算机中执行除法时,商的符号位由被除数和除数的符号位通过一个半加器实现,对于数值部分,由于定点数的绝对值小于1,如果被除数大于或等于除数,则商就大于或等于1,因而会产生溢出,这是不允许的。因此在执行除法以前,先要判别是否溢出,不溢出时才执行除法运算。判别溢出的方法是被除数减去除数,若差为正,就表示溢出。,定点运算器定点除法,手工计算除法的方法: 设被除数为X=0.1001,Y=0.1011,求X/Y=?,定点运算器定点除法,0.1
22、 1 0 1 1101 1 0 1 1 01 1 0 11 0 0 1 01 1 0 11 0 1 0 01 1 0 10 1 1 1,定点运算器定点除法,X/Y=0.1101 余数=0.0111*2-4,恢复余数法的运算规则:计算机中进行除法时,是模仿十进制除法笔算的过程,但又不能完全照搬。在机器中判断是否够减,必须先做减法,若余数为正,表示够减;若余数为负,表示不够减 ,不够减时,必须恢复原来的余数,以便再继续往下运算,这种方法称为恢复余数法。要恢复原来的余数,只要当前的余数加上除数即可。,定点运算器定点除法,例:X=0.1001 , Y=0.1011, 用恢复余数法求X/Y=? 解: X
23、原=X补=0.1001Y补=0.1011-Y补=1.0101,定点运算器定点除法,解: 被除数/余数 商数 说明,定点运算器定点除法,0 0 . 1 0 0 1,1 1 . 0 1 0 1,1 1 . 1 1 1 0,0 0 . 1 0 1 0,0 0 . 1 0 0 1,0 0 . 0 1 1 1,0 1 . 0 0 1 0,1 1 . 0 1 0 1,0 0 . 1 1 1 0,1 1 . 0 1 0 1,0 0 . 0 0 1 1,0 0 . 0 1 1 0,1 1 . 0 1 0 1,1 1 . 1 0 1 1,0 0 . 1 0 1 0,0 0 . 0 1 1 0,0 0 . 1 1
24、 0 0,1 1 . 0 1 0 1,0 0 . 0 0 0 1,0 0 . 0 0 0 1,+-Y补,+Y补,+-Y补,+-Y补,+-Y补,+Y补,+-Y补,0,0.1,0.11,0.110,0.1101,X减Y,余数r00,商“0”,恢复余数,r0,商0移入q,r0 左移,减Y,余数r10,商“1”,商1移入q,r1 左移,减Y,余数r40,商“1”,商1移入q,r2左移,减Y,余数r30,商“0”,恢复余数,r3=2r2,商0移入q,r3 左移,减Y,商1移入q,r4不左移,余数r20,商“1”,Q原=0.1101 R原=0.0001,R=2-4*0.0001,定点运算器定点除法,结果:
25、,恢复余数法的缺点:当某一次-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,继续求下一位商时,可以不必恢复余数,而是直接将负的差值左移一位后(得2 Ri ),再采用加上除数的方法来完成,即判2 Ri +
26、Y运算的结果为正还是为负。,定点运算器定点除法,加减交替法得规则:首先作X-Y,余数为正,表明产生溢出,应终止除法运算;余数为负,上商为0(作为商的符号位),然后重复下述操作n次,可得商的n位数值 a. 余数左移一位。 b. 余数为正时,减除数;余数为负时,加除数。 c. 所得的新余数为正时,上商为1;为负时,上商为0。由于运算中余数共左移了n次,相当于乘2n,故最后得余数应乘上2-n才是真正的正确余数。,定点运算器定点除法,解: X原=X补=X=0.1001,Y补=0.1011,-Y补=1.0101 被除数X/余数r 商数q 说明,定点运算器定点除法,0 0 . 1 0 0 1,1 1 .
27、0 1 0 1,1 1 . 1 1 1 0,1 1 . 1 1 0 0,0 0 . 1 0 1 1,0 0 . 0 1 1 1,0 0 . 1 1 1 0,1 1 . 0 1 0 1,0 0 . 0 0 1 1,0 0 . 0 1 1 0,1 1 . 0 1 0 1,1 1 . 1 0 1 1,1 1 . 0 1 1 0,0 0 . 1 0 1 1,0 0 . 0 0 0 1,+-Y补,+Y补,+-Y补,+-Y补,+Y补,0,0.1,0.11,0.110,0.1101,X减Y,余数r0为负,余数r1为正,余数r2为正,余数r3为负,余数r4为正,商0,r和q左移一位,商1,r和q左移一位,商1
28、,r和q左移一位,商0,r和q左移一位,加Y,减Y,减Y,加Y,商1,仅q左移一位,Q=0.1101 R=2-4*0.0001,定点运算器定点除法,结果:,定点运算器定点除法,寄存器为 n位,是双向移位寄存器,R0为双向移位寄存器。除法开始前R1可存放被除数的低n位,R0保存被除数或者余数。在进商左移的过程中,被除数(余数)的低位部分由串行移至。经n步后,求得n位商。每次进商置于R1的最末位,由加法器符号位f来设置,运算结束后R1存放n位的商,R0中存放余数。,补码不恢复余数法 两数符号任意时比较大小的方法 当两数同号时,应做减法,此时, 若得到的余数与除数同号, 表示“够减”,否则表示“不够
29、减” 当两数异号时, 应做加法,此时, 若得到的余数与除数异号,表示“够减”, 否则表示“不够减”,定点运算器定点除法,上商的规则 如果被除数与除数同号, 商为正, 则够减时商1, 不够减时商0 如果被除数与除数异号, 商为负,则够减时商0, 不够减时商1,定点运算器定点除法,商符的确定 商符是在求商值的过程中自动形成的。,定点运算器定点除法,新余数的确定 当被除数和除数同号时,比较它们的大小做减法。如果所得的余数与除数同号表示“够减”, 将余数左移一位,继续做减法;如果所得的余数异号表示“不够减”, 将余数左移一位, 做加法。 当被除数和除数异号时,余数和除数异号时表示“够减”,左移一位,
30、做加法;如果余数和除数同号,做减法;,定点运算器定点除法,总的算法: 参加运算的数用补码表示 符号位参加运算 被除数与除数同号,做被除数减除数的运算;被除数与除数异号, 做被除数加除数的运算 如果余数与除数同号, 商1,左移一位, 减除数;如果余数与除数异号, 商0, 左移一位, 加除数。 重复上步n次,末位恒置1,定点运算器定点除法,补码一位除法 : 如果被除数与除数同号,求商时,用被除数减去除数,若二数异号,则用被除数加上除数的办法处理。 若余数与除数同号,上商1,左移一位后下次作余数减除数操作,若余数与除数异号,上商0,左移一位后下次作余数加除数操作。 商的符号,是在第一次试算时求出的,
31、若定点除不溢出,得到的就是正确的符号位的值。 商的修正问题,在对精度要求不高时,将商的最低一位恒置1。此时最大误差为2-n。若对商的精度要求较高,可对n位数求商n+1次,按得到的不同结果对商进行修正。当商为负时,要在商的最低一位加1.,定点运算器定点除法,定点运算器定点除法,补码一位除法的流程图,例: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被除数/余数 商数 说明,定点运算器定点除法,0 0 . 1 0 0 1,1 1 . 0 1 0 1,1
32、 1 . 1 1 1 0,1 1 . 1 1 0 0,0 0 . 1 0 1 1,0 0 . 0 1 1 1,0 0 . 1 1 1 0,1 1 . 0 1 0 1,0 0 . 0 0 1 1,0 0 . 0 1 1 0,1 1 . 0 1 0 1,1 1 . 1 0 1 1,1 1 . 0 1 1 0,0 0 . 1 0 1 1,0 0 . 0 0 0 1,0 0 . 0 0 0 1,+-Y补,+Y补,+-Y补,+-Y补,+Y补,1,10,101,1011,10110,0.1101,X补和Y补同号,q0=1,减除数,加除数,减除数,减除数,加除数,余数和除数异号,余数和除数同号,余数和除数同
33、号,余数和除数异号,余数和除数同号,左移1位,商1,左移1位,商1,左移1位,商0,左移1位,商0,左移1位,商0,Q补=0.1101 R补=0.0001*2-4,定点运算器定点除法,结果:,运算器主要由算术逻辑部件,通用寄存器和状态寄存器组成。算术逻辑部件ALU (Arithmetic and Logic Unit):主要完成对二进制信息的定点运算,如:加、减、乘、除、与、或、非、异或、逻辑移位、算术移位等。通用寄存器:主要用来保存参加运算的操作数和运算的结果。状态寄存器:用来记录算术、逻辑运算或测试操作的状态结果。一般有零标志位,负标志位,溢出标志位、进位或借位标志位等。,定点运算器的组成
34、,基本思想一位全加器(FA)的逻辑表达式为:Fi=Ai+ Bi+ CiCi+1=AiBi+BiCi+CiAi为了将全加器的功能进行扩展以完成多种算术逻辑运算,我们先不将输入Ai和Bi和下一位的进位Ci直接进行全加,而是将Ai和Bi先组合有控制S0,S1,S2,S3控制的组合函数Xi和Yi,然后再将Xi,Yi和下一位进位数通过全加器进行全加,这样,不同的控制参数可以得到不同的组合函数,以能够实现多种算术运算和逻辑运算。,定点运算器的组成多功能算术/逻辑运算单元,定点运算器的组成多功能算术/逻辑运算单元,S1,S3,Xi 、Yi与控制参数和输入量的关系,定点运算器的组成多功能算术/逻辑运算单元,A
35、LU的某一位逻辑表达式如下: Xi=S3AiBi+S2AiBi Yi=Ai+S0Bi+S1Bi Fi=Yi+Xi+Cn+i Cn+i+1=Yi+XiCn+i,每一位的进位公式可递推如下:,定点运算器的组成多功能算术/逻辑运算单元,C n+1=Y0+X0Cn,C n+2=Y1+X1Cn+1= Y1+ Y0X1+X0X1Cn,C n+3=Y2+X2Cn+2 =Y2 +X2 Y1+ Y0X1 X2 +X0X1 X2 Cn,C n+4=Y3+X3Cn+3 =Y3+X3 Y2 +X2 X3 Y1+ Y0X1 X2 X3 +X0X1 X2 X3 Cn,设:,定点运算器的组成多功能算术/逻辑运算单元,该式表
36、明,第0位的进位输入可以直接传送到最高进位位上去,因而可以实现高速运算,G= Y3+X3 Y2 +X2 X3 Y1+ Y0X1 X2 X3 P= X0X1 X2 X3,则:C n+4=G+PCn,其中:G称为进位发生输出P称为进位传送输出,运算器包括ALU、阵列乘除器、寄存器、多路开关、三态缓冲器、数据总线等逻辑部件。计算机的运算器的结构一般有三种。,定点运算器的基本结构,定点运算器的基本结构,A,B,ALU,通 用寄存器,特 殊寄存器,单总线结构的运算器,输入数据和操作结构需要三次串行的选通操作,但它并不会对每种指令都增加很多执行时间。由于只控制一条总线,所以控制电路比较简单。,两个操作数同
37、时加到ALU进行运算,只需要一次操作控制,而且马上得到运算结果。,ALU的输出不能直接加到总线上去,这是因为,当形成操作结构的输出时,两条总线都被输入数据占据,因而必须在ALU的输出端设置缓冲器。,双总线结构的运算器,定点运算器的基本结构,定点运算器的基本结构,ALU的两个输入端分别由总线提供,而ALU的输出则与第三条总线相连。这样,算术逻辑操作就可以在一步的控制之内完成。,设置一个总线旁路器,如果一个操作数不需要修改,而直接从总线2传送到总线3,那么可以通过控制总线旁路器把数据传出。,浮点数的表示,浮点数的加法、减法运算设有两个浮点数的分别为X=Mx*2Ex,Y=My*2Ey,实现浮点加减法
38、算的基本步骤分为四步完成:0操作数检查:用来判断两个操作数中是否有一个为0.对阶操作:即比较两个浮点数的阶码值的大小,求E=Ex-Ey,然后将小阶对大阶。尾数进行加或减运算:实现尾数的加减运算 ,执行两个完成对阶后的浮点数的求和(差)的过程规格化并进行舍入处理:若得到的结果不满足规格化规则,就必须把它变成规格化的数。舍入操作,在执行对阶或右规操作时,会使位数低位上的一位或若干位的数值被移掉,使数值精度受到影响,可以把移掉的几个高位的值保存起来供舍入使用。,浮点运算器浮点运算方法,取指定位数 舍入处理,阶码减1 尾数左移1位,尾数加法 (带符号),小阶加1 尾数右移1位,浮点运算器浮点运算方法,
39、加法,减法,Y变符号,X=0?,Y=0?,zy,zx,z另一数,z0,报告上溢,报告下溢,阶码相同?,尾数=0?,尾数=0?,阶码加1 尾数右移1位,阶码上溢,阶码下溢,尾数上溢,已是1.M,0操作检查,对阶操作,尾数加减,结果规格化,结束,是,是,是,是,是,是,是,是,否,否,否,否,否,否,否,否,例:设X=2010*0.11011011,Y=2100*(-0. 10101100),求X+Y.(假设两数均以补码表示,阶码采用双符号位,尾数采用单符号位.),浮点运算器浮点运算方法,解:浮点表示为:X浮= 00 010,0. 11011011Y浮= 00 100,1. 01010100()对
40、阶E=Ex-Ey=00010+11100=11110即E为-2,X的阶码小,应使Mx右移两位, Ex加2,得:X浮=00100, 0.00110110(11),浮点运算器浮点运算方法,浮点运算器浮点运算方法,+,(2).尾数求和,(1),(),(3).规格化和舍入处理结果的符号位与最高符号数值位相同,应执行左规处理,所谓左规格化的规则,就是尾数左移1位,阶码减1,所以结果为1.00010101(10) ,阶码为00 011舍入处理,采用0舍1入法处理,则有1. 0 0 0 1 0 1 0 1 11. 0 0 0 1 0 1 1 0,浮点运算器浮点运算方法,(4).判溢出 阶码的符号位为00,不
41、溢出。所以最终的结果为X+Y=2011*(-0.11101010),浮点运算器浮点运算方法,例:设X=2001*(-0.111),Y=2010*0. 101,求X-Y.(假设两数均以补码表示,阶码采用3位,尾数采用4位,均包括符号位.),浮点运算器浮点运算方法,解:浮点表示为:X浮=001,1. 001Y浮=010,0. 101()对阶E补=Ex补-Ey补=001+110=111即E为-1,X的阶码小,应使Mx右移1位, Ex加1,得:X浮=010, 1.100(1),浮点运算器浮点运算方法,浮点运算器浮点运算方法,+,(2).尾数求差: -Y补=1.011,1 . 1 0 0 (1),1 .
42、 0 1 1,1 0 . 1 1 1 (1),两个负数相加,结果为正数,说明产生了溢出.,但是在浮点数的运算中,只有当阶码产生溢出时,才是溢出。此时只是说明尾数的结果为不规格化数,应进行右规。,(3).规格化和舍入处理由于结果产生了溢出,应执行右规处理,所谓右规格化的规则,就是尾数右移1位,阶码加1,所以结果为1.011(1) ,阶码为011舍入处理,采用恒舍法处理,则有尾数为1.011,浮点运算器浮点运算方法,(4).判溢出 阶码不溢出。所以最终的结果为X-Y=2011*(-0.101),浮点运算器浮点运算方法,浮点数的乘除法:设有两个浮点数的分别为X=Mx*2Ex,Y=My*2Ey, 则浮
43、点数乘法运算规则:X*Y=2(EX+EY)*(MX*MY) 设有两个浮点数的分别为X=Mx*2Ex,Y=My*2Ey, 则浮点除法运算规则:X*Y=2(EX-EY)*(MXMY),浮点运算器浮点运算法,浮点乘、除法的运算步骤: 浮点数的阶码运算阶码通常用补码和移码形式表示。对于移码来说:X+Y移=X移+Y补X-Y移=X移+-Y补 在用移码进行计算时,判断溢出的条件是当结果的最高符号位为1时,则产生了溢出。,浮点运算器浮点运算法,浮点数的尾数处理 第一种方法:无条件地丢掉正常尾数最低位之后的全部数值,这种方法称为截断处理。 第二种方法:运算过程中保留右移中移出的若干高位的值,最后按某种规则用这些位上的值修正尾数,这种处理称为舍入处理。,浮点运算器浮点运算法,请同学们自学浮点数的乘除法的例题P63!,浮点运算器浮点运算方法,浮点运算器 CPU之外的浮点运算器,浮点运算器浮点运算方法,总线接口部件,数值运算部件,控制字,状态字,指数模块,数据缓冲器,控制部件,特征字,操作数队列,微程序控制部件,可编程移位器,算术运算部件,临时寄存器,寄存器栈,数据,状态,地址,NEU指令,数据总线,小数总线,接口,CPU之内的浮点运算器浮点运算部件采用流水线设计。,浮点运算器浮点运算方法,教材: P69-5 6 7 8 9,作业题,