您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 定点数乘除运算及实现
定点乘法运算可采用:①原码进行,又有原码一位乘法和原码两位乘法。②补码进行,也有补码一位乘法和补码两位乘法③阵列乘法器来实现。2.3定点乘除法运算及其实现定点乘法运算及其实现⑴原码一位乘法运算规则:被乘数:[X]原=xf.xn-1…x1x0乘数:[Y]原=yf.yn-1…y1y0则积:[X*Y]原=(XSYS)+(X*Y)式中:XS为被乘数符号,YS为乘数符号。1原码乘法乘积符号的运算法则是:“异或”(按位加)运算得到。数值部分的运算方法与普通的十进制小数乘法类似。下面通过一个具体例子从来说明:例:设A=0.1101,B=0.1011,则AB的手工运算过程为:①将多数一次相加,机器难以实现。一般的加法器,只能把两个输入数相加,多个位积的同时输入是无法实现的②机器字长(即加法器)只有n位,而乘积位数增长了一倍,即2n问题:解决方案:(a)把一次求和的操作,变成逐步累加求部分积的操作(b)将求积过程中左移位积的操作,改为位积不动,而是上次部分积右移的操作手工运算过程计算机内运算的实现方法[例]已知:X=-0﹒101,Y=-0﹒110,用原码一位乘法求[X•Y]原=?[X]原=1﹒101[Y]原=1﹒110②[X•Y]原=1⊕1+(0﹒101)×(0﹒110)③则(0﹒101)×(0﹒110)的过程为:0﹒000+00﹒000———————————0﹒000+X0﹒101—————————————————0﹒10100﹒00000﹒01010+X—————————————————0﹒1010﹒111100﹒011110解:用原码一位乘法实现X•Y过程为:①所以:[X•Y]原=0+0﹒011110=0﹒011110例:已知X=+0.1101,Y=-0.1011,求Z=X·Y。解:[X]原=0.1101【Y】原=1.1011②[X•Y]原=0⊕1+(0﹒1101)×(0﹒1011)③则(0﹒1101)×(0﹒1011)的过程为:所以:[X•Y]原=[Z]原=1+0.10001111=1.10001111Z=-0.10001111原码一位乘法的乘法器结构框图如图:所示:原码一位乘法的乘法器工作原理:乘法开始时,“启动”信号使控制触发器Cx置“1”,于是开启时序脉冲T。当乘数寄存器R1最末位为“1”时,部分积Zi和被乘数X在加法器中相加,其结果输出至R0的输入端。一旦打入控制脉冲T到来,控制信号LDR0使部分积右移一位,与此同时,R1也在控制信号LDR1作用下右移一位,且计数器i计数一次。当计数器i=n时,计数器的溢出信号使触发器Cx置“0”,关闭时序脉冲T,乘法宣告结束。原码两位乘法:基本原理类似:只是从最低位开始,每次取两位乘数与被乘数相乘,得到一次部分积,与上次部分积相加后右移2。有关原码两位乘法具体操作过程不再详细讨论2补码乘法补码一位乘法补码与真值的关系:例:已知【Y】补=Y0.Y1Y2‥‥Yn,证明真值:Y=(-Y0)+Yi×2-ii=1n∑证明:①当Y0时,Y0=0则真值Y=(-0)+0.Y1Y2‥‥Yn=i=1n∑Yi×2-i②当Y0时,Y0=1依补码的定义:Y=【Y】补-2=1.Y1Y2‥‥Yn-2=-1+0.Y1Y2‥‥Yn=-1+i=1n∑Yi×2-i所以:Y=(-Y0)+i=1n∑Yi×2-i[例]已知:[N]补=1.1101,[-N]补=10011,求[N]补,[-N]补具有的数值[N]补=1.1101具有的数值为:解:N=-1×20+1×2-1+1×2-2+0×2-3+1×2-4[-N]补=10011具有的数值为:-N=-1×24+0×23+0×22+1×21+1×20=(-13)10=(-0.1875)10由补码与真值转换公式真值:Y=(-Y0+)i=1n∑Yi×2-i=-Y0*20+Y1*2-1+Y2*2-2+…+Yn*2-n=-Y0*20+(Y1*20-Y1*2-1)+(Y2*2-1-Y2*2-2)+…+=(Y1-Y0)*20+…+(Yn+1-Yn)*2-n+(Y2-Y1)*2-1在最后1位后再补1位(Yi+1-Yi)*2-ii=0n=[例]已知:[N]补=0.1101,[-N]补=1.0011,求[N]补,[-N]补具有的数值。[解:][N]补=0.1101具有的数值为:N=(1-0)×2-0+(1-1)×2-1+(0-1)×2-2+(1-0)×2-3+(0-1)×2-4=13/16[-N]补=1.0011具有的数值为N=(0-1)×2-0+(0-0)×2-1+(1-0)×2-2+(1-1)×2-3+(0-1)×2-4=-13/16补码乘法公式:[X·Y]补=[X]补·[Y]补=[X]补·Y证明过程:略由补码乘法公式及补码与真值的关系得:[X·Y]补=[X]补•Y=[X]补【(Y1-Y0)20+(Y2-Y1)2-1+‥(Yn+1-Yn)2-n】(Yi+1-Yi)*2-ii=0n•=[X]补•上式中Yn+1-Yn只有4中情况:0-0=00-1=-11-0=11-1=0下面通过例子来熟悉补码一位乘法的操作过程:+0+[-X]补+[X]补+0[例]已知:X=-0﹒101,Y=-0﹒110,用补码一位乘法求(X•Y)补解:用补码实现X•Y过程为:①[X]补=1﹒011[Y]补=1﹒010②[Y]补=1﹒0100③则用补码一位乘法的过程为:0﹒000+00﹒000———————————0﹒000+[-X]补0﹒101————————————0﹒10100﹒00000﹒01010[X]补—————————————1﹒0111﹒101101﹒110110[-X]补=0﹒101+[-X]补0﹒101—————————————————0﹒011110[X•Y]补=0.011110所以:实现补码一位乘法的乘法器的逻辑框图如图所示补码两位乘法:是把补码的一位乘法的两个单步操作和并成一个操作。即:【(Zi+2)补】=2-2{【Zi补】+(Yn+1+Yn-2Yn-1)】·【X】补}3阵列乘法器.不带符号的阵列乘法器例:4×4位不带符号的阵列乘法器逻辑图:2.3.2定点除法运算及其实现除法运算可采用:①原码进行,又有恢复余数法和不恢复余数法②补码进行,采用加减交替法③阵列除法器1.原码除法运算:是指用原码表示两数相除,求出原码表示的商⑴运算规则:设有n位定点小数(定点整数也同样适用):被除数x:[x]原=xf.xn-1…x1x0除数y:[y]原=yf.yn-1…y1y0则有商q其原码为:[q]原=(xf⊕yf)+(0.xn-1…x1x0/0.yn-1…y1y0)原码除法中据对余数的处理不同,又可分为:恢复余数法和加减交替法例:X=0.1001,Y=-0.1101,手算X/Y的过程为:恢复余数法的计算过程和手算相似:原码恢复余数法解:符号位为:1数码的手算过程为:最后:余数:R=+0.00012-4商:Q=-0.1011(1)每次都是由心算来比较余数和除数的大小,余数大时,商1;余数小时,商0。第一次比较时,余数就是被除数。(2)每做一次减法,总是保持余数不动,而除数向右移一位。(3)最后据符号位运算的结果给商以正确的符号对上述手算计算过程分析得:为适应机器运算,需要进行改进:(1)用减法来比较余数和除数的大小(2)除数右移改为余数左移。(3)定点除法运算必须要求被除数的高n位小于除数,否则益处下面就通过例子讲一下原码恢复余数法的在计算机的操作过程:例:X=0.1001,Y=-0.1101,用原码恢复余数法求X/Y=?解:0.1001/0.1101用原码恢复余数的过程为:[x/y]原=0⊕1=1(xf⊕yf)+|x|/|y|符号:QS=[|x|]补[|Y|]补[-|Y|]补==0.1001=0.11011.0011余数0商1即q3=1所以0.1001/0.1101用原码恢复余数的过程为:0.1001-︱y︱+[-|y|]补1.0011——————————1.1100余数0商0即q0=0+︱y︱0.1101——————————0.1001左移1位1.0010-︱Y︱1.0011+[-|y|]补——————————0.0101余数0商1即q1=1左移1位0.1010-|Y|+[-|y|]补1.0011——————————1.1101余数0商0即q2=0+︱y︱0.1101———————————0.1010左移1位1.0100-︱y︱+[-|y|]补1.0011——————————0.0111左移1位0.1110+[-|y|]补1.0011———————————0.0001余数0商1即q4=1所以:商:Q=-0.1011,余数:R=+0.00012-4用原码恢复余数法:求|X|/|Y|的解题步骤:y*=︱Y︱先将被除数/余数减去除数得新余数Ri若Ri>0:商“1”,再将Ri左移一位后减除数(即2Ri-y*),得新余数Ri′若Ri0:商“0”,先将Ri+y*,即完成恢复余数的运算,再对Ri+y*左移一位后减除数,即2(Ri+y*)-y*,得新的余数Ri′再将上述过程重复n(除数位数)次,共上n位商最后所得的商和余数即为|X|/|Y|的商及余数}原码恢复余数法算法:X-Y=R↗≥0↘商12R-Y=R≤0商02(R+Y)-Y=R↓→________________↑分析原码恢复余数法得知:①当余数Ri>0时,商“1”,再对Ri左移一位后减除数,即2Ri-y*②当余数Ri<0时,商“0”,先将Ri+y*,再2(Ri+y*)-y*,也即2Ri+y*。原码恢复余数法可归纳为:①当余数Ri>0时,商“1”,做2Ri-y*运算②当余数Ri<0时,商“0”,做2(Ri+y*)-y*运算用原码加减交替法:求|X|/|Y|的解题步骤:先将余数减去除数得新余数Ri若Ri>0:商“1”,做2Ri-y*运算若Ri0:商“0”,做2Ri+y*运算再将上述过程重复n(除数位数)次,共上n位商最后所得的商和余数即为|X|/|Y|的商及余数原码不恢复余数法(加减交替法)原码不恢复余数法算法:X-Y=R↗≥0↘商12R-Y=R≤0商02R+Y=R}→_______________↑↓原码加减法可归纳为:①当余数Ri>0时,商“1”,做2Ri-y*运算②当余数Ri<0时,商“0”,做2Ri+y*运算例:已知:X=-0﹒101,Y=0﹒110求:【x/y】原=?用不恢复余数法解。[X/Y]原=1⊕0+(0﹒101)÷(0﹒110)[X]原=1﹒101[Y]原=0﹒110[-︱Y︱]补=1﹒010则(0﹒101)÷(0﹒110)的原码不恢复余数法的过程为:0﹒101-︱Y︱1﹒010—————————————1﹒111余数0商0即q0=0+︱Y︱0﹒110———————————————0﹒1001﹒000———————————————-︱Y︱1﹒0100﹒010余数0商1即q1=10﹒100-︱Y︱1﹒010———————————————1﹒110余数0商1即q2=11﹒100+︱Y︱0﹒110———————————————0﹒010余数0商0即q3=0〔x/y〕原=1.110余数为:0.010×2-31﹒110解:例:已知:x=0.1011,y=0.1101,求【x/y】原=?用恢复余数及加减交替法解。解:|x|=0﹒1011|y|=0﹒1101(1)恢复余数法解0﹒1011/0﹒1101的过程为:【x/y】原=0⊕0+|x|/|y|[-|y|]补=1﹒0011故【x/y】原=0.1101余数为:0.0111×2-4故:[x/y]原=0.1101余数为:0.0111×2-4@@@@@(2)不恢复余数法解0﹒1011/0﹒1101的过程为:⑴补码除法:指“符号位和数码位一起参加除法运算,参加运算的操作数是补码,求得的商数和余数也是补码。⑵补码除法运算方法:采用加减交替法。⑶补码除法加减交替法的操作过程:2.补码除法运算③重复第②步n-1次④第n次上商后,不再移位及+Y,-Y操作。⑤若商为负数,则
本文标题:定点数乘除运算及实现
链接地址:https://www.777doc.com/doc-3210924 .html