(ALU) 浮点加法、、 ?计算机中均采用补码进行加减运算。?定点整数补码加、减运算规则:[x]补+ [y]补= [x + y]补(mod 2n)[x]补- [y]补= [x]补+ [-y]补= [x-y]补(mod 2n)?定点小数补码加、减运算规则:[x]补+ [y]补= [x + y]补(mod 21)[x]补- [y]补= [x]补+ [-y]补= [x-y]补(mod 21)?补码减法运算可以转换为补码加法运算,这样可以简化运算器的设计。3【】设存放数据的寄存器为8位,x = +1010110,y = -1001001,求[x + y]补。解:首先求出x和y的补码[x]补= 01010110 [y]补= 10110111按补码加法规则,有0 1 0 1 0 1 1 0 [x]补+ 1 0 1 1 0 1 1 1 [y]补0 0 0 0 1 1 0 1 [x + y]补(mod 28)从运算结果来看,最高位上产生了进位1,但在模28的作用下,该位不被保留,所以[x + y]补= 00001101 (mod 28)其符号位为0,说明和为正数。4【】设存放数据的寄存器为8位,x = +1010110,y = +1101001,求[x - y]补。解:首先求出x和y的补码[x]补= 01010110 [y]补= 01101001要将减法转换为加法,先求出[-y]补= 10010111 由此可得0 1 0 1 0 1 1 0 [x]补+ 1 0 0 1 0 1 1 1 [-y]补1 1 1 0 1 1 0 1 [x-y]补(mod 28)所以[x-y]补= 11101101 (mod 28)从运算结果来看,符号位为1,说明差为负数。5【】设存放数据的寄存器为8位,x = +1010110,y = +1001001,求[x + y]补。解:首先求出x和y的补码[x]补= 01010110 [y]补= 01001001按补码加法规则,有0 1 0 1 0 1 1 0 [x]补+ 0 1 0 0 1 0 0 1 [y]补1 0 0 1 1 1 1 1 [x + y]补(mod 28)从运算结果来看,符号位为1,说明为负数。但由于x、y均为正数,其和不可能为负数。究竟是什么原因造成这样的错误呢?6?补码是有一定的数据表示范围的;当两个数的补码相加(减),其和(差)超出特定位数的补码所能表示的数据范围时,称为“溢出”。“溢出”表现为,数的最高有效数字位占据并改变了数的符号位,从而造成数据表示的错误。?补码加减运算必须检测运算结果的“溢出”状态,并将检测结果反馈给处理器。7?几种常用的“溢出”检测方法:⑴根据运算结果的符号与运算数据的符号之间的关系检测“溢出”。设[x]补= xn-1xn-2…x1x0 [y]补= yn-1yn-2…y1y0 [x + y]补= sn-1sn-2…s1s0其中,xn-1、yn-1和sn-1分别为[x]补、[y]补和[x + y]补的符号位。以V 表示“溢出”状态,则有)()(1111????????nnnnsxyxV8⑵根据变形补码两个符号位之间的关系检测“溢出”。变形补码是具有两个符号位的补码;正数的变形补码,其两个符号位为00,负数的变形补码,其两个符号位为11。【】设x = +1010110,y = +1001001,用变形补码求[x + y]补。解:首先求出x和y的变形补码[x]补= 001010110 [y]补= 001001001则有0 0 1 0 1 0 1 1 0 [x]补+0 0 1 0 0 1 0 0 1 [y]补01 0 0 1 1 1 1 1 [x + y]补(mod 29)9当变形补码产生溢出时,数的最高有效数字位会占据并改变两个符号位中的低位,但两个符号位中的高位不会受到影响;因此,变形补码两个符号位中
计算机组成原理电子教案第3章 来自淘豆网www.taodocs.com转载请标明出处.