计算机组成:补码一位乘法(booth法的)原理

计算流程

图源:王道计租
计算机组成:补码一位乘法(booth法的)原理_第1张图片

原理

对于任意一个数字 [ x y ] 补 [xy]_{补} [xy] != [ x ] 补 [x]_{补} [x] [ y ] 补 [y]_{补} [y]
我们接下来就是要推导其究竟应该等于什么
注意到
[ x ] 补 = x 0 . x 1 x 2 . . . . . . x n [x]_{补} = x_0.x_1x_2 ......x_n [x]=x0.x1x2......xn
其代表的真值可以表示为
x = − x 0 + x 1 ∗ 2 − 1 + x 2 ∗ 2 − 2 + . . . . . . x n ∗ 2 − n ) = − x 0 + ( x 1 − x 1 ∗ 2 − 1 ) + ( x 2 ∗ 2 − 1 − x 2 ∗ 2 − 2 ) = x 1 − x 0 + ( x 2 − x 1 ) ∗ 2 − 1 + ( x 3 − x 2 ) ∗ 2 − 2 + . . . . . . ( x n − x n − 1 ) ∗ 2 − n x= -x_0+x_1 *2^{-1}+x_2 *2^{-2}+......x_n *2^{-n})= \\-x_0+(x_1-x_1 *2^{-1})+(x_2*2^{-1}-x_2 *2^{-2})= \\x_1-x_0+(x_2-x_1) *2^{-1}+(x_3-x_2)*2^{-2}+......(x_n-x_{n-1}) *2^{-n} x=x0+x121+x222+......xn2n)=x0+(x1x121)+(x221x222)=x1x0+(x2x1)21+(x3x2)22+......(xnxn1)2n
我们知道,补码的符号位是可以直接参与运算的。
两个补码的加减是可以直接连带着符号进行的。
但是如果我们要计算x
y的补码,是不可以直接等价于x的补码和y的补码相乘的
这是因为这么解释后,没法再按照补码的规则解释回去。
因此才有了如下的变形。
计算 [ x ∗ y ] 补 [x*y]_{补} [xy]的等价形式

x ∗ y = x ∗ ( − y 0 + y 1 ∗ 2 − 1 + y 2 ∗ 2 − 2 + . . . . . . y n ∗ 2 − n ) = x ∗ ( − y 0 + ( y 1 − y 1 ∗ 2 − 1 ) + ( y 2 ∗ 2 − 1 − y 2 ∗ 2 − 2 ) + . . . . . . ( y n ∗ 2 − n + 1 − y n ∗ 2 − n ) ) = x ∗ ( y 1 − y 0 + ( y 2 − y 1 ) ∗ 2 − 1 + ( y 3 − y 2 ) ∗ 2 − 2 + . . . . . . ( y n − y n − 1 ) ∗ 2 − n ) x*y=x*(-y_0+y_1 *2^{-1}+y_2 *2^{-2}+......y_n *2^{-n})\\=x*(-y_0+(y_1-y_1 *2^{-1})+(y_2*2^{-1}-y_2 *2^{-2})\\+......(y_n*2^{-n+1}-y_n *2^{-n}))\\=x*(y_1-y_0+(y_2-y_1) *2^{-1}+(y_3-y_2)*2^{-2}\\+......(y_n-y_{n-1}) *2^{-n}) xy=x(y0+y121+y222+......yn2n)=x(y0+(y1y121)+(y221y222)+......(yn2n+1yn2n))=x(y1y0+(y2y1)21+(y3y2)22+......(ynyn1)2n)
因此逆向按照 [ x ] 补 [x]_{补} [x]的解释方式
[ x ∗ y ] 补 = [ x ] 补 ∗ [ y 1 − y 0 , . . . , y n − y n − 1 ] [x*y]_{补}=[x]_{补}*[y_1-y_0,...,y_n-y_{n-1}] [xy]=[x][y1y0,...,ynyn1]
即为x与 [ y 1 − y 0 , . . . , y n − y n − 1 ] [y_1-y_0,...,y_n-y_{n-1}] [y1y0,...,ynyn1]依次按照乘法相乘即可
我们依次按照第二项的某一位的正负,按照类似原码相乘的方法进行计算即可。具体参考上边的计算方法。

你可能感兴趣的:(计算机组成)