移位(一)--正数的乘法

参考书目:深入理解计算机系统,微机原理

关于移位的基础知识请看: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的每一位都对乘数是否参与该位的加法有控制作用。Y小数点后面是4位。则控制了四次相加。

           

  就是这样先相加,再移位,再相加,再移位的过程。

真正在机器中,正数之间的乘法运算比这个还要复杂。因为聪明的IBM大叔把寄存器的使用压榨到极限,为了节约成本,以上的算法可能需要一些修改。

假设我有三个寄存器A,B,C,每个寄存器只有只能容纳4位。以上方法显然不能用,A存被乘数,C存乘数,B存结果, B会放不下的。

我们发现,被乘数是必须一直保存的,而乘数就不一定了。因为,每进行一次相加,对于我们而言乘数有用信息就减少一位。

机器在处理这个操作时,每次计算,都会对乘数进行右移一位。这样及时把无用的信息移走。腾出来的位置存储乘法结果的低位。

等到计算结束,B存储结果的高4位,C存储乘法结果的低四位.

      

 

 

 

posted @ 2015-05-20 17:53  chunyi  阅读(719)  评论(0编辑  收藏  举报