您好,欢迎访问三七文档
§2.2定点加法、减法运算一、补码的加减法运算1、加法任意两个数的补码之和,等于该两数和的补码。[X+Y]补=[X]补+[Y]补(mod2)分四种情况来证明,见课本26页两个数不管正负,均用补码表示,符号位应当做数值参加运算,符号位相加所产生的进位要丢掉,结果为补码。定点运算器——定点加减法例:X=0.1011Y=-0.0101,求X+Y=?解:[X]补=0.1011[Y]补=1.1011+011010.丢掉1[X]补+[Y]补=0.0110X+Y=0.0110定点运算器——定点加减法例:X=-11001,Y=-00011,求X+Y=?解:[X]补=100111[Y]补=111101+001011丢到1[X]补+[Y]补=100100X+Y=-111000由以上两例看到,补码加法的特点:一是符号位要作为数的一部分一起参加运算。二是要在模2的意义下相加,即超过2的进位要丢掉!定点运算器——定点加减法补码的减法:[X-Y]补=[X]补-[Y]补=[X]补+[-Y]补[-Y]补=-[Y]补(证明见课本28页)(-Y)的补码称为[Y]补的机器负数,由[Y]补求[-Y]补的过程称为将[Y]补“变补”或对[Y]补求补。由[Y]补求[-Y]补的方法是:不管Y的真值为正或为负,都是将[Y]补的各位连同符号位在内全求反加1。例x=+0.1101,y=+0.0110,求x-y[x]补=0.1101,[y]补=0.0110[-y]补=1.1010[x]补0.1101+[-y]补1.1010[x-y]补10.0111所以x-y=+0.0111定点运算器——定点加减法练习:X=-0.1011Y=-0.0110,求X-Y=?解:[X]补=1.0101[-Y]补=0.0110+11011.[X-Y]补=1.1011X-Y=-0.0101[x1]补=1.0010[-x1]补=0.1110[x2]补=0.1101[-x2]补=1.0011例已知x1=-0.1110,x2=+0.1101求:[x1]补,[-x1]补,[x2]补,[-x2]补二、溢出及其判别方法:在计算机中,由于机器码的尾数通常是给定的(如16位字长,32位字长),因此,在计算机中数的表示范围是有限的,若两数进行加减运算的结果超出了给定的取值范围,就称为溢出。一旦出现溢出,必须及时处理,否则会出现错误。1、溢出例1:X=1010Y=1001求X+Y解:[X]补=01010+[Y]补=0100110011例2:X=-1010Y=-1011求X+Y解:[X]补=10110+[Y]补=10101010112、溢出原因:1)两个正数太大:产生进位而改变了符号位;2)两个负数绝对值太大:对应的补码太小,不能向符号位产生进位,使符号位相加后,向前产生进位。1、两异号数相加或两同号数相减是否会产生溢出?2、仅当两同号数相加或两异号数相减时才有可能产生溢出?问题:决不会产生溢出正确“溢出”检测方法为了判断“溢出”是否发生,可采用两种检测的方法。第一种方法:采用双符号位法,称为“变形补码”或“模4补码”,可使模2补码所能表示的数的范围扩大一倍第二种溢出检测方法:采用“单符号位法”。当最高有效位产生进位而符号位无进位时,或当最高有效位无进位而符号位有进位时,产生溢出。在定点机中,当运算结果发生溢出时,机器通过逻辑电路自动检查出溢出故障,并进行中断处理。1、双符号位法(参与加减运算的数采用变形补码表示)x2x≥0[x]补=4+x0≥x-2Sf1Sf200正确(正数)01上溢10下溢11正确(负数)Sf1表示正确的符号,逻辑表达式为V=Sf1⊕Sf2,可以用异或门来实现[X]补=00.1100[Y]补=00.1000+01.0100正数太大了,向前有进位,而符号位向前无进位;两个符号位:01,表示溢出例:X=-0.1100Y=-0.1000,求X+Y=?解:[X]补=11.0100[Y]补=11.1000+10.1100负数绝对值太大了对应的补码小,向前无进位,而符号位向前有进位;两个符号位:10,表示溢出溢出逻辑表达式为:V=Sf1⊕Sf2(其中Sf1为最高符号位,Sf2为第二符号位,)定点运算器——定点加减法采用“单符号位法”当最高有效位产生进位而符号位无进位时,产生上溢;当最高有效位无进位而符号位有进位时,产生下溢。故:溢出逻辑表达式为:V=Cf⊕Co其中:Cf为符号位产生的进位,Co为最高有效位产生的进位。(显然:此逻辑关系可用异或门方便地实现)单符号位法CfC000正确(正数)01上溢10下溢11正确(负数)V=Cf⊕C0其中Cf为符号位产生的进位,C0为最高有效位产生例:X=-0.1100Y=-0.1000,求X+Y=?解:[X]补=1.0100[Y]补=1.1000+0.1100最高有效位向前无进位,而符号位向前有进位;表示溢出Cf=1Co=0V=Cf⊕Co=1溢出例:X=-0.100Y=-0.101,求X+Y=?解:[X]补=1.100[Y]补=1.011+1110.两负数相加,结果应为负数,但运算结果为正数,表明有溢出发生。数据向前无进位,符号位向前有进位采用单符号位的判断方法练习:X=0.1100Y=0.1000求X+Y=?并用2种方法判断是否溢出[x]补=0.1100,[y]补=0.1000[x]补0.1100+[y]补0.1000[x+y]补1.0100V=Cf⊕Co=1溢出[x]补=00.1100,[y]补=00.1000[x]补00.1100+[y]补00.1000[x+y]补01.0100V=Sf1⊕Sf2=1溢出三、基本的加法/减法器1、一位全加器FAAiBiCiCi+1Si向高位进位本位输出结果输入输出AiBiCiSiCi+10000000110010100110110010101011100111111表2.2一位全加器真值表两个输出端的逻辑表达式:Si=Ai⊕Bi⊕CiCi+1=AiBi+BiCi+CiAiSi=Ai⊕Bi⊕CiCi+1=AiBi+BiCi+CiAi按此表达式组成的一位全加器示图:Ci+1=(Ai⊕Bi)CiAiBin个1位的全加器(FA)可级联成一个n位的行波进位加减器。M为方式控制输入线,当M=0时,作加法(A+B)运算;当M=1时,作减法(A-B)运算,在后一种情况下,A-B运算转化成[A]补+[-B]补运算,求补过程由B+1来实现。2.3.1定点原码乘法乘法实现方法在现有的加法和减法器的基础上增加适当的以为线路及控制逻辑可以实现用LSI和VLSI工艺实现专用的乘法器编制子程序(单片机等低端机器)2.3定点乘法运算1、定点原码乘法原理[x]原=xf.xn-1…x1x0[y]原=yf.yn-1…y1y0[x.y]原=(xf⊕yf)+(0.xn-1…x1x0).(0.yn-1…y1y0)尾数乘法如下:设x=0.1101,y=0.10110.1101(x)×0.1011(y)110111010000+11010.10001111(z)1、定点原码乘法原理n位乘n位积可能为2n位.乘积的最后是所有部分积之和,有n个数相加,而FA只有两个输入端所以需要改造方法一:硬件实现方法(串行的“加法和移位”),硬件结构简单,速度太慢(时间延迟太长).方法二:不带符号位的阵列乘法器1、定点原码乘法原理设x=0.1101,y=0.1011求x*y部分积乘数部分积初始化为00.000001011部分积右移,前面补0+X0.1101乘数最低位为1,加上被乘数------------------------------------------0110101011部分积右移,前面补00.011010101乘数最低位为1,加上被乘数+X01101------------------------------------------1001110101部分积右移,前面补00100111010乘数最低位为0,加上0+000000------------------------------------------0100111010部分积右移,前面补00010011101乘数最低位为1,加上被乘数+X01101------------------------------------------1000111101部分积右移,前面补00.100011110运算四次结束,数值部分运算2、不带符号位的阵列乘法器不带符号阵列乘法器逻辑图2、不带符号位的阵列乘法器3、带符号位的阵列乘法器求补电路原理:算前求补-乘法器-算后求补,见下图3、带符号的阵列乘法器求补电路小结E=0时,输入和输出相等E=1时,则从数最右端往左边扫描,直到第一个1的时候,该位和右边各位保持不变0⊕A=A,左边各数值位按位取反1⊕A=乛A可以用符号作为E的输入原:1.11110补:1.00010时间延迟分析:转换n+1位带符号的时间延迟为t=n*2T+5T,其中n*2T为或门延迟时间,5T为最高位与门和异或门的时延。不变,左边数值位取反3、带符号的阵列乘法器(间接法)原码/补码例20用带求补器原码乘法器(输入/出:为原码)Y=(+15)*(-13)设最高位为符号位,则输入数据为[x]原=01111[y]原=11101符号位单独考虑,算前求补级后|x|=1111,|y|=1101算后经求补级输出并加上乘积符号位1,则原码乘积值为111000011。换算成二进制数真值是x·y=(-11000011)2=(-195)10十进制数验证:x×y=15×(-13)=-195例21用带求补器补码乘法器(输入/出:为补码)Y=(-15)*(-13)设最高位为符号位,则输入数据为[x]补=10001[y]补=10011符号位单独运算=0,算前求补级后|x|=1111,|y|=1101算后经求补级输出并加上符号乘积符号位0,则原码乘积值为011000011。换算成二进制数真值是x·y=(011000011)2=(+195)10十进制数验证:x×y=(-15)×(-13)=+1952.4定点除法运算0.1101商q0.10110.10010x(r0)被除数-0.010112-1y除数右移1位,减除数0.001110r1得余数r1-0.0010112-2y除数右移1位,减除数0.0000110r2得余数r2-0.00010112-3y除数右移1位,不减除数0.00001100r3得余数r3-0.000010112-4y除数右移1位,减除数-0.00000001r4得余数r4商0还是商1人可以比较后确定,计算机如何确定?余数末位补0后,减去除数右移后的值,导致加法器尾数逐渐增多,最后要求加法器的位数必须位被除数的两倍定点原码一位除法实现方案(手工)0.10010/0.10110.110111011011011011001011011010011010111X/Y=0.1101余数=0.0111*2-4商0还是商1人可以比较后确定,计算机如何确定?2.4定点除法运算2.4.22、不恢复余数的除法加减交替法(不恢复余数法)当i-1次求商的余数为正时,下一次求商的办法是Ri+1=2Ri-Y若Ri0时,则i位上商0,而恢复余数作加法Ri+Y,下一次(即i+1次)求商作减法时Ri+1=2(Ri+Y)-Y=2Ri+YRi≥0Ri+1=2Ri-Y(2表示左移一位)Ri0Ri+1=2Ri+Y2、不恢复余数的除法法则:余数为正,商1,求下一位商的办法是余数左移,减除数余数为负,商0,求下一位商的办法是余数左移,加除数若最后余数与被除数X异号,则需要纠余,增加如下操作:若X、Y同号,用+Y纠余;若X、Y异号,用-Y纠余。2、不恢复余数的除法则x/y=0.1101余数为0.0111*2-4(左移了4次)小结:判断溢出/”0”商的符号由被除数的符号和除数的符号共同决定被除数的位数可以是除数位数的两倍,地位开始放于商的寄存器中.最后一步余数是负数,需要修正再加上除数,移位.直到为正举例p4
本文标题:定点加法减法运算
链接地址:https://www.777doc.com/doc-1746625 .html