标签:
参考书目:深入理解计算机系统,微机原理
关于移位的基础知识请看:http://blog.csdn.net/limingshandian/article/details/7888799
本文整理自:[公开课] 吉林大学 刘子良 - 计算机组成原理
我们都知道,乘法除法可以通过移位和加法的组合来实现。
X * 10 = X * ( 2 + 8 ) = X * ( 2^1 + 2^3) = X<<1 + X<<3
而真正深入到计算机内部,又是怎么样呢?
正数之间的乘法:
设X = 0.1101, Y = 0.1011
X * Y = X * 0.1011
=X*(0.1 + 0.00 + 0.001 + 0.0001)
=0.1X + 0.00X + 0.001X + 0.0001x
=0.1( X + 0.0X + 0.01X + 0.001X )
=0.1( X + 0.1( 0 + 0.1X + 0.01X ) )
=0.1( X + 0.1( 0 + 0.1( X + 0.1( X + 0.1 * 0 ) ) ) )
【 y = 0. 1 0 1 1】
0.1 = 2^(-1), 等价于右移一位。
小感悟:运算一共做出了4次移位与4次相加.为什么是四次?因为Y小数点后面是4位。
乘法本质上是多个数相加。被乘数Y的每一位都对乘数是否参与该位的加法有控制作用。
就是这样先相加,再移位,再相加,再移位的过程。
真正在机器中,正数之间的乘法运算比这个还要复杂。因为聪明的IBM大叔把寄存器的使用压榨到极限,为了节约成本,以上的算法可能需要一些修改。
假设我有三个寄存器A,B,C,每个寄存器只有只能容纳4位。以上方法显然不能用,A被存乘数,B存乘数,C存结果, C会放不下的。
我们发现,被乘数是必须一直保存的,而乘数就不一定了。因为,每进行一次相加,乘数能提供的有效信息就减少一位。
未完待续
标签:
原文地址:http://www.cnblogs.com/sunfishgao/p/4517798.html