计算机二进制乘法运算(原码,补码)

一.原码的一位乘法

1.乘法规则

  • (1)乘积的符号位为:被乘数的符号位与乘数的符号位相异或
  • (2)乘积的数值为被乘数的数值与乘数的数值之积,即:
    ∣ Z ∣ = ∣ X ∗ Y ∣ = ∣ X ∣ ∗ ∣ Y ∣ |Z|=|X*Y|=|X|*|Y| Z=XY=XY
  • (3)乘积的原码为: [ Z ] 原 = [ X ∗ Y ] 原 = ( x 0 ⨁ y 0 ) ( ∣ X ∣ ∗ ∣ Y ∣ ) {[Z]_原}=[X*Y]_原=(x_0\bigoplus y_0)(|X|*|Y|) [Z]=[XY]=(x0y0)(XY)

2.算法描述

设置一个寄存器D,开始置0,运算中存放部分积的高位,最后存放数值乘积的高位。
用一个寄存器A,开始时存放乘数,运算中存放D右移后不参与运算的部分积的低位和乘数的未运算位,最后存放数值乘积的低位。寄存器B存放被乘数。

从乘数的最低为开始运算,若为1,则被乘数加到部分积D;若为0,则部分积加0.部分积和乘数联合右移1位。再次检测乘数的次低位,若为1,则被乘数加到部分积;若为0,则部分积加0。部分积和乘数联合右移1位。上述过程循环进行,直到乘数各位运算完毕。

3.运算过程

注意运算中在最高数值位前多设置了1位的目的是防止原码相加产生溢出。
如果产生溢出,溢出的位会被多设置的高1位先保存,然后通过下一次右移移动到数值位进行运算。以保证运算结果的正确性。
在这里插入图片描述

4.运算电路

原码一位乘法的运算电路框图如下:
在这里插入图片描述

二.补码的乘法运算——布斯(Booth)法

1.原理推导

在这里插入图片描述

2.运算法则

  • 如果后项减前项为0,则部分积+0
  • 如果后项减前项为1,则部分积+ [ x ] 补 [x]_补 [x]
  • 如果后项减前项为-1,则部分积+ [ − x ] 补 [-x]_补 [x]
    在这里插入图片描述

布斯算法可描述如下:

  • (1)乘数与被乘数均用补码表示,连同符号位一起参与运算
  • (2)乘数最低位后增加一个附加位(用 A − 1 A_{-1} A1表示),设定初始值为0.
  • (3)从附加为开始,根据上面所述的操作完成运算

3.运算过程

注意在运算过程中设置了两个符号位,高1位的符号位设置的目的是防止补码运算产生的溢出。
假如数值位的运算产生进位,同时导致向符号位进位时,低1位的符号位改变为新数值为的最高位,而更高位的符号位依然可以保持原来符号位的值,再通过联合右移就可以防止溢出保证运算正常进行。
在这里插入图片描述
注意:对于小数运算,在最后一次循环中不做DA右移而将A的最低位置0,从而在DA中得到小数相乘运算的正确结果。

4.运算电路

在这里插入图片描述

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐