【学习计算机组成原理】补码的乘运算


如果看了 原码的乘运算,这篇更容易理解。

补码一位乘运算

假设:
[X]=xn-1xn-2……x1x0
[Y]=yn-1yn-2……y1y0

已知补码的性质: X = − x n − 1 × 2 n − 1 + x n − 2 × 2 n − 2 + … … + x 1 × 2 1 + x 0 × 2 0 X=-x_{n-1}\times2^{n-1}+x_{n-2}\times2^{n-2}+……+x_{1}\times2^{1}+x_{0}\times2^{0} X=xn1×2n1+xn2×2n2++x1×21+x0×20

令n=32则:
Y = − y 31 × 2 31 + y 30 × 2 30 + … … + y 1 × 2 1 + y 0 × 2 0 Y=-y_{31}\times2^{31}+y_{30}\times2^{30}+……+y_{1}\times2^{1}+y_{0}\times2^{0} Y=y31×231+y30×230++y1×21+y0×20
Y = − y 31 × 2 31 + ( y 30 × 2 31 − y 30 × 2 30 ) + … … + ( y 1 × 2 2 − y 1 × 2 1 ) + ( y 0 × 2 1 − y 0 × 2 0 ) Y=-y_{31}\times2^{31}+(y_{30}\times2^{31}-y_{30}\times2^{30})+……+(y_{1}\times2^{2}-y_{1}\times2^{1})+(y_{0}\times2^{1}-y_{0}\times2^{0}) Y=y31×231+(y30×231y30×230)++(y1×22y1×21)+(y0×21y0×20)
Y = ( y 30 − y 31 ) × 2 31 + ( y 29 − y 30 ) × 2 30 + … … + ( y 0 − y 1 ) × 2 1 + ( y − 1 − y 0 ) × 2 0 Y=(y_{30}-y_{31})\times2^{31}+(y_{29}-y_{30})\times2^{30}+……+(y_{0}-y_{1})\times2^{1}+(y_{-1}-y_{0})\times2^{0} Y=(y30y31)×231+(y29y30)×230++(y0y1)×21+(y1y0)×20
这里y-1=0时等式成立
为了便于处理,我们对Y乘2-32,这样小数点位于最前面。
2 − 32 × [ X × Y ] 补 = X × ( y 30 − y 31 ) × 2 − 1 + X × ( y 29 − y 30 ) × 2 − 2 + … … + X × ( y − 1 − y 0 ) × 2 − 32 2^{-32}\times[X\times Y]_{补}=X\times(y_{30}-y_{31})\times2^{-1}+X\times(y_{29}-y_{30})\times2^{-2}+……+X\times(y_{-1}-y_{0})\times2^{-32} 232×[X×Y]=X×(y30y31)×21+X×(y29y30)×22++X×(y1y0)×232
2 − 32 × [ X × Y ] 补 = 2 − 1 × ( X × ( y 30 − y 31 ) + 2 − 1 × ( X × ( y 29 − y 30 ) + … … + 2 − 1 × ( X × ( y − 1 − y 0 ) ) ) ) 2^{-32}\times[X\times Y]_{补}=2^{-1}\times(X\times(y_{30}-y_{31})+2^{-1}\times(X\times(y_{29}-y{30})+……+2^{-1}\times(X\times(y_{-1}-y_{0})))) 232×[X×Y]=21×(X×(y30y31)+21×(X×(y29y30)++21×(X×(y1y0))))
我们可以看到等式中存在 y 31 y_{31} y31,表明补码的符号位也参加运算。
我们根据上面得到递推公式:
P i + 1 = 2 − 1 × ( X × ( y i − 1 − y i ) + P i ) P_{i+1}=2^{-1}\times(X\times(y_{i-1}-y_{i})+P_{i}) Pi+1=21×(X×(yi1yi)+Pi)
P 0 = 0 P_{0}=0 P0=0

yi-1yi操作
00算术右移
01减X后算术右移
10加X后算术右移
11算术右移

举例说明:
X=-3 Y=-2
[X]=1101
[Y]=1110
[X]变补=0011(减X时用)
在这里插入图片描述
根据yi-1和yi两位来判断操作是什么,移位是算术移位,因为上面符号位始终都是0,所以每次都补0。
结果0000 0110表示+6,可以看出如果高四位全是0(等于0110的符号位),则结果可以用4位数存放而不会溢出。
溢出:高四位不全为Y的符号位

补码两位乘运算

推导:
( 1 ) P i + 1 = 2 − 1 × ( X × ( y i − 1 − y i ) + P i ) (1)P_{i+1}=2^{-1}\times(X\times(y_{i-1}-y_{i})+P_{i}) (1)Pi+1=21×(X×(yi1yi)+Pi)
( 2 ) P i + 2 = 2 − 1 × ( X × ( y i − y i + 1 ) + P i + 1 ) (2)P_{i+2}=2^{-1}\times(X\times(y_{i}-y_{i+1})+P_{i+1}) (2)Pi+2=21×(X×(yiyi+1)+Pi+1)
将(1)式代入(2)式得:
P i + 2 = 2 − 1 × ( X × ( y i − y i + 1 ) + 2 − 1 × ( X × ( y i − 1 − y i ) + P i ) ) P_{i+2}=2^{-1}\times(X\times(y_{i}-y_{i+1})+2^{-1}\times(X\times(y_{i-1}-y_{i})+P_{i})) Pi+2=21×(X×(yiyi+1)+21×(X×(yi1yi)+Pi))
P i + 2 = 2 − 1 × 2 − 1 × ( X × ( 2 y i − 2 y i + 1 ) + X × ( y i − 1 − y i ) + P i ) P_{i+2}=2^{-1}\times2^{-1}\times(X\times(2y_{i}-2y_{i+1})+X\times(y_{i-1}-y_{i})+P_{i}) Pi+2=21×21×(X×(2yi2yi+1)+X×(yi1yi)+Pi)
P i + 2 = 2 − 2 × ( X × ( y i − 1 + y i − 2 y i + 1 ) + P i ) P_{i+2}=2^{-2}\times(X\times(y_{i-1}+y_{i}-2y_{i+1})+P_{i}) Pi+2=22×(X×(yi1+yi2yi+1)+Pi)

yi+1yiyi-1操作迭代公式
000右移两位 2 − 2 × ( 0 + P i ) 2^{-2}\times(0+P_{i}) 22×(0+Pi)
001加X,右移两位 2 − 2 × ( X + P i ) 2^{-2}\times(X+P_{i}) 22×(X+Pi)
010加X,右移两位 2 − 2 × ( X + P i ) 2^{-2}\times(X+P_{i}) 22×(X+Pi)
011加2X,右移两位 2 − 2 × ( 2 X + P i ) 2^{-2}\times(2X+P_{i}) 22×(2X+Pi)
100减2X,右移两位 2 − 2 × ( − 2 X + P i ) 2^{-2}\times(-2X+P_{i}) 22×(2X+Pi)
101减X,右移两位 2 − 2 × ( − X + P i ) 2^{-2}\times(-X+P_{i}) 22×(X+Pi)
110减X,右移两位 2 − 2 × ( − X + P i ) 2^{-2}\times(-X+P_{i}) 22×(X+Pi)
111右移两位 2 − 2 × ( 0 + P i ) 2^{-2}\times(0+P_{i}) 22×(0+Pi)
  • 因为存在加2X的情况,X需要左移1位,所以最高位需要加1位,用2位符号位。
  • 加2X可以将X的补码左移1位之后再相加。
  • 减2X可以将X的变补码左移1位之后再相加。

仍然用上面的例子:
X=-3 Y=-2
[X]=1101
[Y]=1110
[X]变补=0011(减X时用)
在这里插入图片描述
根据yi-1和yi和yi+1三位来判断操作是什么,移位是算术移位,因为上面符号位始终都是0,所以每次都补0。
可以看到,只循环了两次(n/2次)。效率更高。

  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序鸡

如果帮到您,点个赞鼓励一下吧。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值