计算机组成原理:补码一位乘法(booth算法)

问题:

x*y=z;
已知x,y,通过补码一位乘法得到z

运算规则:

  1. 和原码一位乘法不同的是,补码一位乘法的符号位是参加运算的,运算的所有的数包括得到的结果z都是补码的形式
  2. 被乘数x取双符号参与运算,部分积的初值为0,数y取单符号位
  3. 乘数y末尾首先要增加一个附加位0,每次讨论的是y的最后两位,但是每次移动是移动一位
  4. 判断y的最后两位的时候,遵循这样的规则:

为00或者为11的时候,直接右移一位
为01的时候,加x的补,然后右移一位
为10的时候,加-x的补,然后右移一位
在这里插入图片描述

  1. 特例:就是最后一步不用右移一位

例子:

比如x = -0.1101,y=0.1011
先写出x的补码:[x]补 = 11.0011,再写出-x的补码:[-x]补 = 00.1101
一开始部分积的初值是:00.0000
在y后面加个0,那么y变成了0.10110
然后从y的最后两位开始往前,0.10110当前最后两位是10,所以加上[-x]补:
00.0000 + 00.1101 = 00.1101,右移一位,变成00.01101
此时y =0.10110的最后两位变成了11(往前挪了一个位置,不是两个),按照规则应该直接右移一位,就变成了00.001101
此时y =0.10110的最后两位变成了01,所以根据规则要加[x]补:
00.001101 + 11.0011 = 11.011001
右移一位,变成了11.1011001
此时y =0.10110的最后两位变成了10,加上[-x]补:
11.1011001 + 00.1101 = 00.1000001
右移一位,变成了:00.01000001
此时y =0.10110最后两位是01(所以从这里就可以知道规则里面要在y前面补一个0的作用了),
加[x]补:00.01000001 + 11.0011 = 11.01110001
因为这已经是最后一步了,所以不用再右移了,所以最后结果就是1.01110001
在这里插入图片描述

  • 57
    点赞
  • 293
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值