##手算乘法

十进制的手算乘法我们都已经很熟悉了,而在计算机的底层是十进制转二进制再进行运算,二进制乘法与十进制乘法相同
image.png
二进制乘法的特殊之处在于乘数的每一位乘以被乘数有简单的规律,如果乘数的那一位为1,则乘出来的为被乘数本身,如果乘数为0,则乘出来为全0。这样在算每一位乘法时,就不需要多次相加运算,只需要用简单的与非逻辑就可一次计算实现。
image.png
算完每一位乘法结果后,进行错位相加,得到最终答案。

原码一位乘法

1.乘法符号位如何处理?
2.4位二进制数乘以4位二进制数变成8位二进制数,如何保存。
1.但是如果用机器实现上述逻辑,就会出现问题,现在是4位数乘以4位数,所得4个位积,也就是4个中间结果,用到4个寄存器。那如果是64位数乘以64位数,会产生64个中间结果,需要用到64个寄存器吗?
这里我们用到移位相加实现。我们来看看具体过程
还是1.1101与0.1011相乘,符号位单独处理。
符号位1与0异或为1,
将乘数与被乘数的绝对值放到MQ与X寄存器里。
image.png
在正式乘法之前,将ACC里的值置全0。
计算时,用MQ的每一位与X相乘,如果最低位为1,则ACC加上被乘数,如果最低位是0,则ACC加0.
如现在MQ的最后一位1,所以X的01101与ACC的0000结果01101放到ACC里。然后逻辑右移,高位补0。
image.png
MQ移除的1舍弃。
现在MQ的最低位是1,所以x的01101与ACC的00110相加结果10011,放到ACC里然后右移一位,高位补0。
image.png
现在MQ的最低位是0,所以0与ACC的01001相加结果01001,放到ACC里然后右移一位,高位补0。
image.png
现在MQ的最低位是1,所以x的01101与ACC的00100相加结果10001,放到ACC里然后右移一位,高位补0。
最后根据将ACC最高位修改为正确的符号。
image.png
手动模拟就是这样运算。

总结

在加法运算时,ACC与X分别放着加数与被加数再进行相加,而在乘法运算时也使用到了ACC与X的多次加法运算。所以ACC与X在加法与乘法操作时起的作用相同。


小强Zzz
1.2k 声望32 粉丝

引用和评论

0 条评论