计算机二进制乘法运算(原码,补码)
文章目录
一.原码的一位乘法
1.乘法规则
- (1)乘积的符号位为:被乘数的符号位与乘数的符号位相异或
- (2)乘积的数值为被乘数的数值与乘数的数值之积,即:
∣ Z ∣ = ∣ X ∗ Y ∣ = ∣ X ∣ ∗ ∣ Y ∣ |Z|=|X*Y|=|X|*|Y| ∣Z∣=∣X∗Y∣=∣X∣∗∣Y∣ - (3)乘积的原码为: [ Z ] 原 = [ X ∗ Y ] 原 = ( x 0 ⨁ y 0 ) ( ∣ X ∣ ∗ ∣ Y ∣ ) {[Z]_原}=[X*Y]_原=(x_0\bigoplus y_0)(|X|*|Y|) [Z]原=[X∗Y]原=(x0⨁y0)(∣X∣∗∣Y∣)
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} A−1表示),设定初始值为0.
- (3)从附加为开始,根据上面所述的操作完成运算
3.运算过程
注意在运算过程中设置了两个符号位,高1位的符号位设置的目的是防止补码运算产生的溢出。
假如数值位的运算产生进位,同时导致向符号位进位时,低1位的符号位改变为新数值为的最高位,而更高位的符号位依然可以保持原来符号位的值,再通过联合右移就可以防止溢出保证运算正常进行。
注意:对于小数运算,在最后一次循环中不做DA右移而将A的最低位置0,从而在DA中得到小数相乘运算的正确结果。