计算机组成原理第二章.ppt_第1页
计算机组成原理第二章.ppt_第2页
计算机组成原理第二章.ppt_第3页
计算机组成原理第二章.ppt_第4页
计算机组成原理第二章.ppt_第5页
已阅读5页,还剩150页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1,第二章 运算方法和运算器,2.1 序 2.2 定点加减运算 2.3 定点乘法运算 2.4 定点除法运算 2.5 浮点运算,2,2.1 序,为什么要开展运算方法研究? 将一个实际数用机器数(原码、补码、反码)表示,必然会产生机器本身特有的运算规则; 计算机特定的运算方式:定点运算和浮点运算; 运算方法不同,运算器的结构也不同; 通常计算机中只设加法器,如何实现 、 四则运算呢?,3,2.1.1 一个实际数机内表示所面临的问题,将一个数(连同符号)在机器中的数值化表示称为机器数 将原来的数值称为机器数的真值 一个实际数,如 8.75,在机内表示所面临的问题是什么? 要解决三个问题:数符、数码和

2、小数点,4,1、符号的处理,途径只有一条:符号数码化 “0”:代表正号,“1”:代表负号 这种表示源于定义 以原码表示说明,原码定义为:,5,例:X = + 0.1101,Y = 0.1101 原码采用符号+绝对值表示: X原 = 0 + |+ 0.1101| = 0.1101 Y原 = 1 + | 0.1101| = 1.1101 如果从定义出发,则: 若X = + 0.1101,1X0, 则X原= 0.1101 若Y = 0.1101,0 Y-1, 则Y原= 1 ( 0.1101) = 1.1101,6,2、数码的处理,采用二进制数表示 在电子线路中,如果低电平表示0,高电平表示1,则计算

3、机中的每一位(逻辑实现单元)只允许用0和1表示,于是采用了二进制表示,这是一个很自然的想法。,7,(1) 采用二进制数表示,在二进制数表示中只包含两个特殊的元素:0和1 在命题逻辑中,0、1可以代表一个事件的不成立和成立 在符号逻辑中,0、1可以代表伪和真 在数字逻辑中,0、1可以反映数字电路的两个稳定状态,8,(1) 采用二进制数表示,二进制表示数目的效率太低,表示一个较大数字时,书写冗长 例:用8位二进制数才能表示255,即 (11111111)2 = 25510 解决的办法:采用组合二进制数,9,(2) 组合二进制数八、十六进制数,从最低有效位开始,三位一划分组成八进制数,四位一划分组成

4、十六进制数。如: 1 1 0 1 0 1 1 1 1 0 0 1 1 1 0 1 0 1 1 1 1 0 0 1 6571 Q 1 1 0 1 0 1 1 1 1 0 0 1 D79 H 二、八、十六进制在机器中无区别,10,采用八进制还是十六进制? 人为选择问题,计算机字长也能影响这种选择。 字长能被3整除的选用8进制,字长能被4整除选用十六进制表示。例如: 早期小型机一般字长16位,除去1位符号位,结果15能被3整除,采用8进制. 早期微型机,如Intel 4004,只有4位,采用无符号数表示,4能被4整除,故采用十六进制数表示。,11,(3) 采用ASCII表示数字,计算机输入的是ASC

5、II码,输出的也是ASCII码,那么能够直接用ASCII码来表示数字吗? 需要更多的存储空间,例如: 1 000 000 000(10亿) ASCII码: 108(位) 二进制(字长32位):32(位) 硬件在做算术运算时,要复杂得多,12,(4) BCD码,在某些应用中,用二进制表示并不适合,例如:数字钟 输出必须表示为十进制数 内部可以采用二进制计时 输出时,二进制转换成十进制数 更好的存储格式是十进制数序列 十进制的每一位用等价的二进制数表示,13,BCD码(Binary Coded Decimal,以二进制编码的十进制): 用4位二进制数表示一个十进制数 采用BCD码表示十进制 BCD

6、码与ASCII码的低4位相同,转换方便 十进制数取值范围为09,在BCD码中,不采用大于1001的4位二进制数(10101111)使用BCD码的代价,14,3、小数点处理,小数点可否数码化? 如,一个二进制数列10110101 显然不行,无法与数值位相区别,15,任何一个二进制数N均可以表示为: N=2E(ms.m1m2mn) 当E=0,则N= ms.m1m2mn 即表示定点小数,小数点固定在左端,16,当E=n,则N= msm1m2mn 即表示定点整数,小数点固定在最右端 当E=k,nk1,k为一个变量,小数点是浮动的,即浮点数表示,17,2.1.2 运算方法讨论的出发点,基于一个什么样的观

7、点来讨论机器数的运算方法呢? 是否要对所提供的机器数,不分原码、补码、反码,统统讨论一番呢? 回答是:不必 目前几乎所有的计算机都采用了补码运算,原因何在?,18,有符号数,既要表示正数,又要表示负数,通常有三种系统: 符号绝对值法,即原码; 2的补码表示法,即补码; 1的补码表示法,即反码。 从定义知,三种表示法中,正数表示法相同,即X原=X补=X反= X 而负数却有不同的表示法,19,1、符号绝对值法 (原码),符号:最高位,“0”表正,“1”表负 数值部分:二进制的绝对值 比较直观 存在两个“0”,且有“+0”和“0”之分 +0原=000,0原=100 符号是人为规定的,不能参与运算,2

8、0,例:1000+(1011)=0011(3) 若采用原码(符号1位),其计算结果为: 结果为00011(+3) 由于这些不足,限制了它的使用,很快就无人使用原码来表示有符号数了,21,2、2的补码(补码),为什么叫“2的补码”? 一个n位的二进制数X(不管X为任意值),+X补+X补2n,例如: +2补+2补=0010+1110=10000 (24) +3补+3补=0011+1101=10000 (24),22,一个好的数字表示系统需满足: 对称性:(+x)+( x)=0; 满足符号定义规则:“0”表正,“1”表负; 满足借位关系; “0”的表示应该是唯一的; 有符号与无符号数要采用一种编码方

9、法,否则计算机难于处理; 要求符号参加运算,避免单独处理; 数值位易扩展; 由于早期计算机只设加法器,要求减法转换成加法的过程简单,易于实现。,23,(1) 满足对称性(对称性稍差),24,(2) 满足符号定义规则 最高位b3恰好表示补码的符号 b3=0时为正;b3=1时为负。 (3) 满足借位关系 如:24 = 2,用补码计算如下:,25,(4) “0”的表示是唯一的 只有一个0,+0补=0补=0 (5) 有符号与无符号数可采用一种编码方法 上表中,16种编码可作为无符号数处理;换一种解释方式(2的补码),既能表示正数,又能表示负数。 有符号数和无符号数均可用补码表示。,26,(6) 符号可

10、参加运算 若任意两个补码数相加、减,其结果不超出值域范围(+7 -8),结果一定是正确的 (7) 易于数值位扩展 正数扩展时,高位部分填0即可 负数的扩展又应如何进行呢? 计算机在扩展时,只需将其符号位简单地复制到高位,27,例: DATA(8位)=0110 1011 ,位扩展后 DATA(16位)=0000 0000 0110 1011; DATA(8位)=1011 1011,位扩展后 DATA(16位)=1111 1111 1011 1011; (8) 减法转换成加法十分简单 XY补= X+(Y)补=X补+Y补 Y补= Y补+1 (或+2-n),Y补的机器负数,28,补码表示与机器负数的区

11、别:,例. 1 0101原 1 1011,补码表示,1 0011补 0 1101,机器负数,0 0101原 0 0101,补码表示,符号位不变;,负数尾数改变,正数尾数不变。,0 0011补 1 1101,符号位改变,,尾数改变。,机器负数,29,3、1的补码(反码),为什么叫“1的补码”? 因为: 对称性好:从+0与0到+7与7完全对称 生成十分容易 有+0反与0反之分 需要加权操作:当运算结果有进位时,运算结果的末位需要加1操作,30,2.1.3 机器中如何得到二进制补码,整个寄存器被占满 当X0时,用X补=X填充 当X0时,用X补=|X|+1填充 整个寄存器未被占满 要考虑符号扩展问题,

12、将立即数的最高有效位复制到高位部分,然后用原来的立即数填充到低位,31,2.2 定点加减运算,定点加减运算是基于补码的: 补码加减运算 溢出判断 补码加减运算器实现线路 加快加法器运算速度的讨论,32,2.2.1 补码加减运算,加法与笔算的原理一致 X+Y补=X补+Y补 减法通过加法实现:求得减数所对应的负数的补码(Y补),与被减数相加 XY补=X+(Y)补=X补+Y补,33,例1: 已知X补=0.1001,Y补=1.1101 求 X+Y补=? 符号位产生的进位在模2的意义下,会自动舍弃,X+Y补=0.0110就是正确的结果,34,例2: 已知X补=1.0011,Y补=0.0110 求 X+Y

13、补=? 运算结果是以补码表示的负数,35,例3: 已知X补=0.0010 ,Y补=1.1010 求 X-Y补=? 这就是运算求得的正确结果,36,例4: 已知X补=1.1011 ,Y补=0.0110 求 X-Y补=? 符号位产生的进位在模2的意义下,会自动舍弃,XY补=1.0101就是正确的结果,37,2.2.2 溢出判断,当数据寄存器的字长一定时,其运算结果机器允许表示的范围也就确定下来。 若超出这个范围,数值部分的最高位将进入到符号位中,从而改变了符号的性质,这种现象称为溢出。,38,加法溢出:两个正数相加而结果为负数,或者两个负数相加结果为正数 减法溢出:正数减去负数,而结果为负数,或者

14、负数减去正数结果为正数 例如:,39,1、溢出判断方法,根据溢出发生条件,若用Sx,Sy分别表示两个数的符号,用Sf表示结果的符号,则溢出V为:,40,2、溢出判断方法,采用变形补码,设两个符号位 两个不溢出的例子: 两个溢出的例子:,41,2、溢出判断方法,可见: 两个符号值相同时不溢出 两个符号值相异时溢出 设两符号分别是Sf1和Sf2,则溢出V为:,42,3、溢出判断方法,若只设1个符号位,如何判别呢? 进位输出Cout,最高位的输入Cin 如果两者相等,那么不产生溢出; 否则产生溢出。 判溢出逻辑表达式为:,43,两个不溢出的例子: Cout=0, Cin=0 Cout=1, Cin=

15、1 两个溢出的例子: Cout=0, Cin=1 Cout=1, Cin=0,44,2.2.3 补码加减运算器实现线路,设X、Y分别以补码形式存入寄存器A、B,运算结果存入寄存器A ,即 A B A X补=X0.X1X2Xn Y补=Y0.Y1Y2Yn A=A0.A1A2An B=B0.B1B2Bn,45,则补码加法、补码减法运算分别为:,46,实现补码加减运算的逻辑电路,47,ADD(加)控制信号为: +A,+B,A,CPA SUB(减)控制信号为: +A,+ ,+1,A,CPA 控制信号的产生条件为: +A = ADD+SUB +B = ADD + = SUB +1 = SUB A = AD

16、D+SUB CPA= ADD+SUB,48,2.2.4 加快加法器运算速度的讨论,加法器是一个三端输入、两端输出的逻辑网络 产生快速加法器的关键在于:求和()和进位(C)的形成过程,49,1、第一个问题求和,i产生的条件:当Ai、Bi、Ci-1中“1”的个数为奇数时,i =1: 第一次半加只考虑本位的两个输入; 第二次半加再考虑低位向高位的进位 。,50,(1) i,且i=1,,串行加法器,51,(2) i,且i=1n,并行加法器,52,2、第二个问题进位链,进位链的产生条件:当Ai、Bi、Ci-1三个变量中“1”的个数 2时,Ci=1,53,AiBi项:只与本位数值有关,称为本位进位生成函数

17、,记作Gi (AiBi)Ci-1项:低位产生的进位Ci-1是否能向高位传播,取决于AiBi项 若AiBi =1,则向上传递 若AiBi =0,则断开称AiBi项为进位传递函数,记作Pi,54,Ci = Gi + PiCi-1 以4位为例,即i = 1, 2, 3, 4: C1 = G1 + P1C0 C2 = G2 + P2C1 C3 = G3 + P3C2 C4 = G4 + P4C3 这种进位方式称为串行进位,55,采用代入法: C1 = G1 + P1C0 C2 = G2 + P2(G1 + P1C0) = G2 + P2G1 + P2P1C0 C3 = G3 + P3G2 + P3P2

18、G1 + P3P2P1C0 C4 = G4 + P4G3 + P4P3G2 + P4P3P2G1 + P4P3P2P1C0 进位输出信号同时产生,称为并行进位,或超前进位,56,并行进位链线路,57,随着加法器字长的增加,进位函数Ci所涵盖的逻辑项越来越多 电路结构变得十分复杂 且受到元器件扇入系数的限制 采用全并行方式变得不能,于是设计者采用一些折衷方案 一种常用的方式是采用分组同时进位:组内并行,组间也并行的进位 以16位加法器为例,将其分为4组,每组4位,58,(1) 组间并行进位,组间进位只与每小组的最高进位(C4、C8、C12、C16)有关 C4 = G4 + P4G3 + P4P3

19、G2 + P4P3P2G1 + P4P3P2P1C0 G4+P4G3+P4P3G2+P4P3P2G1:只与本组生成的进位有关,称为本组进位生成函数,记作Gi* P4P3P2P1:是C0能否向高组传播的条件,称为组间进位传递函数,记作Pi*,59,G1*=G4+P4G3+P4P3G2+P4P3P2G1 P1*=P4P3P2P1 G2*=G8+P8G7+P8P7G6+P8P7P6G5 P2*=P8P7P6P5 G3*=G12+P12G11+P12P11G10+P12P11P10G9 P3*=P12P11P10P9 G4*=G16+P16G15+P16P15G14+P16P15P14G13 P4*=

20、P16P15P14P13,60,小组间的进位分别为C4、C8、C12、C16: C4=G1*+P1*C0 C8=G2*+P2*G1*+P2*P1*C0 C12=G3*+P3*G2*+P3*P2*G1*+P3*P2*P1*C0 C16=G4*+P4*G3*+P4*P3*G2*+P4*P3*P2*G1* +P4*P3*P2*P1*C0,61,(2) 组内并行进位逻辑改造,第1小组产生G1*、P1*和C3、C2、C1,不产生C4 第2小组产生G2*、P2*和C7、C6、C5,不产生C8 第3小组产生G3*、P3*和C11、C10、C9,不产生C12 第4小组产生G4*、P4*和C15、C14、C13

21、,不产生C16,62,第1小组并行进位及G1*、P1*产生线路,63,组间并行进位线路,64,用4位ALU及超前进位单元构造16位加法器,65,2.3 定点乘法运算,手算方法及其硬件实现 采用递推算法 算法的进一步改造 带符号数乘法,66,2.3.1 手算方法及其硬件实现,手算的例子:,67,存在三个问题: 小数点是移动的; 一次需进行n个数相加,常规的加法器一次只能进行两个数加; 若n位被乘数与m位乘数之积是一个n+m位的数,需n+m个加法单元。,68,第一个问题:依据补位的方法,通过等值变换使结果数的小数点固定到高位 第二个问题:可将n个数一次相加变为连续的加操作,69,第一种用硬件实现的

22、乘法器,70,第一种乘法算法,71,2.3.2 采用递推算法,在手算方法中 被乘数寄存器中总有一半的位数为0,64位ALU显得有些浪费 影响加法器的速度 能否将乘积右移,而不是将被乘数左移? 被乘数相对于乘积而言是固定不动的,小数点也固定下来,72,算法改造: XY=X0.1011 = 0.1X+0.00X+0.001X+0.0001X = 0.1X+0.0X+0.01X+0.001X = 0.1X+0.10+0.1X+0.01X = 0.1X+0.10+0.1X+0.1X 因为0.1=2-1,于是有递推表达式: XY = 2-1X+2-10+2-1X+2-1X+0 其中2-1指前次和右移一位

23、,73,若X=0.1101,Y=0.1011,采用递推算法:,74,第二种乘法器的硬件实现,75,讨论:,由于相加只需要n位进行,若做32位加法,加法器的字长只要32位就足够了 64位长的乘积寄存器,左半边的值会发生改变 在第二种乘法器的基础上是否可以进一步减少硬件资源呢?,76,2.3.3 算法的进一步改造,由于乘数Y运算后无需保留,可将判Yi的操作固定在最低位 每进行一步操作,乘数Y右移一位,乘数寄存器的高位部分就空余下来 可以让乘积的低位部分和乘数的有效位组合一起,共用一个寄存器,乘数被放到乘积的低位(即右半部分)即可,77,第三种乘法器的硬件实现,78,第三种乘法算法,79,例:求0.

24、11010.1011=?,80,2.3.4 带符号数乘法,带符号数乘法:先将乘数和被乘数转换成正数(即绝对值),计算|X|Y|,依据XSYS计算乘积的符号原码一位乘法 布斯(Booth)夫妇提出Booth算法,实现补码一位乘法,核心是递推算法 在常规的冯诺依曼机中,一个好的乘法运算只能通过递推算法来解决,81,1、校正法,设X补=X0.X1X2Xn Y补=Y0.Y1Y2Yn (1) 被乘数X符号任意,Y0,则 X补=X0.X1X2Xn , Y补=0.Y1Y2Yn=Y 若X0,与无符号数乘法操作相同; 若X0,则 X补=2+X=2n+1+X (mod 2),82,于是: X补Y补=(2n+1+X

25、)Y =2n+1(0.Y1Y2Yn)+ XY =2n+1 + XY =2 + XY 1的正整数,2 2 (mod 2),83,则有, X补Y补=2+ XY=XY补 或写成: XY补=X补(0.Y1Y2Yn),84,(2) 被乘数X符号任意,Y0,则 X补=X0.X1X2Xn, Y补=1.Y1Y2Yn 根据补码定义规则,若Y0,则 Y补=2+Y 所以 Y=Y补2 =1.Y1Y2Yn2 =0.Y1Y2Yn1,85,XY= X0.Y1Y2YnX XY补=X0.Y1Y2Yn补+X补 =X补(0.Y1Y2Yn)+X补 结论:不管被乘数的符号如何, 若乘数为正,可像无符号数乘法一样运算; 若乘数为负,运算

26、方法不变,在最后一步加X补校正即可。,86,2、Booth算法,将校正法的两种情况写成统一公式为: XY补=X补(0.Y1Y2Yn)+X补Y0 Booth算法将上式写成递推形式 : XY补=X补(0.Y1Y2Yn)+X补Y0 =X补(2-1Y1+2-2Y2+2-nYn) +X补Y0 其中,2-1Y1= Y12-1Y1 2-2Y2= 2-1Y22-2Y2 ,87,于是有: XY补=X补Y0+( Y12-1Y1)+(2-1Y2 2-2Y2)+(2-(n-1)Yn2-nYn) =X补(Y1Y0)+2-1(Y2Y1) + +2-n (0Yn) 若设Yn+1 =0,可写成: XY补=X补(Y1Y0)+2

27、-1(Y2Y1) + +2-n (Yn+1Yn) =(Y1Y0)X补+2-1(Y2Y1)X补+ +2-1(Yn+1Yn)X补+0,88,将上式写成递推形式: Z0补=0 Z1补=2-1Z0补+(Yn+1Yn)X补 Z2补=2-1Z1补+(YnYn-1)X补 Zn补=2-1Zn-1补+( Y2Y1)X补 XY补=Zn+1补=Zn补+(Y1Y0)X补,89,将相邻两位乘数之差值Yn+1Yn改为 判断两位Yn、Yn+1,90,Booth算法操作如下: 参加乘法运算的两个数用补码表示,其结果乘积也为补码; 设部分积的初始值为0,设两个符号位;乘数Y补采用单符号位,且设Yn+1=0;被乘数X补为双符号位

28、; 操作内容根据判断位Yn、Yn+1进行(如前表),移位补码按补码补位规则; 运算n+1步,最后一步不移位。,91,例:X = 0.1101, Y = 0.1011, 求XY补,92,3、补码两位乘法,补码两位乘法是将Booth算法的两步合为一步进行 n位乘法一般只需n/2次操作,从而进一步加快了执行速度,93,94,补码两位乘法算法描述如下: 参加乘法运算的两个数用补码表示,其结果乘积也为补码; 设部分积的初始值为0,设三个符号位。乘数Y补,若其数值部分的位数为偶数,前设两个符号位;若其数值部分的位数为奇数,采用单符号位。且设Yn+1=0。被乘数X补采用三符号位; 根据Yn-1、Yn、Yn+

29、1三个判断位确定操作内容(如前表); 若乘数的数值部分的位数为偶数,最后一步不移位;若其数值部分的位数为奇数,最后一步移一位。,95,例:X = 0.111111,Y = 0.111001, 求XY补 X补=111.000001,X补=000. 111111, Y补=00. 111001,XY补=1.000111111001,96,2.4 定点除法,手算的例子:,97,计算机无法一眼看出除数是否比被除数小 算法的第一步要用被除数减去除数 如果余数为正,说明够减,在商的位置上填1; 如果余数为负,说明不够减,在商的位置上填0,将除数加到余数中去,使其恢复原值。 接下来除数右移一位,重复这一过程,

30、98,恢复 恢复,99,2.4.1 手算除法硬件实现,100,除数寄存器、ALU,以及余数寄存器的宽度都是64位 商寄存器的字长是32位 算法中的每一步都要将除数右移一位,在初始化时要将除数放在64位寄存器的左半部分(高32位),每算完一步,将其右移一位,使之与被除数相应的部分对齐 余数寄存器初始化存入被除数的值,101,102,2.4.2 算法硬件实现的第一次改造,除数寄存器64位中,只有一半空间存放的是有用的信息,且ALU宽度也设置了64位 如果使除法寄存器固定下来,让余数寄存器中的数据向左移动来对齐 除数寄存器的长度可以减少一半 ALU宽度也可减少一半,设置32位ALU就足够了,103,

31、104,2.4.3 算法硬件实现的第二次改造,余数寄存器的移位与商寄存器的移位都是向左的(左移)。 如果将余数寄存器的移位操作和上商操作同时进行,使余数寄存器移位时空出的一位正好用来存放上的商值,就可省掉商寄存器。 余数和商共处一个寄存器,余数在左半部分,商在右半部分。,105,106,107,2.4.4 带符号数除法,带符号除法分为两种情况: 一种是符号单独处理,称为原码一位除法; 另一种是符号参与运算,称为补码一位除法。,108,1、原码恢复余数法,符号单独处理,Q=XSYS ; 商值由被除数与除数原码的数值部分相除得到; 被除数减去除数,若余数小于0,运算开始;否则,溢出,运算结束。 操

32、作内容:若余数为正,商上1,左移一位,做减法(+Y补);若余数为负,商上0,恢复余数,左移一位,做减法; 重复n步,最后一步余数为负,应恢复为正余数; 将商符与商值拼接得到商的原码。,109,例:求,110,商的数值位为.10110,符号位异或为0,故: 商:+0.10110,余数:0.101102-5,111,2、原码不恢复余数法,设连续三个余数为:Ri-1,Ri,Ri+1 Ri=2Ri-1-Y,上商和下一步操作: 够减(Ri0):商上1,Ri+1=2Ri-Y; 不够减(Ri0):商上0,恢复余数(Ri+Y),左移一位(2(Ri+Y),做减法(2(Ri+Y)-Y)。 即:Ri0时,可不恢复余

33、数,直接做Ri+1=2(Ri+Y)-Y=2Ri+Y操作。 原码不恢复余数法也称原码加减交替法,112,例:求,113,商的数值位为.10110,符号位异或为0,故, 商:+0.10110,余数:0.101102-5,114,讨论:,原码不恢复余数法比恢复余数法好吗? 其实不然! 如果对写回结果加一个控制信号:当Ri0,写回;当Ri0时同样的操作,2Ri-Y即可。 计算机算法不是一个单纯的求解过程,要与机器的实现结合起来。,115,3、补码加减交替法,除法过程分为:比较、上商、求新余数 符号参加运算涉及:上商符、商的校正 (1) 比较与上商 运算中既存在两个数同号比较,也存在两个数异号比较 就上

34、商而言,两个数的比较应该是绝对值比较 被除数与除数的比较过渡到余数和除数的比较,116,117,讨论: 如何进行比较操作呢? 随着除法的进行,余数的绝对值将越来越小。 若两个数同号,需要做减法; 若两个数异号,需要做加法。 最终使余数的绝对值越来越小。,118,如何上商呢? 作为补码商 若为正商,够减商上1,不够减商上0; 若为负商,商值(不包括符号)除最末一个1与所上商值相同外,其余要与所上商值相反。 上商值的过程存在歧义性。 考虑到,一个数的补码与反码只有最末位相差1。 通常做法是上反码商,最后修正,使其得到补码商。,119,第一组:符号相同除法例,同号 同号 同号 异号 余数与除数同号,

35、够减,上商值1 余数与除数异号,不够减,上商值 0,120,第二组:符号相异除法例,异号 异号 异号 同号 余数与除数异号,够减,商上0(反码商, 商为1时上0) 余数与除数同号,不够减,商上1(反码商, 商为0时上1),121,(2)下一步操作(Ri+1) X补与Y补同号,做减法 够减:Ri+1补=2Ri补Y补 不够减:Ri+1补=2(Ri补+Y补)Y补 =2Ri补+Y补 X补与Y补异号,做加法 够减:Ri+1补=2Ri补+Y补 不够减:Ri+1补=2(Ri补Y补)+Y补 =2Ri补Y补,122,前表,删除R补与Y补符号一栏中的“够减”、“不够减”项,得:,123,(3)上商符, 第一步X补

36、Y补 若X补与Y补同号,X补Y补 若X补与Y补异号,X补+Y补 这样上的商为正确的商符。 将被除数作为余数R0处理 若R0补与Y补同号,上商符1 若R0补与Y补异号,上商符0 这样上的商符与正确值相反,为假商符, 通过求反加以校正。,124,(4) 商的校正,考虑到除法求得的商值(若除不尽)总是近似的,其误差为2-n 在硬件线路上一般采用“末位恒置1”的办法,使线路得以简化,其误差在允许的范围内 对第种上商符号方案:采用末位恒置1,即加2-n修正; 对第种上商符号方案:假商加(1+2-n),获得校正后的真商。,125,(5) 关于余数的符号,要注意的是,必须始终遵循如下等式 被除数=商除数+余

37、数 被除数为7,除数为2的各种组合情况: (+7)(+2) 商= +3,余数= +1 验算一下:7=32+(+1)=6+1,126,(-7)(+2) 商= -3,求余数: 余数=(被除数商除数) = -7-(-3)(+2)= -7-(-6)= -1 (-7)(+2):商= -3,余数= -1 验算一下:-7= -32+(-1)= -6-1 商=-4,余数=+1,也满足除法基本等式, 为什么不能将它们作为最终的结果呢?,127,因为如此一来,商的绝对值会随着 被除数和除数的符号的不同而不同。 导致: (XY)(X) Y 规定:无论除数和商的符号如何,余数的符号都必须与被除数的符号一致。 另外两种

38、情况: (+7)(-2):商= -3,余数= +1 (-7)(+2):商= +3,余数= -1,128,例:求 X补=00.1000,Y补=11.0110, -Y补=00.1010 (1) 采用第种上商符号方案,129,假商:1.001 真商:1.001+0.0001=1.0011(补码) 余数:2-41.1110=1.11111110(补码),130,(2) 采用第种上商符号方案,131,假商:0.001 真商:0.001+1.0001=1.0011(补码) 余数:2-41.1110=1.11111110(补码) 注:在算法中,由于商的末位恒置1,故 上商少进行一次。,132,2.5 浮点运

39、算,浮点数加法 浮点数乘法,133,阶码,尾数,阶符,数符,R:阶码底,隐含约定。,E:阶码,为定点整数,补码或移码表示。 其位数决定数值范围;,阶符表示数的大小。,M:尾数,为定点小数,原码或补码表示。 其位数决定数的精度;,数符表示数的正负。,尾数规格化:1/2 M 1,最高有效位绝对值为1,浮点表示法,1. 格式,134,2. 表示范围与精度,表示范围:,-231 231 (1-2-9),例.某规格化浮点数用补码表示,其中阶码6位,含1位阶符;尾数10位,含1位数符。,阶符1位,阶码m+1位,补码表示,以2为底; 数符1位,尾数n+1位,补码表示,规格化。,最小浮点数:,最大浮点数:,最

40、小浮点正数:,阶码为最大数:,尾数为绝对值最大的负数:,-1,尾数为最大数:,阶码为最大数:,阶码为最小数:,尾数为最小正数:,2-1,表示精度:,2-33,135,IEEE 754标准浮点格式,有三种浮点格式: 短实数: 长实数: 临时实数:,136,说明:,s为数符; e:阶码,以2为底,移码表示,但与原理性偏置量有些差异。 例如:阶码为8位,偏置量为127(非128) m:尾数,纯小数,数符不包括在尾数中。 真正的尾数为1.m,137,例1. 将十进制数178.125表示成单精度浮点数 (1) 先将十进制数178.125表示成二进制数: (178.125)10 = (10110010.0

41、01)2 (2) 再表示成二进制规格化科学计数法形式: 10110010.001 = 1.011001000127 (3) 计算出偏移阶码e: e=111+01111111=10000110 (4) 表示成单精度浮点数 01000011001100100010000000000000(小数点前面的1和小数点隐含),138,例2:若32位浮点数为C1C90000H,求其对应的十进制数。 (1) 将C1C90000H表示成单精度浮点数 11000001110010010000000000000000 (2) 计算出偏移阶码的真值 10000011-01111111=100 (3) 表示成浮点规格化数 1.100100124 (小数点前面的1和小数点显现出来) (4) 写成非规格化二进制数 -11001.001 (5) 转换成十进制数 -25.125,139,2.5.1 浮点数加法,浮点数加法分以下几个步骤: 求阶差对大阶比较两个数的阶码部分,将阶码较小的数右移,直至其阶码与另一个数一样为止。 尾数相加将两个数的尾数相加。,140,规格化处理对尾数进行规格化,使其满足(P36):右规:左规:,141,判溢出检查阶码部分是否发生溢出 舍入处理 将尾数多余的位舍去。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论