收藏 分享(赏)

第三章2 运算方法.ppt

上传人:fmgc7290 文档编号:6221896 上传时间:2019-04-02 格式:PPT 页数:135 大小:6.27MB
下载 相关 举报
第三章2 运算方法.ppt_第1页
第1页 / 共135页
第三章2 运算方法.ppt_第2页
第2页 / 共135页
第三章2 运算方法.ppt_第3页
第3页 / 共135页
第三章2 运算方法.ppt_第4页
第4页 / 共135页
第三章2 运算方法.ppt_第5页
第5页 / 共135页
点击查看更多>>
资源描述

1、第三章 第二部分,2,第4章 运算方法与运算器,定点数的加减运算及实现,4.1,定点运算器的组成与结构,定点数的乘法运算及实现,4.2,定点数除法运算及实现,4.3,4.4,浮点运算及运算器,4.5,浮点运算器举例,4.6,本章小结,3,4.1 定点数的加减运算及实现,补码加减运算与运算器,机器数的移位运算,移码加减运算与判溢,十进制加法运算,4,一、补码加减运算与运算器,补码加减运算方法,补码加减运算的溢出判断,二,补码加减运算器的实现,三,一,5,1、补码加减运算方法,补码的加减运算的公式是: X+Y补 = X补 + Y补 X-Y补 = X补 + -Y补 特点: 使用补码进行加减运算,符号

2、位和数值位一样参加运算。 补码的减法可以用加法来实现,任意两数之差的补码等于被减数的补码与减数相反数的补码之和 。,6,求补运算:Y补 -Y补,求补规则:将Y补包括符号位在内每一位取反,末位加1。 若Y补 = Y0,Y1Yn ,则:若Y补 = Y0.Y1Yn ,则:,例: X补 =0.1101,则: X补 = ?Y补 =1.1101,则: Y补 = ?,1.0011,0.0011,7,补码加减运算举例,例:已知X=+1011,Y=-0100,用补码计算X+Y和X-Y。 写出补码:X补 =0,1011 Y补 =1,1100 -Y补 =0,0100 计算:,0,1011, 1,1100,0,011

3、1,XY补 = 0, 0111,0,1011, 0,0100,0,1111,XY补 = 0, 1111,8,2、补码加减运算的溢出判断,当运算结果超出机器数的表示范围时,称为溢出。计算机必须具备检测运算结果是否发生溢出的能力,否则会得到错误的结果。 对于加减运算,可能发生溢出的情况:同号(两数)相加,或者异号(两数)相减。 确定发生溢出的情况: 正数相加,且结果符号位为1; 负数相加,且结果符号位为0; 正数负数,且结果符号位为1; 负数正数,且结果符号位为0;,9,常用的判溢方法(补码加减运算),(1)单符号位判溢方法2 当最高有效位产生的进位和符号位产生的进位不同时,加减运算发生了溢出。

4、VC1Cf (2)双符号位判溢方法 X和Y采用双符号位补码参加运算,正数的双符号位为00,负数的双符号位为11;当运算结果的两位符号Sf1 Sf2不同时(01或10),发生溢出。 V Sf1 Sf2= Xf Yf Cf Sf Sf1 Sf2=01,则正溢出;Sf1 Sf2=10,则负溢出。,10,双符号位判溢方法举例,例:用补码计算X+Y和X-Y (1)X=+1000,Y=+1001 (2)X=-1000,Y=1001,Sf1 Sf2=01,正溢出,Sf1 Sf2=11,无溢出,Sf1 Sf2=00,无溢出,Sf1 Sf2=10,负溢出,11,二进制加法器,由真值表可的全加器输出Fn和进位输出

5、 Cn1的表达式为:,化简可得: Fn = Xn Yn Cn Cn1 = XnYn + (Xn Yn)Cn,12,一位全加器逻辑电路,一位全加器逻辑框图,13,四位二进制加法器,由4个全加器串连构成串行进位加法器,14,四位二进制并行进位加法器,在4个全加器基础上进行改造,以便并行产生进位,构成并行进位加法器。,15,四位二进制并行进位加法器,可以完成加法,16,补码加减法,根据算术运算规则: a-b补=a补+-b补 -b的补码为:将b补的各位求反,并加1。 由此,我们可以用加法器实现减法。,加法器,17,将加法和减法组合,给定控制命令C=0,则ALU完成加法a+b;C=1,完成减法a-b。

6、可以用选择器实现如下:,18,补码加减运算器的实现,核心部件:一个普通的二进制并行加法器。 A:累加器,存放X补;B:寄存器,存放Y补; 取反电路:=0时,补码加法器,将B寄存器直接送入并行加法器;=1时,补码减法器,将B送入并行加法器,同时,并行加法器的最低位产生进位,即B取反加1,此时并行加法器的运算相当于A补加-B补 ,完成减法运算。,V Sf1 Sf2= Xf Yf Cf Sf,19,3、补码加减运算器,V Sf1 Sf2= Xf Yf Cf Sf,20,二、机器数的移位运算,二进制数据(真值)每相对于小数点左移一位,相当于乘以2;每相对于小数点右移一位,相当于除以2。 计算机中的移位

7、运算分为: 1、逻辑移位:将移位的数据视为无符号数据,各数据位在位置上发生了变化,导致无符号数据的数值(无正负)放大或缩小。 2、算术移位:将移位的数据视为带符号数据(机器数)。算术移位的结果,在数值的绝对值上进行放大或缩小,同时,符号位必须要保持不变。 3、循环移位:所有的数据位在自身范围内进行左移或者右移,左移时最高位移入最低位,右移时最低位移入最高位。,21,补码的算术移位,算术左移:符号位不变,高位移出,低位补0。 为保证补码算术左移时不发生溢出,移位的数据最高有效位必须与符号位相同。 在不发生溢出的前提下,用硬件实现补码的算术左移时,直接将数据最高有效位移入符号位,不会改变机器数的符

8、号。 算术右移:符号位不变,低位移出,高位正数补0,负数补1,即高位补符号位。,22,补码的算术移位举例,例:设X0.1001,Y0.0101,求 X补 ? 2X补 ? X/2补? Y补 ? 2Y补 ? Y/2补?,0.1001,1.0010(溢出),0.0100,1.1011,1.0110,1.1101,23,三、移码加减运算与判溢,移码和移码计算移码和补码混合计算移码运算结果判溢:,24,三、移码加减运算与判溢,移码运算结果溢出的判断条件是: 当结果的最高符号位Sf1=1时溢出,Sf1=0时结果正确。 Sf1 Sf2=10时,结果正溢出; Sf1 Sf2=11时,结果负溢出。 由于移码运算

9、用于浮点数的阶码,当运算结果正溢出时,浮点数上溢;当运算结果负溢出时,浮点数下溢,当作机器零处理。,25,四、十进制加法运算,计算机中的十进制加法器通常采用BCD码设计,在二进制加法器的基础上,加上适当的校正电路,可以实现BCD码的加法器。 对于8421BCD码来说,当相加的两数之和S9时,加6校正;当S9时,且无进位时,结果正确,不需校正。,26,4.2 定点数的乘法运算及实现,原码乘法及实现,补码乘法及实现,阵列乘法器,27,原码乘法及实现(1),由于计算机的软硬件在逻辑上具有一定的等价性,因此实现乘除法运算,可以有三种方式: .用软件实现。 硬件上:设计简单,没有乘法器和除法器。 指令系

10、统:没有乘除指令,但有加/减法和移位指令 实现:乘除运算通过编制一段子程序来实现 算法:程序中运用串行乘除运算算法,循环累加、右移指令乘法,循环减、左移指令除法。 运算速度:较慢。 适用场合:单片机。,28,原码乘法及实现(2),.用硬件乘法器和除法器实现。 硬件上:设置有并行加法器、移位器和若干循环、计数控制逻辑电路搭成的串行乘除法器。 指令系统:具有乘除法指令。 实现:乘除运算通过微程序一级(硬件微程序)来实现。 算法:在微程序中依据串行乘除运算算法,循环累加、右移指令乘法,循环减、左移指令除法。 运算速度:有所提高,但硬件设计也相对复杂。 适用场合:低性能CPU。,29,原码乘法及实现(

11、3),.用高速的阵列乘法器和阵列除法器来实现。 硬件上:设置有专用的、并行运算的阵列乘法器和阵列除法器。 指令系统:具有乘除法指令。 实现:完全通过硬件来实现。 算法:并行乘/除法。 运算速度:很快,但硬件设计相当复杂。 适用场合:高性能CPU。,30,一、原码乘法及实现,1、手工乘法算法 手工计算10111101,步骤: 手工算法:对应每1位乘数求得1项位积,并将位积逐位左移,然后将所有的位积一次相加,得到最后的乘积。,2、原码一位乘法算法:假设X原=XS X1 X2 Xn , Y原=YS Y1 Y2 Yn , P=XY,PS是积的符号: 符号位单独处理 Ps=Xs Ys 绝对值进行数值运算

12、 |P|=|X|*|Y| 例如:X=+1011,Y=-1101,用原码一位乘法计算,31,原码乘法,从一个简单的例子开始:,C乘数,B被乘数,1,符号:Ps=XsYs=01=1,A部分积,乘积,部分积,部分积,部分积,32,乘法算法实现 (一),33,原码乘法的实现 (一),8-位被乘数寄存器, 8-位 ALU, 8-位 部分积寄存器, 4-位乘数寄存器,34,乘法算法实现 (二),35,4-位被乘数寄存器,4 -位 ALU, 8-位 部分积寄存器, 4-位乘数寄存器,Product,Multiplier,Multiplicand,32-bit ALU,Shift Right,Write,Co

13、ntrol,32 bits,32 bits,64 bits,Shift Right,原码乘法的实现 (二),36,实现(一)的不足: 被乘数的一半存储的只是0,浪费存储空间 每次加法实际上只有一半的位有效,浪费了计算能力 实现(二)的改进: 只在部分积左边进行加法。 在减少加法器位数的同时,并没有减低积的位数。,37,出现的问题和解决办法,1、在加法器中,很难实现多个数据同时相加解决:每求得一个相加数,然后与上一次部分及相加,N次累计相加。 2、加法器的位数与寄存器位数相同,而不是寄存器的两倍。解决:手工计算中,我们可以看到,前一次部分积最低位不参与下一次相加运算。所以,我们可以通过,每求的一

14、个部分积,使其向右移动一位,这样,每次相加,都是N位和N位的相加,右移动的一位到C寄存器中的最高位去。 N次移位 3、乘数C中的0或1决定本次相加数是被乘数B还是0.但乘数中每一位不方便判断。所以,用最低位来实现这种判断就方便多了。所以可以将乘数用右移的方式来解决这个问题,38,举例,X原=0,1011 Y原=1,1101Ps=XsYs=01=1|P| = |X|Y| B寄存器被乘数|X| C寄存器乘数|Y|最后乘积的低四位 A寄存器部分积最后乘积的高四位,P原=1,10001111,39,一、原码乘法及实现,控制逻辑电路,3、原码乘法的硬件实现,40,原码一位乘法,00000,1101,0

15、0 0 0 0,1 1 0 1,为各寄存器给初值,0 1 0 1 1,41,第一次求部分积,00000,1101,0 1 0 1 1,01011,1101,加运算:|X|,42,00000,1101,0 0 1 0 1,1 1 1 0,01011,1101,右移1位,00101,1110,第一次求部分积,43,00000,1101,0 0 1 0 1,1 1 1 0,01011,1101,加运算:0,00101,1110,00101,1110,第二次求部分积,44,00000,1101,0 0 0 1 0,1 1 1 1,01011,1101,右移1位,00101,1110,00101,111

16、0,00010,1111,第二次求部分积,45,00000,1101,0 1 1 0 1,01011,1101,加运算:|X|,00101,1110,00101,1110,00010,1111,01101,1111,第三次求部分积,46,00000,1101,0 0 1 1 0,1 1 1 1,01011,1101,右移1位,00101,1110,00101,1110,00010,1111,01101,1111,00110,1111,第三次求部分积,47,00000,1101,1 0 0 0 1,01011,1101,加运算:|X|,00101,1110,00101,1110,00010,11

17、11,01101,1111,00110,1111,10001,1111,第四次求部分积,48,00000,1101,0 1 0 0 0,1 1 1 1,01011,1101,右移1位,00101,1110,00101,1110,00010,1111,01101,1111,00110,1111,01000,1111,低位积,高位积,符号位异或 结果为:1,10001111,第四次求部分积,49,原码一位乘法流程 :,50,二、补码乘法及实现,1、补码乘法算法 (1)补码一位乘法校正法 假设X补 = X0 .X1Xn , Y补 = Y0 .Y1Yn , 则有: XY补 = X补(0.Y1Yn)+

18、Y0-X补,51,二、补码乘法及实现,证明如下: 当被乘数X的符号任意,Y为正数时: 根据补码定义有: X补 =2 + X = 2n+1+ X (mod 2) Y补 =Y 则: X补Y补 =(2n+1+ X)Y = 2n+1Y + XY = 2 n+1(0 .Y1Yn)+ XY = 2(Y1Yn)+ XY = 2 + XY (mod 2) = XY补 即:Y 0 时,XY补 = X补Y补 =X补(0.Y1Yn),52,二、补码乘法及实现,当被乘数X的符号任意,Y为负数时: Y补 = 2 + Y = 1 .Y1Yn则: Y = Y补 2 = 0.Y1Yn -1 XY补 = X0.Y1Yn X 补

19、 = X0.Y1Yn 补 +X 补 因为0.Y1Yn 0,所以: X0.Y1Yn 补 =X补(0.Y1Yn) 所以:Y0时, XY补 =X补(0.Y1Yn)+ -X补,53,例如:X=+0.1011,Y=-0.1101,用补码一位乘法的校正法计算P=XY。 X补=00.1011 Y补=11.0011 -X补=11.0101,XY补 = 1.0111 0001 XY = -0.1000 1111,二、补码乘法及实现,54,例:设X=-0.1101,Y=-0.1011,即:X补=11.0011,Y补=11.0101,求X*Y补,计算结果: X*Y补=0.10001111,55,(2)补码一位乘法B

20、ooth算法 做出如下推导 : XY补 = X补(0.Y1Yn)+ Y0-X补 = X补(Y12-1 + Y22-2 + + Yn2-n -Y0) = X补Y1(20 - 2-1)+ Y2(2-1 - 2-2)+ + Yn(2-n+1 - 2-n)-Y020 = X补Y120 - Y12-1 + Y22-1 - Y22-2 + + Yn2-n+1 - Yn2-n -Y020 = X补(Y1-Y0)20 +(Y2- Y1)2-1 +(Y3- Y2)2-2 + + (Yn- Yn-1)2-n+1 - Yn2-n = X补(Y1-Y0)20 +(Y2- Y1)2-1 +(Y3- Y2)2-2 + +

21、 (Yn- Yn-1)2-n+1 +(Yn+1 - Yn)2-n = X补(a020 + a12-1 + a22-2 + + an-12-n+1 + an2-n) 其中,将乘数Y的补码在最末位添加一位附加位Yn+1(初始为0),ai= Yi+1- Yi ,i=0,1,n-1,n。,0,二、补码乘法及实现,56,假设Y补 = Y0 .Y1Yn 被乘数X和乘数Y均以补码的形式参加乘法运算,运算的结果是积的补码。 部分积和被乘数X采用双符号位,乘数Y采用单符号位。 初始部分积为0;运算前,在乘数Y的补码末位后添加一位附加位Yn+1,初始为0。 根据YnYn+1的值,按照表4.3进行累加右移操作,右移

22、时遵循补码的移位规则。 累加n+1次,右移n次,即最后一次不右移。,Booth算法的运算规则,57,例如:X=+0.1011,Y=-0.1101,用补码一位乘法的Booth算法计算P=XY。 解:X补=00.1011 Y补=11.0011 -X补=11.0101,XY补 = 1.0111 0001 XY = -0.1000 1111,58,3、Booth乘法的硬件实现,二、补码乘法及实现,2、补码乘法的硬件实现,59,控制逻辑电路,补码乘法的Booth算法流程,60,三、阵列乘法器,原理类似于二进制手工算法 位积的每一位XiYj都可以用一个与门实现,而每一位的相加均可以使用一个全加器来实现。,

23、61,绝对值阵列乘法器,动画演示,62,补码求绝对值电路,补码阵列乘法器,先通过一个补码求绝对值的逻辑电路变为绝对值后,送入绝对值阵列乘法器,运算得到积的绝对值,然后再通过一个绝对值求补码的逻辑电路,根据积的符号求出积的补码形式。,63,补码阵列乘法器,64,4.3 定点数除法运算及实现,原码除法及实现,补码除法及实现,阵列除法器,65,一、原码除法及实现,1、原码除法算法 (1)手工除法算法 改进手工算法即可适合机器运算: 计算机通过做减法测试来实现判断:结果大于等于0,表明够减,商1;结果小于0,表明不够减,商0。 计算机将余数左移一位,再直接与不右移的除数相减。,X=+0.1011,Y=

24、-0.1101 XY,66,一、原码除法及实现,(2)原码恢复余数算法假设X原=XS .X1 X2 Xn ,Y原=YS .Y1 Y2 Yn ,Q是XY的商,QS是商的符号,R是XY的余数,RS是余数的符号原码除法运算的规则是: 1.QS = XS YS ,RS = XS,|Q| = |X|Y|-|R|Y| 2.余数和被除数、除数均采用双符号位;初始余数为|X|。,67,一、原码除法及实现,原码除法运算的规则是: 3.每次用余数减去|Y|(通过加上-|Y|补来实现),若结果的符号位为0,则够减,上商1,余数左移一位;若结果的符号位为1,则不够减,上商0,先加|Y|恢复余数,然后余数左移一位。 4

25、.循环操作步骤3,共做n+1次,最后一次不左移,但若最后一次上商0,则必须+|Y|恢复余数;若为定点小数除法,余数则为最后计算得到的余数右移n位的值。,68,例如: X=+0.1011,Y= - 0.1101 用原码恢复余数算法计算XY。 解:X原=0.1011 Y原=1.1101 |X|=0.1011 |Y|=0.1101 -|Y|补=11.0011 QS = XS YS = 1 RS = 0,得Q原=1.1101 R原=0.00000111,69,一、原码除法及实现,(3)原码不恢复余数算法 又称为加减交替法:当某一次求得的差值(余数Ri)为负时,不是恢复它,而是继续求下一位商,但用加上除

26、数(+|Y|)的办法来取代 (-|Y|)操作,其他操作不变。 其原理证明如下: 在恢复余数除法中,若第i-1次求商的余数为Ri-1,下一次求商的余数为Ri,则: Ri=2Ri-1|Y| 如果Ri=0,商的第i位上1,并执行操作:余数左移一位,再减|Y|,得Ri+1,则: Ri1=2Ri|Y|,70,一、原码除法及实现,如果Ri0,商的第i位上0,并执行操作:恢复余数(+|Y|),将余数左移一位,再减|Y|,得Ri+1。其过程可用公式表示如下:Ri+1=2(Ri+|Y|)|Y|=2Ri+2|Y|Y|=2Ri+|Y| 加减交替法的规则如下: 余数为正时(最高位为1),商上1(这个时候Q最低位为1)

27、,求下一位商的办法,是余数左移一位,再减去除数(由Q最低位决定); 当余数为负时(最高位为0) ,商上0 (这个时候Q最低位为0) ,求下一位商的办法,是余数左移一位,再加上除数(由Q最低位决定) 。 若最后一次上商为0,而又需得到正确余数,则在这最后一次仍需恢复余数。,71,例如:X=+0.1011, Y=-0.1101,用原码不恢复余数算法计算XY。 解:X原=0.1011 Y原=1.1101 |X|=0.1011 |Y|=0.1101 -|Y|补=11.0011 QS = XS YS = 1 RS = 0,Q原=1.1101 R原=0.00000111,72,一、原码除法及实现,控制电路

28、逻辑,2、原码除法的硬件实现,73,原码不恢复余数除法流程,一、原码除法及实现,74,二、补码除法及实现,1、补码除法算法补码不恢复余数除法的规则。假设X补=XS .X1 X2 Xn ,Y补=YS .Y1 Y2 Yn ,Q是XY的商,R是余数,则补码除法运算的规则是: X和Y以补码形式参加除法运算,商也以补码的形式产生。余数和被除数、除数均采用双符号位。 当X补与Y补同号时,第一次做X补+-Y补操作,当异号时,第一次做X补+Y补操作,得到第一次的部分余数R0补。,75,二、补码除法及实现,补码除法运算的规则是: 当Ri补与Y补同号时,上商1,然后余数先左移一位,加-Y补得到新余数Ri+1补;当

29、Ri补与Y补异号时,上商0,余数左移一位,加Y补得到新余数Ri+1补。 循环操作步骤,共做n次,得到1位商符和(n-1)位商的补码数值位,最末位采用恒置“1”法。,76,二、补码除法及实现,第二种方法的运算规则为: X和Y以补码形式参加除法运算,商也以补码的形式产生。余数和被除数、除数均采用双符号位。部分余数初始为X补,即R0补=X补。 当Ri补与Y补同号时,上商1,然后余数先左移一位,加-Y补得到新余数Ri+1补;当Ri补与Y补异号时,上商0,余数左移一位,加-Y补得到新余数Ri+1补。 循环操作步骤,共做n次,得到1位商符和(n-1)位商的补码数值位,最末位采用恒置“1”法。,77,X=+

30、0.1011,Y=-0.1101,用补码不恢复余数算法计算XY。 X补=00.1011 Y补=11.0011 -Y补=00.1101 第一种方法:,得Q补=1.0011 Q=-0.1101,二、补码除法及实现,78,二、补码除法及实现,第二种方法:,Q的符号取反,得Q补=1.0011。,79,二、补码除法及实现,控制电路逻辑,补码不恢复余数除法的电路框图(第二种方法),80,二、补码除法及实现,补码不恢复余数除法流程,81,三、阵列除法器,被除数X=X1 X2 X3 X4 X5 X6,除数=123得到的商Q=Q1Q2Q3(Q0=0),R= R4 R5 R6。 若为定点小数,则X=0.X1 X2

31、 X3 X4 X5 X6,除数=0.123,得到的商Q=0.Q1Q2Q3(Q0=0),R=0.000 R4 R5 R6 构成的基本部件:可控加减单元CAS,82,三、阵列除法器,83,4.4 定点运算器的组成与结构,定点运算器的组成,定点运算器的内部总线结构与通路,标志寄存器,84,一、定点运算器的组成,基本组成包括: 算术逻辑运算单元ALU:核心部件 暂存器:用来存放参与计算的数据及运算结果,它只对硬件设计者可见,即只被控制器硬件逻辑控制或微程序所访问 通用寄存器堆:用于存放程序中用到的数据,它可以被软件设计者所访问。 内部总线:用于连接各个部件的信息通道。 其他可选电路 设计定点运算器,如

32、何确定各部件的功能和组织方式是关键,这取决于以下几个方面: 指令系统 机器字长 机器数及其运算原理 体系结构,85,二、定点运算器的总线结构,1、单总线结构 单总线运算器的结构形式1,86,二、定点运算器的总线结构,单总线运算器的结构形式2,87,2、双总线结构 双总线运算器的结构形式1,二、定点运算器的总线结构,88,双总线运算器的结构形式2,二、定点运算器的总线结构,89,3、三总线结构,最后必须指出的是,在分析某一种运算器的运算过程和通路时,一个基本的原则就是在一个CPU周期(一步)内,某条总线上的数据必须是唯一的,且不能保留(至下一个CPU周期)。,二、定点运算器的总线结构,90,三、

33、标志寄存器,标志寄存器用来保存ALU操作结果的某些状态,这种状态可作为外界对操作结果进行分析的一个依据,也可以用于判断程序是否要转移的条件,该寄存器通常也称为状态寄存器。 依据功能上的差别,不同的CPU,其标志寄存器中包含的标志也不尽相同。 一般标志寄存器中包含了最基本的5种运算结果标志: ZF 结果为零标志(zero flag bit):记录运算结果是否为零的状态,运算结果为0(全零)时ZF置1,否则ZF置0。 CF 进位/借位标志位(carry flag bit):记录最高位产生的进位C,加法运算时C=1则CF置1(表示有进位),否则置0;减法运算时C=0则CF置1(表示不够减,有借位),

34、否则置0。CF标志只对无符号数运算有意义。,91,三、标志寄存器,一般标志寄存器中包含了最基本的5种运算结果标志: OF 溢出标志(overflow flag bit):用于反映有符号数加减运算所得结果是否溢出。此时OF标志位为1,否则置0。CF标志只对有带符号数运算有意义。 SF 符号标志(sign flag bit),记录运算结果的符号,它与运算结果的最高位相同。在现代微机中,有符号数采用补码表示法,所以,SF也就反映运算结果的正负号。运算结果为正数时,SF置为0,否则其值为1。 PF 奇偶标志(parity flag bit),用于反映运算结果中“1”的个数的奇偶性,当结果操作数中“1”

35、的个数为偶数时置1,否则置0。,92,三、标志寄存器(举例),MOV AL,80H ADD AL,80H ADD指令运算结束后:(AL)=00H; ZF=1:因为运算结果为全零; CF=1:因为加法运算的最高位产生了进位,表明无符号数加运算发生溢出。实际上是:把操作数80H和80H均当作无符号数128和128,做加法运算的正确结果为256,超出了8位无符号数的表示范围(0255)。 OF=1:因为C1Cf=1,按照单符号判溢方法,表明有符号数运算发生溢出。实际上是:把操作数80H和80H均当作有符号数(补码)-128和-128,做加法运算的正确结果为-256,超出了8位补码机器数的表示范围(-

36、128+127)。 SF=0:因为运算结果的最高位为0。显然,因为OF=1(发生了溢出),所以SF是错误的。 PF=1:结果中“1”的个数为0个,所以PF=1。,93,4.5 浮点运算及运算器,浮点加减运算,浮点乘法运算,浮点除法运算,浮点运算器,94,一、浮点加减运算,假设两个浮点数X和Y,则必须保证X和Y的阶码(指数)是相同的,然后对尾数做加减运算。,95,浮点加减运算步骤,(1)0操作数检查:以尽可能的简化操作。 (2)对阶:原则是小阶对向大阶 求阶差E=EX-EY,若E0,即EXEY时需要对阶。 若E0,则EXEY,MY每右移一位,EY+1,直至 EY=EX 。 若E0,则EXEY,M

37、X每右移一位,EX+1,直至EX=EY 。 (3)尾数相加减,96,浮点加减运算步骤,(4)结果规格化:尾数运算的结果可能出现两种非规格化情况: A、尾数溢出:需要右规(1次),即尾数右移1位,阶码1 B、|尾数| 2-1:需要左规,即尾数左移1位,阶码1,左规可能多次,直到尾数变为规格化形式。 (5)舍入:可采用截断法、0舍1入法、末位恒置1。,97,一、浮点加减运算,IEEE 754标准规定了4种可选的舍入模式: 向上舍入(总是朝+):为正数时,只要多余位不全为0,就向最低有效位进1;为负数时,则采用简单的截断法。 向下舍入(总是朝):为正数时,只要多余位不全为0,就简单地截尾;为负数时,

38、则向最低有效位进1。 向0舍入:即朝数轴的原点方向舍入,就是无论正数还是负数,都采用简单的截尾,从而使得绝对值总是变小。这种方法容易累积误差。,98,一、浮点加减运算,就近舍入:即舍入到最接近的数,就是通常的“四舍五入”。当多余位的值超出它们量程(即最低有效位的权值)的一半,则向最低有效位进1;当小于一半,则截尾(即舍去);当等于一半(中点),则若最低有效位为0(偶数)就截尾,若最低有效位为1(奇数)就进1,以使得最低有效位总是为0。在中点的这种舍入方法很公平:一半的时间里向上舍入,在另一半的时间里向下舍入,它也不容易累积误差,所以被广泛使用。 为实现4种舍入方法,IEEE 754标准规定,所

39、有浮点运算的中间结果右边都必须额外多保留2位:保护位(guard)、舍入位(round),它们用于实现精确的四舍五入。另外,还设置1位粘滞位(sticky),用于记住是否有1被(右)移出。只要舍入位的右边有非零位,粘滞位就置为1。,99,浮点加减运算流程,100,举例:12位浮点数,阶码4位,包含1位阶符,尾数8位,包含1位数符,用补码表示,阶码在前,尾数(包括数符)在后,已知: X=(-0.1001011)2001 Y=0.11001012-010 求Z=X+Y。,解:X浮 = 00,001 11.0110101 Y浮 = 11,110 00.1100101 (1)对阶 E=EX-EY=EX

40、补+-EY补 = 00,001+00,010 = 00,011 E=30,将MY右移3位,EY加3: Y浮 = 00,001 00.0001100 (101),一、浮点加减运算,101,(2)尾数相加: MZ补 = 11.1000001(101) (3)结果规格化:左规一位,无溢出: MZ补 = 11.0000011(01) EZ补 = 00,001 + 11,111= 00,000 (4)舍入:按照0舍1入法,尾数多余位舍去 结果为:Z浮 = 0,000 1.0000011,一、浮点加减运算,102,二、浮点乘法运算,假设两个浮点数X和Y:,103,(1)0操作数检查 (2)阶码相加:阶码相

41、加可以采用补码或者移码的定点整数加法,同时对相加结果判溢,一旦发生正溢出,则需报告溢出,若发生负溢出,则将结果置为机器零。 (3)尾数相乘 (4)结果规格化:可能需要左规1位 (5)舍入处理:尾数相乘的结果长度是尾数长度的两倍,必须对低位舍入。,浮点乘法运算步骤,104,浮点数乘法运算流程,105,二、浮点乘法运算(举例),一浮点数表示格式为:10位浮点数,阶码4位,包含1位阶符,用移码表示,尾数6位,包含1位数符,用补码表示,阶码在前,尾数(包括数符)在后,已知: X=(-0.11001)2011 Y=0.100112-001 ,求Z=XY。要求阶码用移码计算,尾数用补码Booth算法计算。

42、 解:按照浮点数的格式分别写出它们的表示形式,为计算方便,阶码采用双符号位移码,尾数采用双符号位补码: X浮 = 01,011 11.00111 Y浮 = 00,111 00.10011,106,二、浮点乘法运算(举例),阶码相加 EZ移 = EX移 +EY补 = 01,011 + 11,111 = 01,010 结果无溢出,EZ移 =1,010。 尾数相乘 采用补码Booth算法计算MX MY补,首先写出下例数据: MX补 = 11.00111 MY补 = 0.10011 -MX补 = 00.11001 MZ补= 1.10001 00101,107,二、浮点乘法运算(举例),结果规格化 MZ

43、左规一次得:MZ 补= 1.00010 01010 EZ减1得: EZ移 = 01,010 + 11,111 =01,001 舍入 对尾数MZ进行0舍1入,最后得 Z浮 = 1,001 1.00010,108,三、浮点除法运算,假设两个浮点数X和Y:,109,(1)0操作数检查 当除数为0,则报告除法出错,或者结果(商)无穷大;当被除数为0,则商为0。 (2)阶码相减 阶码相减的结果也可能溢出,若发生正溢出,则需报告浮点数溢出,若发生负溢出,则将结果置为机器零。 (3)尾数相除 (4)结果规格化 (5)舍入处理,浮点数除法运算步骤,110,浮点数除法运算流程,111,三、浮点除法运算(举例),

44、一浮点数表示格式为:12位浮点数,阶码4位,包含1位阶符,尾数8位,包含1位数符,用补码表示,阶码在前,尾数(包括数符)在后,已知: X=(-0.1001011)2001 Y=0.11001012-010求Z=XY。要求阶码用移码计算,尾数用原码加减交替除法计算。 解:按照浮点数的格式分别写出它们的表示形式为: X浮 = 1,011 1.00111 Y浮 = 0,111 0.10011 阶码相减 EZ移 = EX移 +-EY补 = 01,011 + 00,001 = 01,100,112,三、浮点除法运算(举例),尾数相除 采用原码加减交替法计算|MX| |MY|,首先写出下例数据: |MX|

45、 = 00.11001 |MY| = 00.10011 -|MY|补 = 11.01101 |MZ| =|MX| |MY| = 1.01010,113,三、浮点除法运算(举例),结果规格化 由于|MX| |MY|,所以|MZ|1,必须右规一位,得|MZ| = 0.10101 0 EZ加1得:EZ移 = 01,100 + 00,001 = 01,101 舍入 对|MZ|进行0舍1入,得|MZ| = 0.10101 MZ原 = 1.10101 MZ补 = 1.01011 最后:Z浮 = 1,101 1.01011,114,四、浮点运算器,115,4.6 浮点运算器举例,80X87算术协处理器,浮点

46、运算流水线,一,二,116,一、 80X87算术协处理器,算术协处理器是一个特殊用途的微处理器,专门是为有效地执行算术或超越函数的运算而设计的。 微处理器截取和执行常规指令系统中的指令,而协处理器只截取和执行协处理器指令。协处理器指令实际上是换码(ESC)指令,微处理器使用这些指令为协处理器产生一个内存地址,使得协处理器可以执行协处理器指令,117,80387的主要性能和结构,80387的性能 可与配套的CPU芯片异步并行工作 支持多种数据类型,S为符号位,0代表正,1代表负。3种浮点数均符合IEEE754标准,即阶码的底为2,阶码值用移码表示,尾数用原码表示,118,80387的主要性能和结

47、构,具有高性能的80位字长的体系结构 具有出色的内部出错管理功能,能检测出6种错误 可在80386/80486微机系统的两种工作模式下运行 扩展了80386/80486的指令系统,119,80387的主要性能和结构,80387的结构 分为两个主要部分:控制单元和数字执行单元。 控制单元(Control Unit,CU)将协处理器连接到微处理器系统数据总线上。微处理器和协处理器均监视指令流,如果为ESC指令,则由协处理器予以执行。 数字执行单元(Numeric Execution unit,NEU)负责执行所有协处理器指令。 NEU中有一个由8个80位寄存器构成的堆栈,用于存储算术指令的操作数和结果。 NEU中还包含状态寄存器、控制寄存器、标记寄存器和异常指针寄存器。 FSTSWAX指令是协处理器允许通过AX寄存器和微处理器直接通信的唯一指令。除了8087,所有新协处理器都包含该指令。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初级教育 > 小学教育

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报