漫谈计算机组成原理(九·续)定点数的除法运算

本文讲什么?

在上一篇文章中,咱们主要讲述了定点数的加、减、乘运算,惟独没有讲解除法运算。缘由有两个,一来上一篇文章的内容确实比较多,二来除法运算比乘法相对复杂。
因此,本文将从除法的来历讲起,而后讲除法运算的几种方法。微信

除法运算的造成

咱们来看这样一个例子:在8位寄存器中存储了00000111,4位寄存器中存储了0010,计算00000111/0010。
回想一下,咱们整数的除法是怎么作的?如上面的数改写成十进制,即7/2的结果是多少呢?
咱们确定是先列出一个除法式子,像下面这样。
设计

咱们首先是判断一下,当前被除数7中有几个除数,有几个则商就上几个,而后被除数减去除数乘商获得余数,接着判断余数中有几个除数,直到除不开为止。若是发现商是0,则被除数补0,除数向右移动一位,继续计算。
在7中有3个2,结果是余1,1中不存在2,这就是最终的结果。
接着看一下上面的例子:咱们要作的,确定是先列出一个式子。
3d

和整数除法同样,两个二进制数之间的除法一样的。步骤以下:cdn

  • 要判断被除数中有几个除数
  • 有几个则商上几,有n个除数商就是n(二进制除法中,结果不是1就是0)
  • 被除数-n*除数 = 被除数’
  • 除数向右移动一位
  • 继续上述过程,获得最终结果

大致上的过程就是这样的。根据上述的过程,咱们可以很容易的设计出基本的除法器。此外,要注意的是,除法器应该具备判断除数或者被除数是否为0的功能,由于被除数为0时结果为0,没有意义;而除数为0时,结果为无穷大,没法表示。blog

计算机定点数除法运算的几种方法

在了解了除法器的基本状况后,咱们就来说除法运算的两种方法。分别是:恢复余数法、加减交替法。it

恢复余数法

从名字中能够看出,这种方法对余数作了某种恢复。为何会出现这种恢复呢?缘由很简单,咱们在分析通常除法的过程当中能够看到,若是除数和被除数当前对齐的位上,被除数有0个除数,此时咱们就须要将被除数补0。可是计算机并不知道被除数是否够除除数(由于无论除数和被除数的状况如何,最后的商上的位,不是0就是1),就须要先用被除数减去除数,若是发现余数是小于0的,那么计算机就知道了此时对齐的位没法获得最终的结果,则将被除数向又移动一位。这就是恢复余数法的核心思想。固然,咱们在直接计算的时候,须要将两个数的绝对值相除,再获得最终的结果。
接下来咱们就来看,恢复余数法到底是如何运算的。io

  • 例子:x=-0.1011,y=-0.1101,求[x/y]
    由于须要使用两个数的绝对值运算,因此咱们先获得两个数的绝对值。
    [x]=1.1011,[x*]=0.1011;[y]=1.1101,[y*]=0.1101。
    还有,在运算时,由于涉及到两个数的减法,因此咱们须要获得[-y*]
    [-y*]=1.0011.计算过程以下表。


    初始化的时候,被除数放到被除数的位置,而商为0.先减去除数,若是余数为正,则商上1,不然上0,接着将被除数加上除数。不管哪一种状况,都须要将被除数向左移动一位。这就是恢复余数法的过程。最终,别忘了使用异或操做获得符号位,才能获得最终结果。

加减交替法

加减交替法也称做不恢复余数法。为啥呢,由于在加减交替法中,先让被除数减除数,若是结果为正,则上1,;若是结果为负,则加上除数。接着将被除数向作移动一位。不过你要是细看的话,这两种方法其实并无太大的区别,本身好好体会一下就好了。
下面看个例子:class

  • 例子:x=0.1011,y=0.1101,求[x/y]
    [x]=1.1011,x*=0.1011;[y]=0.1101,y*=0.1101,[-y*] = 1.0011。
    计算过程以下:

结语

本节是承接定点数的计算方法的,下一节,咱们将开始计算机的运算方法后半部分的内容,即浮点数的计算过程,内容并很少,因此会放到一篇文章中。
若是你喜欢个人文章,欢迎关注个人微信公众号:最高权限比特流原理

**参考:《计算机组成原理》唐朔飞**
相关文章
相关标签/搜索