一、原码一位乘法
1.1 概念
在定点计算机中,两个原码表示的数相乘的运算规则是:乘积的符号位由两数的符号按异或运而乘积的数值部分则是两个正数相乘之积。设n位被乘数和乘数用定点小数表示:
被乘数
[
x
]
原
=
x
f
x
0
x
1
x
2
.
.
.
x
n
[x]_原 = x_f x_0 x_1 x_2... x_n
[x]原=xfx0x1x2...xn乘数
[
y
]
原
=
y
f
y
0
y
1
y
2
.
.
.
y
n
[y]_原 = y_f y_0 y_1 y_2... y_n
[y]原=yfy0y1y2...yn则乘积
[
z
]
原
=
(
x
f
⊕
y
f
)
.
(
0.
x
0
x
1
x
2
.
.
.
x
n
)
(
0.
y
1
y
2
.
.
.
y
n
)
[ z ]_原 = ( x_f⊕y_f ) . (0. x_0 x_1 x_2...x_n)(0 . y_1 y_2...y_n)
[z]原=(xf⊕yf).(0.x0x1x2...xn)(0.y1y2...yn)式中,xf为被乘数符号,yf为乘数符号。
乘积符号的运算法则是:同号相乘为正,异号相乘为负。由于被乘数和乘数和符号组合只有四种情况(xf yf = 00,01,10,11),因此积的符号可按“异或”(按位加)运算得到。
数值部分的运算方法与普通的十进制小数乘法相类似,不过对于用二进制表达的数来说,其更为简单:从乘法y的最低位开始,若这一位为“1”,则将被乘数x写下;若这一位为“0”,则写下全0。然后再对乘数y的高一位进行的乘法运算,其规则同上,不过这一位乘数的权与最低位不一样,因此被乘数x要左移一位。依次类推,直到乘数各位乘完为止,最后将它们统统加起来最后乘积z 。
1.2 例题
设机器字长为5位(含一位符号位,n=4),x= - 0.1101,y= +0.1011,采用原码一位乘法求 x · y
符号位通过异或确定;数值部分通过被乘数和乘数绝对值的n轮加法、移位完成,根据当前乘数中参与运算的位确定高位部分积(ACC)加什么。若当前运算位为1,则ACC+[ | x | ]原;若为0,则ACC+0
每轮加法后,高位部分积与低位部分积(MQ)内容统一右移
1.3 注意事项
① 乘数的符号位不参与运算,可以省略
② 原码一位乘法可以只用单符号位
③ 答题时最终结果最好写为原码机器数
二、补码一位乘法(booth算法)
2.1 概念
这是一种有符号数的乘法,主要采用相加和相减操作计算补码数据的乘积。首先来看它的运算规则:
设
[
X
]
补
=
x
s
x
1
x
2
…
x
n
,
[
Y
]
补
=
y
s
y
1
y
2
…
y
n
[X]_补=x_sx_1x_2…x_n,[Y]_补=y_sy_1y_2…y_n
[X]补=xsx1x2…xn,[Y]补=ysy1y2…yn则运算规则如下:
1:符号位参与运算,运算的数均以补码表示。
2:被乘数一般取双符号位参与运算,部分积取双符号位,初值为0,乘数可取单符号位。
3:乘数末位增设附加位Yn+1,且初值为0。
4:根据(yn,yn+1)的取值来确定操作。
5:移位按补码右移规则进行。
6:按照上述算法进行n+1步操作,但第n+1步不再移位(共进行n+1次累加和n次右移),仅根据yn与yn+1的比较结果做相应运算。
所谓的booth算法看似复杂,其实基本过程就是n+1次的“判断,加减,右移的循环”,其中右移次数为n次。
2.2 例题
设机器字长为5位(含一位符号位,n=4),x= - 0.1101,y= +0.1011,采用booth算法求 x · y
n轮加法、算数右移,加法规则如下:
辅助位-MQ最低位 = 1时,ACC+[x]补
辅助位-MQ最低位 = 0时,ACC+0
辅助位-MQ最低位 = -1时,ACC+[-x]补
补码的算术右移:
符号位不动,数值位右移,正数右移补0,负数右移补1(符号位是啥就补啥)
2.3 注意事项
① 根据辅助位与最低位差值来决定加上对应的值
② 清楚补码的算术右移规则
③ 最后乘数数值为运算结束之后要多来一次加法