计算机组成原理:booth 乘法原则 +举例+个人对求补码的方法+学习补码减法

booth 乘法原则

[ 乘法 ]补 低位添加补0 参考判断
00 结尾 原部分积+0 ,然后右移一位
01 结尾 原部分积+【被乘数】补 , 然后右移一位
10 结尾 原部分积+【-被乘数】补, 然后右移一位
11 结尾 原部分积+ 0,然后右移一位

  • 初始状态,部分积全为0
  • 移位时,部分积最高位如果是0就补0 ,如果是1就补1

提出问题:boot乘法举例
计算机组成原理:booth 乘法原则 +举例+个人对求补码的方法+学习补码减法

个人分析:
首先,我们得了解一下关于补码的减法,下面的图片是推到过程。或者直接看结论吧!
结论:从【y】补求【-y】补的法则是:对【y】补包括符号位“求反且最末位加1”,
即可得到【-y】补

注意,这里不是我们通常的求补码了,我们平常求补码就是取反加1 但是对于符号位是不取的,因为这是对【-y】求补 这里是连符号位都要取反的
举例:
x=-1110 【x】补=10010 然而,【-x】补=01110

解:
首先,x=-1110 对于负数,符号位为1 那么x=11110 这里我介绍我的对x求补码的简单方式,从右往左看,找到第一个为1的位置,然后前面除符号位的数字全部取反就是x的补码了,比如样例
x=11110 按照上面所说 得到1 0 0 1 0 如果不太相信的话,可以用先取反+1的方式验证一下!

那么,对于【-x】补 就是对【x】补 先全部取反(包括符号位)结果是0 1 1 0 1 然后再加1得到
0 1 1 1 0 等于上面那个结果,证明完毕!

补码减法:
计算机组成原理:booth 乘法原则 +举例+个人对求补码的方法+学习补码减法
booth乘法举例01110 * 11011:
对于之前那个问题,我自己又推了一遍,我们把补码换为源码验证一下好了:
0 1 1 1 0 对应源码转化为10进制等于 14
1 1 0 1 1 对应源码转化为10进制等于 -5
它们相乘的结果为-70
然后我们最终结果1 1 1 0 1 1 1 0 1 0 1 转化一下也是-70
显然,这个乘法原则是正确的

然后,我想可能这里有一个难点就是对于负数的补码,转化10进制这里可能不知道怎么转化,这里我也有我的方法:
比如1 1 0 1 1 我们数字位有4位 1 0 1 1 符号位1 代表负 先求1011对应10进制等于11
然后用2的4次方减去11即16-11=5 然后加个负号就是我们负数补码对应10进制了

同理,对于最终结果

1 1 1 0 1 1 1 0 1 0 1
最后一个1不算,是我们为了计算补进去的
前面不管有多少个1 只算一个1 相当于符号位了
中间的0 1 1 1 0 1 0 算出来对应10进制为58 这里有7位
所以结果就是2的7次方减去58 即128-58=70 然后加符号位的负号 -70 显然也是正确的

计算机组成原理:booth 乘法原则 +举例+个人对求补码的方法+学习补码减法

学如逆水行舟,不进则退