搜索

定点数乘除运算及实现

gecimao 发表于 2019-07-30 16:34 | 查看: | 回复:

  定点数乘除运算及实现_计算机软件及应用_IT/计算机_专业资料。2.3 定点乘 ?除法运算及其实现 定点乘法运算及其实现 定点乘法运算可采用: ①原码进行,又有原 码一位乘法和原码两位乘法。 ②补码进行,也有补码一位乘法和补码两位乘法 ③阵列乘法器来实现。

  2.3 定点乘 ?除法运算及其实现 定点乘法运算及其实现 定点乘法运算可采用: ①原码进行,又有原 码一位乘法和原码两位乘法。 ②补码进行,也有补码一位乘法和补码两位乘法 ③阵列乘法器来实现。 1 原码乘法 ⑴ 原码一位乘法 运算规则: 被乘数: [X]原 =xf .xn-1…x1x0 乘 数: [Y]原 =yf .yn-1…y1y0 则积: [X*Y]原 =( XS ? YS ) +( ?X ? * ? Y ? ) 式中: XS为被乘数符号, YS为乘数符号。 乘积符号的运算法则是:“异或”(按位加)运算得到。 数值部分的运算方法与普通的十进制小数乘法类似。 下面通过一个具体例子从来说明: 例:设A=0.1101,B=0.1011,则A?B的手工运算过程为: 问题: ①将多数一次相加,机器难以实现。一般的加法器,只能 把两个输入数相加,多个位积的同时输入是无法实现的 ②机器字长(即加法器)只有n位,而乘积位数增长了一倍, 即2n 解决方案: (a) 把一次求和的操作,变成逐步累加求部分积的操作 (b) 将求积过程中左移位积的操作,改为位积不动,而是上次部分积右移的 操作 手工运算过程 计算机内运算的实现方法 [例] 已知: X=-0﹒101,Y=-0 ﹒110,用原码一位乘法求[X ?Y ]原=? 解:用原码一位乘法实现X ?Y过程为: ① [X]原=1 ﹒ 101 [Y]原=1 ﹒ 110 ② ③ [X ?Y ]原 = 1⊕1+ (0﹒ 101) ×(0﹒ 110) 则(0﹒ 101) ×(0﹒ 110)的过程为: 0﹒ 0 0 0 +0 0﹒ 0 0 0 ——————————— 0﹒ 0 0 0 0﹒ 0 0 0 0 +X 0﹒ 1 0 1 ————————————————— 0﹒ 1 0 1 0 0﹒ 0 1 0 1 0 +X 0﹒ 1 0 1 ————————————————— 0﹒ 1 1 1 1 0 0﹒ 0 1 1 1 1 0 所以:[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.10001111 Z= -0.10001111 原码一位乘法的乘法器结构框图如图:所示: 原码一位乘法的乘法器工作原理: 乘法开始时,“启动”信号使控制触发器Cx置“1”,于是开启时 序脉冲T。 当乘数寄存器R1最末位为“1”时,部分积Zi和被乘数X在加法器 中相加, 其结果输出至R0的输入端。 一旦打入控制脉冲T到来,控制信号LDR0使部分积右移一位,与 此同时,R1也在控制信号LDR1作用下右移一位,且计数器i计数 一次。 当计数器i=n时,计数器的溢出信号使触发器Cx置“0”,关闭时 序脉冲T, 乘法宣告结束。 ? 原码两位乘法:基本原理类似:只是从最低位开始,每次 取两位乘数与被乘数相乘,得到一次部分 积,与上次部分积相加后右移2。有关原 码两位乘法具体操作过程不再 详细讨论 2 补码乘法 ? 补码一位乘法 ? 补码与真值的关系: 证明线 证明: 例:已知【Y】补= Y0.Y1 Y2‥‥ Yn, n ①当 Y ?0时, Y 0=0 则线‥‥ Yn=∑ Yi ×2 -i n ②当 Y ? 0时, Y 0=1 依补码的定义: i=1 Y = 【Y】补-2= 1.Y1 Y2‥‥ Yn -2 =-1+ 0.Y1 Y2‥‥ Yn n = -1 + Yi ×2 -i ∑ 所以: Y=(-Y0)+ ∑ Yi ×2 -i i=1 i=1 n [例] 已知: [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 = (-0.1875)10 [-N]补=10011 具有的数值为: -N=-1×24+0×23+0×22+1×21+1×20=(-13)10 由补码与线*2-1 + Y2*2-2 + … + Y n*2-n = -Y0*20 + (Y1*20-Y1*2-1) + (Y2*2-1 -Y2*2-2) + … + = (Y1-Y0)*20 + (Y2-Y1)*2-1 + …+ (Yn+1-Yn)*2-n = i=0 (Yi+1 - Yi ) * 2-i ? n 在最后1位后再补1位 [例] 已知: [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 · 补 = [X]补· 补 Y] [Y] 证明过程: 略 = [X]补· Y 由补码乘法公式及补码与真值的关系得: [X · 补 = [X]补?Y Y] = [X]补? 【(Y1-Y0)20+(Y2-Y1)2 -1 +‥(Yn+1-Yn) 2-n】 n = [X]补 ? (Yi+1 - Yi ) * 2-i ? i=0 + 0 0-0 = 0 0-1 =-1 + [- X]补 上式中Yn+1-Yn 只有4中情况: + [X]补 1-0 =1 + 0 1-1 = 0 下面通过例子来熟悉补码一位乘法的操作过程: [例] 已知: X=-0﹒101,Y=-0 ﹒110,用补码一位乘法求(X ?Y)补 解:用补码实现X ?Y过程为: ① [X]补=1 ﹒ 011 ② [Y]补= 1 ﹒ 0100 [Y]补=1 ﹒ 010 [-X]补=0 ﹒ 101 ③ 则用补码一位乘法的过程为: 0﹒ 0 0 0 +0 0﹒ 0 0 0 ——————————— 0﹒ 0 0 0 0﹒ 0 0 0 0 +[-X]补 0﹒ 1 0 1 ———————————— 0﹒ 1 0 1 0 0﹒ 0 1 0 1 0 [X]补 1﹒ 0 1 1 ————————————— 1﹒ 1 0 1 1 0 1﹒ 1 1 0 1 1 0 +[-X]补 0﹒ 1 0 1 ————————————————— 0﹒ 0 1 1 1 1 0 所以: [X ?Y ]补 =0. 011110 实现补码一位乘法的乘法器的逻辑框图如图所示 ? 补码两位乘法:是把补码的一位乘法的两个单步操作和并成一个操作。 即: (Z i+2)补】=2-2 {【 Z i补】+ (Yn+1 +Yn-2Y n-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 数码的手算过程为: 最后: 商:Q=-0.1011 余数:R=+0.0001?2-4 对上述手算计算过程分析得: (1) 每次都是由心算来比较余数和除数的大小,余数大时,商1; 余数小时,商0。第一次比较时,余数就是被除数。 (2) 每做一次减法,总是保持余数不动,而除数向右移一位。 (3)最后据符号位运算的结果给商以正确的符号 为适应机器运算,需要进行改进: (1) 用减法来比较余数和除数的大小 (2) 除数右移改为余数左移。 (3)定点除法运算必须要求被除数的高n位小于除数,否则益处 下面就通过例子讲一下原码恢复余数法的在计算机的操作过程: 例:X=0.1001,Y=-0.1101,用原码恢复余数法求X/Y=? 解: ? ? [x/y]原= (xf⊕yf)+ x / y 符号:QS= 0⊕1=1 ? 0.1001/ 0.1101用原码恢复余数的过程为: [ x ]补 =0.1001 [ Y ]补 =0.1101 [- Y ]补= 1.0011 所以0.1001/ 0.1101用原码恢复余数的过程为: 0. 1 0 0 1 +[- y ︱ - ︱ y]补 1. 0 0 1 1 —————————— 1. 1 1 0 0 余数0 商0即q0=0 + ︱ y ︱0. 1 1 0 1 —————————— 0. 1 0 0 1 左移1位 1. 0 0 1 0 - ︱ Y补 1. 0 0 1 1 +[- y ] ︱ —————————— 0. 0 1 0 1 余数0 商1即q1=1 左移1位 0. 1 0 1 0 +[- - ]补 1. 0 0 1 1 y Y —————————— 1. 1 1 0 1 余数0 商0即q2=0 + ︱y ︱ 0. 1 1 0 1 ——————————— 0. 1 0 1 0 左移1位 1. 0 1 0 0 +[- y ︱ - ︱ y]补 1. 0 0 1 1 ——————————余数0 商1即q3=1 0. 0 1 1 1 左移1位 0. 1 1 1 0 +[- y ]补 1. 0 0 1 1 ———————————余数0 商1即q4=1 0. 0 0 0 1 所以:商:Q=-0.1011, 余数:R=+0.0001?2-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 商1 2R -Y=R 的商及余数 ≥0 ↗ → X-Y=R ↘_ 商 0 2(R+Y) -Y=R ↓ ↑ _ _ ≤0 _ _ ___________ } 原码恢复余数法可归纳为: 分析原码恢复余数法得知: ①当余数Ri>0时,商“1”,做2Ri-y*运算 ①当余数 Ri>0时,商“1”,再对Ri左移一位后减除数,即2Ri-y* ②当余数 Ri<0时,商“ 0”,做2(Ri +y*) -y*运算 ②当余数 Ri<0时,商“ 0”,先将Ri+y*,再2(Ri+y*)- y*,也即2Ri+y*。 ? 原码不恢复余数法(加减交替法) 用原码加减交替法:求 X / Y 的解题步骤: 先将余数减去除数得新余数Ri 若Ri>0:商“1”,做2Ri-y*运算 若Ri0:商“0”, 做2Ri+y*运算 再将上述过程重复n(除数位数)次,共上n位商 最后所得的商和余数即为 X / Y 的商及余数 原码不恢复余数法算法: 原码加减法可归纳为: ↗ → X-Y=R ①当余数Ri>0时,商“1”,做2Ri-y*运算 } ↘≤0_ _ __________ 商0 ↑_ _ _+y*运算 2R+Y=R ↓ ②当余数 Ri<0时,商“ 0”,做2Ri ≥0 商1 2R -Y=R 例: 已知: X=-0﹒101,Y=0 ﹒110求:【x/y】原=?用不恢复余数法解。 解: [X ]原 = 1﹒101 [Y ]原 = 0 ﹒110 [-︱Y︱ ]补 = 1 ﹒010 [X /Y ]原 = 1⊕0+ (0﹒ 101) ÷(0﹒ 110) 则(0 ﹒ 101)÷ (0﹒ 110)的原码不恢复余数法的过程为: 0﹒ 1 0 1 - ︱Y ︱ 1﹒ 0 1 0 ————————————— 1﹒ 1 1 1 1﹒ 1 1 0 0﹒ 1 1 0 + ︱ Y——————————————— ︱ 0﹒ 1 0 0 余数0 商0即q0=0 余数0 商1即q1=1 1﹒ 0 0 0 -︱Y︱ 1﹒ 0 1 0 ——————————————— 余数0 0﹒ 0 1 0 商1即q2=1 0﹒ 1 0 0 -︱Y︱ 1﹒ 0 1 0 ——————————————— 1﹒ 1 1 0 余数0 商0即q3=0 1﹒ 1 0 0 +——————————————— ︱Y︱ 0﹒ 1 1 0 0﹒ 0 1 0 〔 x/y〕原= 1 .110 余数为: 0. 010×2-3 例: 已知: x=0.1011,y=0 .1101 ,求【x/y】原=?用恢复余数及加减交替法解。 解: 【x/y】原= 0⊕0 + x / y x =0 ﹒ 1011 y =0﹒ 1101 [- y ]补= 1 ﹒ 0011 (1) 恢复余数法解0 ﹒ 1011 /0﹒ 1101的过程为: 故 【x/y】原=0.1101 余数为:0.0111×2-4 (2)不恢复余数法解0 ﹒ 1011 /0﹒ 1101的过程为: 故:[x/y]原=0.1101 余数为: 0. 0111×2-4 @@@@@ 2.补码除法运算 ⑴补码除法:指“符号位和数码位一起参加除法运算,参加运算的操作 数 是补码,求得的商数和余数也是补码。 ⑵补码除法运算方法:采用加减交替法。 ⑶补码除法加减交替法的操作过程: ① 若X,Y同号,做X-Y得余数R,商0为商的符号位,再做2R+Y得Ri 若X,Y异号,做X+Y得余数R,商1为商的符号位,再做2R-Y得Ri ② 若余数Ri与Y同号,商1,后做2Ri-Y。 若余数Ri与Y异号,商0,后做2Ri+Y。 ③ 重复第②步n-1次 ④ 第n次上商后,不再移位及+Y,-Y操作。 ⑤ 若商为负数,则在商末尾加1 若余数与被除数X异号,则要纠余: 若X,Y同号,用+Y纠余, 若X,Y异号,用-Y纠余, 【 X】补= qY】补+【2-n R】补 【 【A】补=X,【B】补=Y,【A】补/【B】补的过程为: Y N X,Y同号? 商“0”再作 X-Y→R 商“1”再作 X+Y→R Y N Y,R同号? 商“1”再作 2R-Y→R 商“0”再作 2R+Y→R 得R 例: 已知: X=-0.101 ,Y=+0.110, 求【 X/Y 】补=? 解: [X ]补=1 ﹒ 011 运算过程如下: [y ]补=0﹒ 110 [- ︱ Y ︱]补= 1 ﹒ 010 1. 0 1 1 + 0. 1 1 0 ——————————————— 0. 0 0 1 X,Y异号 符号位q0=1 0. 0 1 0 + 1. 0 1 0 ——————————————— 1. 1 0 0 余数与Y异号 商0即q1=0 1. 0 0 0 + 0. 1 1 0 ——————————————— 余数与Y异号 商0即q2=0 1. 1 1 0 1. 1 0 0 1 0 + 0. 1 ——————————————— 余数与Y同号 商1即q3=1 0. 0 1 0 余数0.010与X异号,应纠余,又因为X,Y异号用-Y纠余即: 0.010 + [- ︱ Y ︱]补 = 0.010+1 ﹒ 010 =1.100 又因为商1.0010,应在末尾+1,故商为:1.010 所以 其 【 X/Y 】补= 1.010 【余数 】补= 1.100× 2-3 @@@@ 对补码加减交替法说明如下: 不能自动判溢出,因此在补码除法运算之前,必须 先比较被除数高瑞n位与除数的绝对值,确认不会产 生除法溢出后,才可开始除法运算。 符号位不需要单独运算,可自然得到商数和余数的 正确符号。 若最后一次余数与被除数异号,则需要纠余:X、 Y 同号,则十Y纠余,X、Y异号,则一Y纠余。 3 .不恢复余数的阵列除法器 下图示出了4位除4位的不恢复余数阵列除法器的逻辑原理图: 被除数 x=0.x1x2x3x4x5x6 (双倍长) 除数 y=0.y1y2y3 商数 q=0.q1q2q3 余数 r=0.00r3r4r5r6

本文链接:http://saskatoonflowers.net/dingdianjisuanji/817.html
随机为您推荐歌词

联系我们 | 关于我们 | 网友投稿 | 版权声明 | 广告服务 | 站点统计 | 网站地图

版权声明:本站资源均来自互联网,如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

Copyright @ 2012-2013 织梦猫 版权所有  Powered by Dedecms 5.7
渝ICP备10013703号  

回顶部