定点数的乘除运算

定点数的乘除运算

  • 定点数的乘法运算
    • 原码一位乘法
    • 手算模拟
    • 补码一位乘法(Booth算法)
  • 定点数的除法法运算
    • 原码除法运算
      • 恢复余数法
      • 不恢复余数法
    • 补码除法运算(加减交替法)
    • 总结

定点数的乘法运算

在计算机中,乘法运算由累加和右移操作实现。根据机器数的不同分为原码一位乘法和补码一位乘法。

原码一位乘法

符号位和数值位是分开求的
乘积符号由两个数的符号位异或形成,
乘积数值部分则是两个数的绝对值相乘之积

手算模拟

符号位:Ps = As ⊕ Bs = 0 ⊕ 0 = 0
手算模拟(二进制)
定点数的乘除运算_第1张图片
(乘数)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。
定点数的乘除运算_第2张图片
正式进行乘法运算之前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次数值位有几位就重复几次
定点数的乘除运算_第3张图片
乘数的符号位不参与运算
修改符号位xs⊕ys= 1⊕0=1
定点数的乘除运算_第4张图片
定点数的乘除运算_第5张图片

运算时可能出现绝对值大于1的情况(但此刻结果并未溢出),部分积和被乘数取双符号位
、、、、、、、、手算模拟、、、、、、、、
定点数的乘除运算_第6张图片

补码一位乘法(Booth算法)

进行n轮,加法、移位运算,最后多来一次加法
每次加法可能+0、+[x]、+[-x]
每次移位是"补码的算数右移"
符号位参与运算定点数的乘除运算_第7张图片
辅助位 - 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.

定点数的乘除运算_第8张图片

定点数的乘除运算_第9张图片
定点数的乘除运算_第10张图片
定点数的乘除运算_第11张图片

不恢复余数法

求|Q|。
1.符号位不参加运算。
2.被除数减去除数(|x|-|y|=|x|+(-|y|)=|x|+[-|y|]
余正商上1,余商左移1,再减去除数
余负商上0,余商左移1,再加上除数

3.当第n+1步余数为负,需加上|y|得到第n+1步正确的余数。(余数和被除数同号)定点数的乘除运算_第12张图片

定点数的乘除运算_第13张图片
正数原码补码相同。

补码除法运算(加减交替法)

双符号位表示
加减交替:
1.符号位和数值位一起参加运算,商符自然形成。数值均用补码表示
2.被除数和除数符号决定第一步做加法还是减法:
被除除同号,被除减除数
被除除异号,被除加除数

3.余除同号商上1,余左移1减除数
余除异号商上0,余左移1加除数

4.重复执行第3步操作n次
5.若对商的精度没有特殊要求,则一般采用”末位恒置1“

总结

定点数的乘除运算_第14张图片

你可能感兴趣的:(计算机组成原理,经验分享)