一、原码一位乘和补码一位乘对比
原码一位乘 | 补码一位乘 |
---|---|
进行n轮加法、移位 | 进行n轮加法、移位,最后再多来一次加法 |
每次加法可能加0,+[|x|]原 | 每次加法可能+0、+[x]补、+[-x]补 |
每次移位是“逻辑右移” | 每次移位是“补码的算数右移” |
符号位不参与运算 | 符号位参与运算 |
① 硬件构成多了辅助位,MQ共n+2位 ② 寄存器中都统一用n+2位,因此采用双符号位补码运算 ③ 会有一个辅助电路实现[-x]补的转换 |
二、补码一位乘(手算模拟)
1、例题
设机器字长为5位(含1位符号位,n=4),×=-0.1101, y= +0.1011,采用Booth算法求x*y
[x]补=11.0011, [-x]补=00.1101, [y]补=0.1011
注意:正数的补码仍然是正数。
[x*y]补 = 11.01110001
所以x*y = -0.10001111
2、n轮加法、算数右移,加法规则如下
辅助位 - MQ中“最低位”=1时,(ACC)+[x]补
辅助位 - MQ中“最低位”=0时,(ACC)+0
辅助位 - MQ中“最低位”=-1时,(ACC)+[-x]补
3、补码的算数右移
符号位不动,数值位右移,正数右移补o,
负数右移补1(符号位是啥就补啥)
三、课后练习题
用补码一位乘计算X*Y
X = -0.11010,Y = -0.01110
注:原码一位乘和补码一位乘的计算结果是一样的