【计算机组成原理】除法运算

除法本质

十进制

若 x/y=a…b,x除y等于a余b。

则有 a*y+b = x

这里进行三次除法,得到一个余数。

由于是三次,所以商的数值位有三个。

0.211 / 0/985 = 0.214 余0.000210

将商写为r进制定义形式

商:0.214 = 2 * 10-1 + 1 * 10-2 + 4 * 10-3

除数:0.985 = 985 * 10-3

商 * 除数 = (985 * 2 * 10-4 )+ (985 * 1 * 10-5 )+ (985 * 4 * 10-6

​ = 0.1970 + 0.00985 + 0.00394

每次除法都是接近当前余数,而不超过当前的余数。

二进制

若机器字长位5位,含一位符号位4位数值位。x=0.1011,y=0.1101 求x/y

可以比作 (0.1011×24) / (0.1101×24) = 0.1101……0.00000111

若除数大于余数,商1,否则商0.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4NMsDOhH-1666682985744)(C:\Users\17215\AppData\Roaming\Typora\typora-user-images\image-20221021225210161.png)]

+-x/
ACC被加数、和被减数、差乘积高位被除数、余数
MU乘数、乘积低位
X加数减数被乘数除数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0TjtgYKm-1666682985745)(C:\Users\17215\AppData\Roaming\Typora\typora-user-images\image-20221021225538974.png)]

原码除法

1、商和余数正负性进行异或运算
2、数值位取绝对值进行除法运算

若机器字长位5位,含一位符号位4位数值位。x=0.1011,y=0.1101 求x/y

|x| = 0.1011 |y| = 0.1101 [|y|] = 0.1101 [-|y|] = 1.0011

初始 ACC为被除数、MQ为0、X为除数。

MQ最后一位为当前要确定的商

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LMYS2WWD-1666682985745)(C:\Users\17215\AppData\Roaming\Typora\typora-user-images\image-20221021231414414.png)]

恢复余数

需要左移n次,进行n+1次除法

默认商1,使用当前余数的补码和除数绝对值的相反数的补码相加放到ACC内。

(ACC)+ [-|y|] -> ACC

01011 + 10011 = 11110

若当前ACC符号位为1,说明当前商错误,应修改为0,并把ACC的值恢复原样,即ACC加除数绝对值的补码。

(ACC)+ [|y|] -> ACC

11110 + 01101 =01011

小数点在符号位的后面。

商加符号,余数应×2-n

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-syxYrBCi-1666682985746)(C:\Users\17215\AppData\Roaming\Typora\typora-user-images\image-20221021232844599.png)]

# 若机器字长位5位,含一位符号位4位数值位。x=0.1011,y=0.1101 求x/y
|x| = 0.1011 |y| = 0.1101 [|y|]~补~ = 0.1101 [-|y|]~补~ = 1.0011
# 初始 ACC为被除数 MQ置为0
ACC 0.1011 MQ 0.000|0
X   0.1101
# 第一次除法商1,ACC+ 被除数绝对值的相反数的补码
ACC 1.1110 MQ 0.000|1
X   0.1101
## 除法操作后发现ACC符号位为1,恢复余数 ACC + 被除数绝对值的补码,商0并左移
ACC 1.0110 MQ 0.000|0
X   0.1101
# 第二次除法商1,ACC+ 被除数绝对值的相反数的补码
ACC 0.1001 MQ 0.000|1
X   0.1101
## 除法操作后发现符号位为0,左移
ACC 1.0010 MQ 0.001|0
X   0.1101
# 第三次除法商1,ACC+ 被除数绝对值的相反数的补码
ACC 0.0101 MQ 0.001|1
X   0.1101
## 除法操作后发现符号位为0,左移
ACC 0.1010 MQ 0.011|0
X   0.1101
# 第四次除法商1,ACC+ 被除数绝对值的相反数的补码
ACC 1.1101 MQ 0.011|1
X   0.1101
## 除法操作后发现ACC符号位为1,恢复余数 ACC + 被除数绝对值的补码,商0并左移
ACC 1.0100 MQ 0.110|0
X   0.1101
# 第五次除法商1,ACC+ 被除数绝对值的相反数的补码
ACC 0.0111 MQ 0.110|1
X   0.1101
## 除法操作后发现符号位为0,已进行n+1次除法,n次左移
得商+0.1101,余数为+0.0111×2^-5^
	

加减交替(不恢复余数法)

在恢复余数法中,若除法操作后,余数为负值,需要进行恢复余数。

若设当前负余数为a,除数绝对值补码为b

恢复余数为,左移,下一步又商1,相当于2余数+除数绝对值补码。

结果相当于2a+b

最后左移

这里可以使用这个变换,为加减交替法(不恢复余数法)。

步骤为:商0、左移、商1、加除数绝对值补码、左移

若最后余数为负,需要再进行交替为正。 这次会使左移n+1次。

一般情况下,上商n+1次,左移n次,做最后余数为负,这次会使左移n+1次。

# 若机器字长位5位,含一位符号位4位数值位。x=0.1011,y=0.1101 求x/y
|x| = 0.1011 |y| = 0.1101 [|y|]~补~ = 0.1101 [-|y|]~补~ = 1.0011
# 初始 ACC为被除数 MQ置为0
ACC 0.1011 MQ 0.000|0
X   0.1101
# 第一次操作商1,ACC+ 除数绝对值的相反数的补码
ACC 1.1110 MQ 0.000|1
X   0.1101
## 操作后发现ACC符号位为1,商0,左移,商1,ACC + 除数绝对值的补码,左移
ACC 1.0010 MQ 0.001|0
X   0.1101
ACC 0.1010 MQ 0.011|0
X   0.1101
# 第三次操作商1,ACC+ 除数绝对值的相反数的补码
ACC 1.1101 MQ 0.001|1
X   0.1101
## 操作后发现ACC符号位为1,商0,左移,商1,ACC + 除数绝对值的补码,此时已经上商5次,不需要移位
ACC 0.0111 MQ 0.110|1
X   0.1101
## 已进行n=5次上商
得商+0.1101,余数为+0.0111×2^-5^

补码除法(加减交替法)

符号参与运算

被除数/余数、除数,采用双符号位。

具体步骤

1、若被除数与除数同号,则被除数减去除数。异号则被除数加上除数。(注意是被除数,不是每一位的余数)
2、余数和除数同号、商1、余数左移一位减去除数。余数和除数异号、商0、余数左移一位加上除数。重复n次
3、最后商的末位恒置为1。

# 若机器字长位5位,含一位符号位4,n位数值位。x=+0.1000,y=-0.1011 求x/y
[x]~补~ = 00.1000  [y]~补~ = 11.0101 [-y]~补~ = 00.1011 

# 初始 ACC为余数 MQ为0 X 为除数
ACC 00.1000 MQ 00000
X   11.0101
# 第一步发现被除数和除数符号不同、加除数
ACC 11.1101 MQ 00000
X   11.0101
# 第二步 发现余数与除数同号 商1 余数左移 减去除数
ACC 00.0101 MQ 00010
X   11.0101
# 第三步 发现余数与除数异号 商0 余数左移 加上除数
ACC 11.1111 MQ 00100
X   11.0101
# 第四步 发现余数与除数同号 商1 余数左移 减去除数
ACC 00.1001 MQ 01010
X   11.0101
# 第五步 发现余数与除数异号 商0 余数左移 加上除数
ACC 00.0111 MQ 10100
X   11.0101
# 第六步 只剩最后一位 固定商1
ACC 00.0111 MQ 10101
X   11.0101

# 最后得:余数为0.0111×2^-4^、商[x/y]~补~为1.0101 [x/y]~原~1.1011

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值