源码一位乘

来源:互联网 发布:mac os低版本如何升级 编辑:程序博客网 时间:2024/04/27 23:34

好多同学在学习计算机组成原理时在原码乘法时感觉很吃力,下面我介绍一种思路,故事是这样的,有些漫长,但也需要些耐心:

其实质是模仿手工乘法过程,例如手工计算二进制3*5过程为:
                0011
             × 0101
       --------------    被乘数   乘数自低位到高位
                0011     0011  *  1
               0000      0011  *  0
              0011       0011  *  1
         +  0000        0011  *  0
      ---------------    四个加数属于乘积的一部分,故称为"部分积"
             0001111     最终得到"积"

    由于计算机运算过程中运算器每次只能对一对数据进行算数逻辑运算,所以将部分积求和得到"积"的过程分解成四次加运算:
             00000000    最初的部分积累加数,还没有开始累加,为0
           +    0011    0011  *  1
      ----------------
             00000011    一次位乘后的部分积累加和
           +   0000     0011  *  0
      ----------------
             00000011    二次位乘后的部分积累加和
           +  0011      0011  *  1
      ----------------
             00001111    三次位乘后的部分积累加和
           + 0000       0011  *  0
      ----------------
             00001111    四次位乘后的部分积累加和
    因为计算机在部分积累加过程中实现位对齐比较复杂,仔细分析累加后,发现每作一次乘法累加,得到一位最终乘积,而乘数的一位作废不再使用.将左移部分积改为右移操作使得加法器直接对齐,将一位原码乘法过程改变为:
            部分积  乘数    作废的乘数       注释
              0000|0101   |                  初始化乘法算法
          + 0011|0101   |                 1. 加入 0011 * 1
       -----------|-------|---------
              0011|0101   |                      得到第一次部分积累加和
              00011|010   | 1                   将部分积右移一位对起加法器
          +  0000 |010   | 1               2. 加入 0011 * 0
       ----------- |------|---------
              00011|010   | 1                   得到第二次部分积累加和
              000011|01   | 01                 将部分积右移一位对起加法器
          +  0011  |01   | 01              3. 加入 0011 * 1
       -----------  |-----|---------
              001111|01   | 01                 得到第三次部分积累加和
              0001111|0   | 101               将部分积右移一位对起加法器
          +  0000   |01  | 101             4. 加入 0011 * 0
       -----------   |----|---------
              0001111|0   | 101                得到第四次部分积累加和
              00001111|   | 0101              将部分积右移一位对起加法器
              最后结果
              00001111  (十进值15)

实际上就本例而言,在做原码一位乘时已经知道了结果有8位,而且将手工乘时的乘数左移,改为部分积右移,再加乘数,实质上与手工乘完全一样,只不过,这个算法方便计算机去运算而已。

原创粉丝点击