20. 用原码一位乘、两位乘和补码一位乘(Booth算法)、两位乘计算x·y。 (1)x= 0.110111,y= -0.101110; (2)x= -0.010111,y= -0.010101; (3)x= 19, y= 35;
(4)x= 0.110 11, y= -0.111 01 。 解:
(a) 原码一位乘: (1) [x]原=0.110111 [y]原=1.101110 x*=0.110111 y*=0.101110 符号位: X0Y0011
数值部分的计算: 部分积 乘数y*
---------------------------------------------------------------------------------------------------------------------- 0.000000 101110 开始部分积为0 + 0.000000 乘数为0,加上0
---------------------------------------------------------------------------------------------------------------------- 0.000000
0.000000 0 10111 部分积右移一位,乘数右移一位 + 0.110111 乘数为1,加上X*
---------------------------------------------------------------------------------------------------------------------- 0.110111 0
0.011011 10 1011 部分积右移一位,乘数右移一位 + 0.110111 乘数为1,加上X*
--------------------------------------------------------------------------------------------------------------------- 1.010010 10
0.101001 010 101 部分积右移一位,乘数右移一位 + 0.110111 乘数为1,加上X*
--------------------------------------------------------------------------------------------------------------------- 1.100000 010 0.110000 0010 10 + 0.000000
-------------------------------------------------------------------------------------------------------------------- 0.110000 0010
0.011000 00010 1 部分积右移一位,乘数右移一位 + 0.110111 乘数为1,加上X*
--------------------------------------------------------------------------------------------------------------------- 1.001111 00010 右移一位 0.100111 100010
[x*y]原=1.100111100010 (2) [x]原=1.010111 [y]原=1.010101 x*=0.010111 y*=0.010101 符号位: X0Y0110
数值部分的计算:
部分积 乘数y*
0.000000 010101 开始部分积为0
+ 0.010111 乘数为1,加上X*
0.010111
0.001011 1 01010 部分积右移一位,乘数右移一位 + 0.000000 乘数为0,加上0
0.001011 1
0.000101 11 0101 部分积右移一位,乘数右移一位 + 0.010111 乘数为1,加上X*
0.011100 11
0.001110 011 010 部分积右移一位,乘数右移一位 + 0.000000 乘数为0,加上0
0.001110 011
0.000111 0011 01 部分积右移一位,乘数右移一位 + 0.010111 乘数为1,加上X*
0.011110 0011
0.001111 00011 0 部分积右移一位,乘数右移一位 + 0.000000
0.001111 00011 0.000111 100011 故,x·y=0.000111100011 (3)[x]原=0,0001 0011 [y]原=0,0010 0011 x*=0001 0011 y*=0010 0011 符号位: X0Y0000
数值部分的计算:
部分积 乘数y*
00000000 00100011 开始部分积为0
+ 00010011 乘数为1,加上X*
00010011
00001001 1 0010001 部分积右移一位,乘数右移一位
+ 00010011
00011100 1
00001110 01 001000 部分积右移一位,乘数右移一位 + 00000000
00001110 01
00000111 001 00100 部分积右移一位,乘数右移一位 00000011 1001 0010 00000001 11001 001 + 00010011
00010100 10001 00 00000101 0011001 即 0,0000 0010 1001 1001
(4)x=0.11011,y=-0.11101
[x]原=0.11011 [y]原=1.11101 x*=0.11011 y*=0.11101 符号位: X0Y0011
数值部分的计算:
部分积 乘数y*
0.00000 11101 开始部分积为0
+ 0 .11011 乘数为1,加上X* 0.11011
0.01101 1 1110 部分积右移一位,乘数右移一位 0.00110 11 111 部分积右移一位,乘数右移一位 + 0.11011
1.00001 11
0.10000 111 11 部分积右移一位,乘数右移一位 + 0.11011 乘数为1,加上X* 1.01011 111
0.10101 1111 1 部分积右移一位,乘数右移一位 + 0.11011 乘数为1,加上X*
1.10000 1111 0.11000 01111 加上符号位得 1.1100001111
(b) 补码一位乘(Booth)
当乘数y为正数时,不管被乘数x符号如何,都可按原码乘法的规则运算,但加和移位都必须按补码规则运算
当乘数y为负数时,把乘数的补码[y]补去掉符号位,当成一个正数与[x]补相乘,然后加上[-x]补进行校正。
Booth算法的部分积取双符号位,乘数因符号位参加运算,故多取一位。
Booth算法对乘数从低位开始判断,根据两个数据位的情况决定进行加法、减法还是仅仅移位操作。判断的两个数据位为当前位及其右边的位(初始时需要增加一个辅助位0),移位操作是向右移动。
补码一位乘法则(教材P254)
yiyi100 01 10 11 yi1yi0 1 -1 0 操作 部分积右移一位 部分积加[x]补,再右移一位 部分积加[-x]补,再右移一位 部分积右移一位 (1) [x]补=0.110111 [y]补=1.010010 部分积 乘数y[n] 00.000000 1010010 00.000000 0 101001 - 00.110111
----------------------------------- 11.001001 0 11.100100 10 10100 + 00.110111
----------------------------------- 00.011011 10 00.001101 110 1010 00.000110 1110 101 - 00.110111
----------------------------------- 11.001111 1110 11.100111 11110 10 + 00.110111
----------------------------------- 00.011110 11110 00.001111 011110 1 - 00.110111
----------------------------------- 11.011000 011110
辅助位y[n+1] 0 初始0,0
yiyi1=00,右移一位
yiyi1=10,加[-x]补,右移一位
1
yiyi1=01,加[x]补,右移一位
0 0
yiyi1yiyi1=00,右移一位
=10,加[-x]补,右移一位
1
yiyi1=01,加[x]补,右移一位
0
yiyi1=10,加[-x]补,右移一位
[x·y]补=1.011000011110 则 X·Y=1.1001 1110 0010 (2)[x]补=1.101001 [y]补=1.101011 部分积 乘数y[n]
00.000000 1101011 0 辅助位y[n+1] - 11.101001 00.010111
00.001011 1 110101 1 辅助位y[n+1] 00.000101 11 11010 1 辅助位y[n+1] + 11.101001
11.101110 11
11.110111 011 1101 0 - 11.101001
00.001110 011
00.000111 0011 110 1 + 11.101001
11.110000 0011
11.111000 00011 11 0 - 11.101001
00.001111 00011
00.000111 100011 1 1 00.000111 100011
故,X·Y=0.000111100011
(3)[x]补=00010011=00010011 [y]补=00100011=00100011
部分积 乘数y[n] 辅助位y[n+1] 00,00000000 00100011 0 -00,00010011
11,11101101
11,11110110 1 0010001 1 11,11111011 01 001000 1 + 00,00010011
00,00001110 01
00,00000111 001 00100 0 00,00000011 1001 0010 0 00,00000001 11001 001 0 -00,00010011
11, 11101110 11001
yiyi1=10,加[-x]补,右移一位
yiyi1yiyi1=11,右移一位
=01,加[x]补,右移一位
11, 11110111 011001 00 1 + 00, 00010011
00, 00001010 011001
00,00000101 0011001 0 0 00,0000 0010 1001 1001 即为所求
(4)[x]补=0.11011 [y]补=1.00011
部分积 乘数y[n] 辅助位y[n+1] 00.00000 100011 0 -00.11011
11. 00101
11.10010 1 10001 1 11.11001 01 1000 1 +00.11011
00. 10100 01
00.01010 001 100 0 00.00101 0001 10 0 00.00010 10001 1 0 -00.11011
11.00111 10001 即 1.00 1111 0001 X·Y=1.11 0000 1111
6.21 用原码加减交替法和补码加减交替法计算X/Y. 原码加减交替法
(1) x=0.100111,y=0.101011
解:[X]原=0.100111,X*=0.100111
[Y]原=0.101011,Y*=0.101011,[-Y*]=1.010101 被除数 商 0.100111 0.000000 +1.010101
1.111100 0 1.111000 0 +0.101011
0.100011 01 1.000110 01 +1.010101
0.011011 011 0.110110 011 +1.010101
0.001011 0111 0. 010110 0111 +1.010101
1.101011 01110 1.010110 01110 +0.101011
0.000001 011101 0.000010 011101 +1.010101
1.010111 0111010 符号位为
X0Y0000
可得,商为 0.0101011
(2) x= -0.10101,y= 0.111010
解: [X]原=1.10101,X*=0.10101
[Y]原=0.11011,Y*=0.11011,[-Y*]=1.00101 被除数 商 0.10101 0.00000 + 1.00101
1.11010 0 1.10100 0 + 0.11011
0.01111 01 0.11110 01 + 1.00101
0.00011 011 0.00110 011 + 1.00101
1.01011 0110 0.10110 0110 + 0.11011
1.10001 01100 1.00010 01100 +0.11011
1.11101 011000 符号位为
X0Y0101
可得,商为 1.11000
(3) x= 0.10100,y= -0.10001
解: [X]原=0.10100, X*=0.10100
[Y]原=1.10001,Y*=0.10001,[-Y*]=1.01111 被除数 商 0.10100 0.00000 + 1.01111
0.00011 1 0.00110 1 +1.01111
1.10101 10 1.01010 10 +0.10001
1.11011 100 1.10110 100 +0.10001
0.00111 1001 0.01110 1001 +1.01111
1.11101 10010 1.11010 10010 +0.10001
0.01011 100101 符号位为
X0Y0011
上商第一位为溢出判断,为1,则溢出,不能进行。 (4) x=
2713,y=- 3232解: [X]原=0.01101, X*=0.01101,
[Y]原=1.11011,Y*=0.11011,[-Y*]=1.00101 被除数 商 0.01101 0.00000 + 1.00101
1.10010 0 1.00100 0 + 0.11011
1.11111 00 1.11110 00 + 0.11011
0.11001 001 1.10010 001 + 1.00101
0.10111 0011 1.01110 0011 +1.00101
0.10011 00111 符号位: X0Y0011 可得商为 1.0111
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- 7swz.com 版权所有 赣ICP备2024042798号-8
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务