布斯乘法是一种补码相乘的算法,由A·D·Booth在1950年提出。相信大部分小伙伴都是在计算机组成原理相关的书籍中首次接触的。有许多教材在原理方面并未详细阐述,亦或是直接讲明规则直接使用,导致读者一时难以理解其中道理,我目前看的这本书就属于后者。我在网上查阅相关资料后,根据自己的理解写下这篇文章,希望帮助到和我曾经一样的人。
首先让我们看看布斯乘法的规则:设为偶数,被乘数为,乘数为
①乘数最低位增加一位辅助位。
②若,则“”;若,则“”;若或,则不做任何操作。
③算术右移 一位,得到部分积。
④重复第②步和第③步次,结果得。
我们知道,补码是正数时,其真值就是补码的数值部分按权展开,即;当补码是负数时,得到其真值的步骤为:符号为负,对补码数值位取反,最后加1,然后按权展开,即,我们对其化简,从而得到
补码表示
因为正数的补码最高位为0,负数的补码最高位为1,所以我们可以合并上面两个式子,就得到了一个可以表示任意补码的公式:
公式一
我们对公式一做下变换:
得到了公式二,我们看到最后一行多了一个,这就是为什么乘数最低位需要增加一个辅助位并且令它等于0的原因。
现在我们假设有一个8位补码A为:0111 1110,用公式二可以表示为1000 0000-10=1000 00(-1)0,于是我们可以发现:
遇到时,乘数当前位(二进制一位只能是0或1)肯定是负的,根据乘法运算,我们需要做减法运算,即,相当于,然后右移得到部分积;
遇到或时,乘数当前位肯定是0,所以什么都不加,直接右移一位得到部分积;
遇到时,乘数当前位肯定是正的,我们需要做加法运算,即,然后右移得到部分积。
举个例子:设,则:
可以看到结果是正确的,至此,布斯乘法中的规则也就可以理解啦!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/192452.html