##手算乘法

十进制的手算乘法咱们都曾经很相熟了,而在计算机的底层是十进制转二进制再进行运算,二进制乘法与十进制乘法雷同

二进制乘法的非凡之处在于乘数的每一位乘以被乘数有简略的法则,如果乘数的那一位为1,则乘进去的为被乘数自身,如果乘数为0,则乘进去为全0。这样在算每一位乘法时,就不须要屡次相加运算,只须要用简略的与非逻辑就可一次计算实现。

算完每一位乘法后果后,进行错位相加,失去最终答案。

原码一位乘法

1.乘法符号位如何解决?
2.4位二进制数乘以4位二进制数变成8位二进制数,如何保留。
1.然而如果用机器实现上述逻辑,就会呈现问题,当初是4位数乘以4位数,所得4个位积,也就是4个两头后果,用到4个寄存器。那如果是64位数乘以64位数,会产生64个两头后果,须要用到64个寄存器吗?
这里咱们用到移位相加实现。咱们来看看具体过程
还是1.1101与0.1011相乘,符号位独自解决。
符号位1与0异或为1,
将乘数与被乘数的绝对值放到MQ与X寄存器里。

在正式乘法之前,将ACC里的值置全0。
计算时,用MQ的每一位与X相乘,如果最低位为1,则ACC加上被乘数,如果最低位是0,则ACC加0.
如当初MQ的最初一位1,所以X的01101与ACC的0000后果01101放到ACC里。而后逻辑右移,高位补0。

MQ移除的1舍弃。
当初MQ的最低位是1,所以x的01101与ACC的00110相加后果10011,放到ACC里而后右移一位,高位补0。

当初MQ的最低位是0,所以0与ACC的01001相加后果01001,放到ACC里而后右移一位,高位补0。

当初MQ的最低位是1,所以x的01101与ACC的00100相加后果10001,放到ACC里而后右移一位,高位补0。
最初依据将ACC最高位批改为正确的符号。

手动模仿就是这样运算。

总结

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