原码一位乘法的实现算法

[09-12 12:16:12]   来源:http://www.88dzw.com  电路基础   阅读:8812

文章摘要:原码一位乘法的实现算法(一)用原码实现乘法运算是十分方便的。原码表示的两个数相乘,其乘积的符号为相乘两数符号的异或值,数值则为两数绝对值之积。假定 [X]原 = XSX1 X2… Xn [Y]原 = YSY1Y2… Yn则 [X*Y]原 = [X]原 * [Y]原 = (XS⊕YS) (X1X2 … Xn) * (Y1 Y2 … Yn)结果是把符号位和数值邻接起来。为了引出在计算机中实现定点原码一位乘法的具体方案,先看手工乘法运算的实际执行步骤。 假定: X= 0.1101 Y= 0.10110. 1 1 0 1* 0. 1 0 1 1 1 1 0 1 X*Y = 0.10001111,符号

原码一位乘法的实现算法,标签:电子电路基础,模拟电路基础,http://www.88dzw.com
原码一位乘法的实现算法(一)

  用原码实现乘法运算是十分方便的。原码表示的两个数相乘,其乘积的符号为相乘两数符号的异或值,数值则为两数绝对值之积。
假定 [X] = XSX1 X2… Xn
     [Y] = YSY1Y2… Yn
   则 [X*Y] = [X] * [Y]
         = (XS⊕YS) (X1X2 … Xn) * (Y1 Y2 … Yn)
  结果是把符号位和数值邻接起来。

  为了引出在计算机中实现定点原码一位乘法的具体方案,先看手工乘法运算的实际执行步骤。
  假定:   X= 0.1101   Y= 0.1011
       0. 1 1 0 1
      * 0. 1 0 1 1
     
         1 1 0 1      X*Y = 0.10001111,符号为正
        1 1 0 1
       0 0 0 0
      1 1 0 1
    
  0. 1 0 0 0 1 1 1 1

  在手工计算时,其算法与执行步骤:
  ① 依乘数每一位上的取值为1还是为0,决定相加数取被乘数的值还是取零值;
  ② 各相加数从乘数的最低位求起,逐位变高并将相加数逐个左移一位,最后一步一次求和;
  ③ 符号位按正乘正、负乘负结果的符号位为正,正乘负、负乘正结果的符号为负的方案求出乘积的符号。

  在计算机内实现原码乘法运算,则不能简单照搬上述方法,主要表现在以下诸方面。

  首先,在运算器内是很难实现多个数据同时相加的,通常只能完成对两数的求和操作。这一点比较容易解决,可以每求得一个相加数,就同时完成与上一次部分积相加的操作;

  其次是在手工计算时,各相加数逐个左移一位,最终相加数的位数为相乘二数位数的两倍,而在计算机中,加法器的位数一般与寄存器的位数相同,而不是寄存器位数的两倍。这实际上也可以用另外的办法加以解决。手工计算时,各相加数是逐位左移一位,但很容易发现,在计算机内,在每次计算本次部分积之和时,前一次部分积的最低一位是不再参与相加计算的。这就意味着,若采用每求得一次部分积之后使其右移一位,则可以只用N位的加法器就能实现两个N位的数相乘,并有可能求得双倍位数的乘积。显而易见,若前一次部分积已经右移一位,就可以用其高位部分,再用加被乘数或加零的方法求得本次的部分积。

  最后一点,手工计算时,乘数每一位的值是0还是1都能直接看见,而在计算机内,若采用放乘数的寄存器的每一位来直接决定本次相加数是被乘数还是零,实现起来是不方便的,若均采用该寄存器的最低一位来执行这种判别就简便多了。为此,可以在每求一次部分积,使放乘数的寄存器执行一次右移操作即可实现。若移位时,使其最高一位数值位接收加法器最低位的移位输出,则完成乘法运算后,该寄存器中保存的将是乘积的低位部分,而原来的乘数在逐位移位过程中已经丢失。

  计算机内求乘积的符号,很容易用求相乘二数符号的半加和(异或值)实现。
  有了上述说明,我们就可以得到如图2.6所示的实现原码一位乘法的逻辑电路框图。


图2.6 实现原码一位乘法运算的逻辑线路框图

[1] [2]  下一页


Tag:电路基础电子电路基础,模拟电路基础电路基础

《原码一位乘法的实现算法》相关文章