## 手算乘法
十进制的手算乘法咱们都曾经很相熟了,而在计算机的底层是十进制转二进制再进行运算,二进制乘法与十进制乘法雷同
二进制乘法的非凡之处在于乘数的每一位乘以被乘数有简略的法则,如果乘数的那一位为 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 在加法与乘法操作时起的作用雷同。