码迷,mamicode.com
首页 > 其他好文 > 详细

乘法与移位

时间:2015-05-20 20:07:10      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:

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

关于移位的基础知识请看: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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!