计算机组成原理——第二章(14)

本小节我们讲一下原码的除法运算,包括了恢复余数法和加减交替法(不恢复余数法),带大家详细讲一下计算机是如何运算的

原码的除法运算

1.除法的运算的思想

大家除法肯定会的,先来看一下十进制的除法是怎么做的?

0.211*0.985=?这里我就不过多赘述,直接看运算过程

 接下来我们看一下二进制的除法是怎么做的?

设机器字长为5位(含1位符号位,n=4),x=0.1011,y=0.1101,求x/y

为了方便计算,我们将x和y都乘以2^4,得到被除数01011、除数01101

先来看第一步,01011<01101,所以得到一个0,模仿十进制一样的,01011*2得到10110(因为机器字长为5位),这时候被除数>除数,得到1,被除数10110-除数01101=1001,1001*2=10010,发现10010>01101,就将两者相减,以此类推,直到得到的商填满了5位字节

具体过程如下

 还记得我们之前讲过,在除数运算中ACC存储被除数、余数;MQ存储商;X存储除数

接下来我们讲一下计算机原码除法的运算过程,内容有点复杂有点绕,请同学们认真听

2.原码除法:恢复余数法

像乘法一样的,为了确定商的正负性,我们会将被除数和除数进行一个异或运算

我们重点来学习一下,被除数的绝对值和除数绝对值的除法运算。

设机器字长为5位(含1位符号位,n=4),x=0.1011,y=0.1101,采用原码恢复余数法求x/y

我们先算出除数|y|的补码和-|y|的补码方便以后运算,得到[|y|]补=0.1101,[-|y|]补=1.0011,x=|x|=0.1011。

我们知道,想要确定商,会先判断被除数和除数的大小,如果被除数>除数,那么商就是1,反之就是0。但是计算机很笨,它不会判断,初始的时候只会给商赋值为1,但是如果赋值为1的话,被除数-除数得到的余数<0,这显然是不对的,所以我们会用恢复余数法,就当于亡羊补牢,把除数加回去,商从1变成0,然后余数左移(也就是*2),进行接下来重复的操作

听起来有点绕,我带大家一步一步过一遍

ACC里面先存放被除数、余数,MQ存储商,X存储除数

 我们说过,计算机很傻,默认会把商赋值为1,于是被除数-除数=(ACC)+[-|y|]补=01011+10011=11110

很明显符号位=1是个负数,所以计算机要及时改正,(ACC)+[|y|]补=11110+01101=01011,同时将商1变成0

好,我们现在已经是确定了一位的商,更十进制一样,我们需要将余数左移一位(相当于*2)同时MQ也需要逻辑左移,因为一位的商我们已经确定了,接下来就需要确定下一位 

 一样的,计算机很傻,它会将商赋值为1,(ACC)+[-|y|]补=10110+10011=01001,得到的是一个正数,这就说明余数>除数,商1是对的,然后ACC和MQ逻辑左移,低位高位舍弃,低位补0

 然后就一直循环上面的处理方法,直到商填满5位机器字长,同时需要注意的是,最后得到的余数=0.0111*2^{-n}(n=4)

同学们看到这里可能脑子里有点问题,为什么要用[|y|]补 、[-|y|]补参与运算?

我们之前说过计算机运算都是将原码转成补码,然后运算的,符号位很好处理,异或一下就行了。

所以我们要将被除数和除数都加绝对值,而对于正数而言,补码和原码表示形式是一样的,所以上面的运算都是补码之间的运算。 

直到恢复余数法的机算过程之后,相信大家手算过程也可以算出来,因为过程是一样的

大家有没有思考过,恢复余数法有点麻烦 ,因为它为了弥补自己错误,还要再加上除数变成原本的样子,接下来我们学习一下加减交替法(不恢复余数法)

3.原码除法:加减交替法(不恢复余数法)

计算机商初始为1,但是发现余数<0了,假设余数=a,除数=b,所以这时候为了弥补错误余数=a+b,同时余数左移,余数=(a+b)*2=2a+2b,然后再余数-除数=2a+2b-b=2a+b。那既然我们知道最终的结果,能不能将错就错,当a<0的时候,商肯定是0,然后将余数变成2a+b,下一位商=1,这就是加减交替法(不恢复余数法)

 还是一样的题目

 被除数-除数=0.1011-0.1101=1.1110是一个负值,商肯定是0,一不做二不休,将余数1.1110左移一位1.1100再加上除数0.1101,得到新的余数0.1001

余数0.1001为正,商=1,余数左移1位得到1.0010,再减去|除数|1.0011,得到下一个余数0.0101也是一个正数,接着一直按照余数是正数/负数的操作进行运算

 需要注意的是,得到的余数的正负性和商是一样的,如果最后得到的余数是负数,需商0,并+[|y|]补得到正确余数,然后再根据商的正负性判断余数的正负性

加减交替法具体流程就是这样

 需要注意的是,加/减操作可能是n+1次也可能是n+2次,根据最后一次余数的正负性判断,左移n次(最后一次加减完不移位)。

还有,定点小数除法规定,被除数要小于除数,不然的话商>1,而定点小数不能表示>1的数,计算机的根据第一步的余数来确定被除数是不是小于除数,如果得到余数是负值,说明被除数<除数

  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值