2024年1月29日发(作者:)
第六章
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.1
(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.
(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.
则 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.
(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
本文发布于:2024-01-29 17:23:56,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170652023617031.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |