Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说【计算机组成原理】定点乘法运算之补码一位乘法(Booth算法)(对初学者的步骤详解)[通俗易懂],希望能够帮助你!!!。
y n y_n yn(高位) | y n + 1 y_{n+1} yn+1(低位) | 操作 |
---|---|---|
0 | 0 | 部分积右移一位 |
0 | 1 | 部分积加 [ X ] 补 [X]_{补} [X]补,右移一位 |
1 | 0 | 部分积加 [ − X ] 补 [-X]_{补} [−X]补,右移一位 |
1 | 1 | 部分积右移一位 |
无题言狗??
放狗,不对,看题。
设机器字长为5位(含1位符号位,n=4),x=-0.1101,y=0.1011,采用Booth算法求 X • Y X•Y X•Y
解:
首先,列出对应的补码。
[ X ] 补 = 11.0011 [X]_{补}=11.0011 [X]补=11.0011
[ − X ] 补 = 00.1101 [-X]_{补}=00.1101 [−X]补=00.1101
[ Y ] 补 = 0.1011 [Y]_{补}=0.1011 [Y]补=0.1011
开始按照要求求解
高位部分积位数对标被乘数X的位数,且符号位取双位:
部分积:00.0000
开始:
(高位部分积) | (低位部分积/乘数) | 说明 |
---|---|---|
00.0000 | 0.1011¦0 丢失位 | 初始情况 |
+ [ − X ] 补 +[-X]_{补} +[−X]补 00.1101 | 发现是10所以对照表格, 应该部分积加 [ − X ] 补 [-X]_{补} [−X]补,右移一位 执行本行左边的操作 |
|
右移一位 00.0110 | 10.101¦10 | 我们把高位和低位作为一个整体 进行右移,所以高位最右边的1到 了低位部分的最左边 |
右移一位 00.0011 | 01.010¦110 | 看见上一行的是11所以直接右移一位 |
+ [ X ] 补 +[X]_{补} +[X]补 11.0011 | 是01所以部分积加 [ X ] 补 [X]_{补} [X]补,右移一位 | |
和:11.0110 | 001.010¦110 | 开始右移 |
右移一位 11.1011 | 0010.1¦0110 | 因为高位部分在补码中, 最高位是1时右移补1 |
+ [ − X ] 补 +[-X]_{补} +[−X]补 00.1101 | 部分积加 [ − X ] 补 [-X]_{补} [−X]补,右移一位 | |
和:00.1000 | 0010.1¦0110 | 开始右移 |
右移一位 00.0100 | 00010.¦10110 | 是01所以部分积加 [ X ] 补 [X]_{补} [X]补,右移一位 |
+ [ X ] 补 +[X]_{补} +[X]补 11.0011 | ||
和 11.0111 | 最后一步不再移位 |
所以蓝色部分构成 [ X • Y ] 补 = 1.01110001 [X•Y]_{补}=1.01110001 [X•Y]补=1.01110001,所以 X • Y = − 0.10001111 X•Y=-0.10001111 X•Y=−0.10001111
根据规则,我们给乘数Y增设附加位 y n + 1 y_{n+1} yn+1,且初值为0,提供了图表中的初始情况下的1¦0
课后题:
上述的情况是我们 [ X • Y ] [X•Y] [X•Y],那么我们计算一下 [ Y • X ] [Y•X] [Y•X],就可以知道我们是不是掌握了啦!!!
课后题解答
既然是课后题就不写那么详细啦。
首先列出补码:
[ Y ] 补 = 00.1011 [Y]_{补}=00.1011 [Y]补=00.1011
[ − Y ] 补 = 11.0101 [-Y]_{补}=11.0101 [−Y]补=11.0101
[ X ] 补 = 1.0011 [X]_{补}=1.0011 [X]补=1.0011
step1: (高位部分积)00.0000
step2: (低位部分积)1.0011¦0
step3: 高位积加 [ − Y ] 补 = 11.0101 [-Y]_{补}=11.0101 [−Y]补=11.0101,和:11.0101
step4: 整体右移11,1010 11,001¦10
step5: 整体右移11,1101 01,100¦110
step6: 高位积加 [ Y ] 补 = 00.1011 [Y]_{补}=00.1011 [Y]补=00.1011,和:00,1000
step7: 整体右移00,0100 00,110¦0110
step8: 整体右移00,0100 00,011¦00110
step9: 高位积加 [ − Y ] 补 = 11.0101 [-Y]_{补}=11.0101 [−Y]补=11.0101,和:11.0111
和上面详解一样,蓝色部分的数字就是我们想要的结果即 [ Y • X ] 补 = 1.01110001 [Y•X]_{补}=1.01110001 [Y•X]补=1.01110001
上一篇
已是最后文章
下一篇
已是最新文章