回 帖 发 新 帖 刷新版面

主题:原码一位乘法的问题

原码一位乘法中乘数在右移后,为什么在空位补“1”,而不是空位补“0”?

回复列表 (共3个回复)

沙发


怎么没人理我,高手都去哪了?
静候解惑之人。

板凳

例:0.1101*0.1011
  初始条件部份积为0.0000,看乘数的末位是“1”,故部份积0.0000加上被乘数0.1101为0.1101,右移1位(同时乘数也右移1位)得新的部份积0.0110,其末位的1移到了乘数空出的高位,此时乘数的末位又是“1”,则加上新的部份积,以后以此类推。总之,乘数的末位为“1”,则加上新的部份积,为“0”则不加新的部份积。
  我用的教材是高等教育出版的《计算机组成原理》(唐朔飞 主编),这个例题在本书的P244页。请详细看书上解说。

3 楼

首先我没有搞懂你问什么,只好把原码一位乘法作一详细介绍:
    其实质是模仿手工乘法过程,例如手工计算二进制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   |                  加入 0011 * 1
       -----------|-------|---------
              0011|0101   |                  得到第一次部分积累加和
              00011|010   | 1                将部分积右移一位对起加法器
          +  0000 |010   | 1                加入 0011 * 0
       ----------- |------|---------
              00011|010   | 1                得到第二次部分积累加和
              000011|01   | 01               将部分积右移一位对起加法器
          +  0011  |01   | 01               加入 0011 * 1
       -----------  |-----|---------
              001111|01   | 01               得到第三次部分积累加和
              0001111|0   | 101              将部分积右移一位对起加法器
          +  0000   |01  | 101              加入 0011 * 0
       -----------   |----|---------
              0001111|0   | 101              得到第四次部分积累加和
              00001111|   | 0101             将部分积右移一位对起加法器
              最后结果
              00001111  (十进值15)
           

一位原码乘法算法完.

我来回复

您尚未登录,请登录后再回复。点此登录或注册