定点数的乘法运算
在计算机中,乘法运算由累加和右移操作实现。根据机器数的不同分为原码一位乘法和补码一位乘法。
原码一位乘法
符号位和数值位是分开求的
乘积符号由两个数的符号位异或形成,
乘积数值部分则是两个数的绝对值相乘之积
手算模拟
符号位:Ps = As ⊕ Bs = 0 ⊕ 0 = 0
手算模拟(二进制)
(乘数)0.1011 = 1 * 2-1 + 0 * 2-2 + 1 * 2-4
(被乘数)0.1101 = 1101 * 2-4
0.1101*1.1011=(1101 * 1 * 2-8)+(1101 * 1 * 2-7)+(1101 * 1 * 2-5)用移位实现
【例题】设机器字长为n+1=5位,[x]原=1.1101,[y]原=0.1011,用原码一位法求x·y。
正式进行乘法运算之前ACC置为0
当前MQ最低位为1,ACC加上被乘数;当前位为0,ACC加上0。(上图当前位就为1,则ACC应加上被乘数01101,这个运算由ALU即算法逻辑单元里的加法电路实现的,相加的结果会放在ACC寄存器里面(ACC)+(X)—> ACC 00000+01101=01101
然后求下一个位积,由于手动计算时需错位,计算机将ACC和MQ里的数字统一逻辑右移一位,高位补零,此时ACC=00110 MQ=10101;同上当前MQ最低位为1,(ACC)+(X)–>ACC 00110+01101=10011)
运算法则:先加法再位移,重复n次数值位有几位就重复几次
乘数的符号位不参与运算
修改符号位xs⊕ys= 1⊕0=1
运算时可能出现绝对值大于1的情况(但此刻结果并未溢出),部分积和被乘数取双符号位
、、、、、、、、手算模拟、、、、、、、、
补码一位乘法(Booth算法)
进行n轮,加法、移位运算,最后多来一次加法
每次加法可能+0、+[x]补、+[-x]补
每次移位是"补码的算数右移"
符号位参与运算
辅助位 - MQ中最低位 = 1时,(ACC)+[x]补
辅助位 - MQ中最低位 = 0时,(ACC)+0
辅助位 - MQ中最低位 = -1时,(ACC)+[-x]补
补码的算数右移:符号位不动,数值位右移;正数右移补零,负数右移补1(符号位是啥就补啥)
定点数的除法法运算
“累加”–“左移”
原码除法运算
商符和商值分开进行运算。
商符:符号位“异或”形成。Qs=xs⊕ys
商值:|Q|=|x|/|y|
恢复余数法
设机器字长为5位,(含1位符号位,n=4),x=0.1011,y=0.1101,采用原码恢复除数法求x/y.
不恢复余数法
求|Q|。
1.符号位不参加运算。
2.被除数减去除数(|x|-|y|=|x|+(-|y|)=|x|+[-|y|]补)
余正商上1,余商左移1,再减去除数
余负商上0,余商左移1,再加上除数
3.当第n+1步余数为负,需加上|y|
得到第n+1步正确的余数。(余数和被除数同号)
正数原码补码相同。
补码除法运算(加减交替法)
双符号位表示
加减交替:
1.符号位和数值位一起参加运算,商符自然形成。数值均用补码表示
2.被除数和除数符号决定第一步做加法还是减法:
被除除同号,被除减除数
被除除异号,被除加除数
3.余除同号商上1,余左移1减除数
余除异号商上0,余左移1加除数
4.重复执行第3步操作n次
5.若对商的精度没有特殊要求,则一般采用”末位恒置1“
法