手动计算二进制乘法:
和十进制是一样的。
机械实现的问题:
一:符号位的处理
直接异或就可以了。接下来乘法的运算就是绝对值的运算了,因此符号位都变成0.
二:计算的过程
先回忆一下运算器的结构:
具体是怎么样的呢?非常巧妙:
第一步:
第一位乘数是1,于是就要把被乘数移到ACC:
第一部计算就是这样,接下来就是第二步。由于我们每次做乘法的时候,每做下一步乘法都是要往右移一位的,所以这个地方要把ACC,MQ往左边移一位,这样就可以继续加了。最右边的那一位直接舍弃,以后不再用它了。(现在可以看到为什么ACC和MQ可以一起储存乘积了吧,妙呀)
一直这样直到乘数只剩下了符号位:
符号位不用参加运算,于是到这个地方就可以停止了。这里要注意这两个数都是小数,如果把符号位也当成数值的一部分的话会导致乘数缩小1/2。
手算模拟一下:
上述的例子讲的是小数的计算方法,整数怎么办呢?其实是一样的:
小数计算,小数点固定在左边那个点,整数计算,小数点固定在右边那个点。
那被乘数是整数,乘数是小数怎么办?个人认为应该把小数点放在MQ开头处就可以了。