用原码一位乘

阅读: 评论:0

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

符号位:

X0Y0011

数值部分的计算:

部分积 乘数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

符号位:

X0Y0110

数值部分的计算:

部分积 乘数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

符号位:

X0Y0000

数值部分的计算:

部分积 乘数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

符号位:

X0Y0011

数值部分的计算:

部分积 乘数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)

yiyi100

01

10

11

yi1yi0

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

yiyi1=00,右移一位

yiyi1=10,加[-x]补,右移一位

1

yiyi1=01,加[x]补,右移一位

0

0

yiyi1yiyi1=00,右移一位

=10,加[-x]补,右移一位

1

yiyi1=01,加[x]补,右移一位

0

yiyi1=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

yiyi1=10,加[-x]补,右移一位

yiyi1yiyi1=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

符号位为

X0Y0000

可得,商为 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

符号位为

X0Y0101

可得,商为 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

符号位为

X0Y0011

上商第一位为溢出判断,为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

符号位:

X0Y0011

可得商为 1.0111

用原码一位乘

本文发布于:2024-01-29 17:23:56,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170652023617031.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:右移   乘数   部分
留言与评论(共有 0 条评论)
   
验证码:
排行榜

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23