计算机组成

5 乘法器和除法器

5.5 除法的运算过程

在加、减、乘、除这样的基本算数运算当中,除法是最为复杂的。因此,我们想要实现硬件的除法器,还是从最简单的情况开始说起。

我们还是采用纸笔进行模仿除法运算的方式,来回顾一下除法的运算过程。这里是两个十进制的数,被除数是1001010,除数是1000。这是两个经过精心挑选的数,用它们进行除法运算,运算的过程中只会出现0或者1,所以看上出又像是二进制表示的数。所以我们通过这个例子可以看出十进制的除法运算和二进制的除法运算之间的联系。这个运算的过程,我们已经非常熟悉了,所以我们快速地来看一遍。

首先将除数和被除数,从高位开始对齐,然后将对齐的这部分进行一个减法,当我们发现减完的结果是一个正数,也就是所谓的够减的时候,我们就在上面标一个1,然后把减完的差放在下面,再从被除数后面的位拿一个数下来,这时候我们用眼睛看一看就可以发现,现在这个数还不够去减这个除数。

所以我们在上面标一个0,然后再多拿一位,还不够减去除数。

那么我们在最上面再标一个0,然后再拿一位下来。现在我们发现,这时候已经够减这个除数了(1010 > 1000)。

%20

好,那我们在这上面标一个1,然后把除数写在这里,再执行一次减法,减完的结果已经比除数小了(10 < 1000),而且被除数那里也没有多余的位可以拿下来继续运算,这样我们这个除法就已经完成了。

先得到最上面的这个数,就是这个除法运算的商;而最下面的这个数,我们称为余数。如果用一个式子来表达这四个数的关系,那就是被除数等于商乘以除数再加上余数。当然我在描述这个除法运算的时候非常的口语化,而且也有人的智力因素参与其中。比如说用眼睛看一看够不够减之类的,这样的描述过程是很难用硬件去实现的。想要设计一个硬件的除法器,首先我们要从硬件实现的 角度出发,来考虑如何描述除法的运算过程。那我们用这样的方式再来看另一个例子。

这里就是两个二进制数的除法了。被除数是 00000111,这就是十进制的7;而除数是0010,这就是十进制的2。所以,这就是做7除以2。对于硬件实现,我们首先要考虑的是这个运算的操作数的宽度,这里我们可以看到,被除数是一个8位宽的数,而除数是一个4位宽的数。因此,在这样的情况下,即使高位是0,我们也不能将这个0省略,因为它们实实在在地在硬件中占据了位置。

很显然,我们可以把被除数放在一个8位宽的寄存器当中,同时我们还要注意,被除数是在不断的和除数进行减法的操作,在经过几轮之后,减法的运算结果最后就产生了余数。所以,如果我们将每次减法运算的结果都放回到被除数的寄存器当中,那么这个寄存器又可以被称为余数寄存器,现在我们就有了第一个部件,就是一个8位宽的余数寄存器;然后,我们还需要一个部件来保存除数;还需要一个部件来保存商。

那我们在纸上进行除法运算的时候。第1步,会把除数抄写到这里,并将被除数当中最高的4位和这个除数进行对比。经过比较,我们发现被除数的这一部分是比除数小的(0000 < 0010)。所以,不能执行这个减法。因此,我们在与当前除数最低位对齐的这个地方,标上我们得到的第一位的商,也就是0。目前执行的这个过程,我们就称为第一轮。然后我们会怎么做?

我们接下来要做的就是把除数往右挪一个位置,把除数再抄一遍。好,我们把除数抄在这里,如果我们忽略这些数字底下衬着的这些带颜色的框,那它实际上和在纸上进行除法运算我们所写的内容是一样的;如果我们带上了这个写了除数的长条形的方框,那我们又可以发现这个除数0010好像是在这个方框中右移了一位,这样我们就可以考虑在硬件上用一个带右移的寄存器来实现这个功能。那么这个时候又需要用被除数和除数进行一个减法运算了。

那现在够不够减呢?实际上还是不够的(0000 < 0010)。其实我们不用去找应该对齐哪几位进行减法的比较,如果我们直接把这个写着除数的长条方框看成一个8位的寄存器的话,那就可以把其中没有标明数字的地方都看做是0,每次都是把这个标着除数的8位的寄存器的内容和上面标着余数的8位寄存器的内容进行比较,那么现在这个除数还是更大一些(0001 0000 > 0000 0111)。所以,这一轮也不能执行减法。这样,我们在商这个位置再标一个0。我们要注意,在纸上运算时,我们直接就写上了第二个0,而现在我们在硬件上只给商预留了4个位置,也就是说是一个4位的寄存器。所以,这个操作就好比将商的这个寄存器往左进行了一个移位,并在最右端补入了一个0,那这就是第二轮。

然后我们继续,再将除数往右边挪一位和被除数进行比较,现在还是除数更大(0000 1000 > 0000 0111)。所以,这一次还是不能执行减法,而商再写上一个0,这就是第三轮。

我们再看下一轮。再向右移一位除数之后,我们发现,现在被除数更大了(0000 0111 > 0000 0100)。可以执行一次减法了,减完的结果就是0000 0011。因为执行了一次减法,所以我们在商对应的位置标上了1,也就相当于对这个商寄存器往左移动一位之后,在最右端补上了一个1。然后我们把这个减法的结果更新到余数寄存器当中去, 这就是第四轮。

但现在还没有结束,我们还需要把除数再往右移一位,并和当前的余数进行比较, 我们发现还可以进行一次减法运算(因为余数大于除数:0000 0011 > 0000 0010)。所以,在最上面,我们再把商从最右边移入一个1。然后,再回来看下边,我们再执行一次减法,得到了一个结果为0000 0001,并把这个结果再更新到余数寄存器当中去,这就是第五轮。现在我们就已经得到了最终的结果。最上面是商的最终结果:0011;最下面是余数的最终结果:0000 0001,也就是1。0011是十进制的3,所以7除以2,商为3,余数为1,这样的结果显然是正确的。

我们再来整理一下这个例子。

对于被除数,我们选择的是十进制的7;对于二进制,7可以用8个比特0000 0111来表示,而且被除数我们可以视为初始化时候的余数。

除数2,我们用4个比特的寄存器来保存,而且在运算的过程中,我们可以看作将除数不断地右移,并和被除数进行相减。

对于余数,虽然它最终的结果很小,但是因为它可以与被除数共享一个寄存器。所以,我们也用8个比特来表示。

对于商,在这个例子中是3。我们要注意到的是,在运算过程中,它的每一个比特是从高到低,也就是从左往右依次生成的,可以视为不断地左移而形成。在这里我们也用4个比特的寄存器来保存。

我们要注意,这个位宽和乘法运算正好是相反的。在乘法当中,我们一般会约定乘数和被乘数的宽度是一样的:如果两个都是4位宽的,则乘积最多为8位宽。所以,在除法当中我们也用了类似的约定:如果被除数是8位宽,则除数和商都约定为4位宽。

现在我们就有了一个适合硬件实现的除法运算过程了。

从这个事例我们就能够看出,除法运算确实是非常复杂。不过现在我们应该很有信心,只要我们能够用适合硬件的方式把这个运算过程描述出来,我们就应该能够把这个除法器设计出来。

转载于:https://www.cnblogs.com/houhaibushihai/p/9276017.html

5.5 除法的运算过程相关推荐

  1. 数值修约程序(包括运算过程有效数字保留,Python3实现)

    数值修约程序(包括运算过程有效数字保留,Python3实现) 2022.09更新:考虑到需要用到这个程序的朋友很可能没有计算机基础(这也是我只放在csdn而没有放github的原因),我稍微加了一点注 ...

  2. 讲解java里面关于除法的运算,商怎样得到小数,四舍五入

    这里讲解一下java里面除法的应用,除法的结果怎样才是小数,怎样自定义的精确到哪一位,怎样解方程 1.除数不能为0,我们都知道java里面的取整(/)和取余(%)符号,注意里面的小陷阱 2.除法的结果 ...

  3. 花书+吴恩达深度学习(十三)卷积神经网络 CNN 之运算过程(前向传播、反向传播)

    目录 0. 前言 1. 单层卷积网络 2. 各参数维度 3. CNN 前向传播反向传播 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔~我会非常开心的~ 花书+吴恩达深度学习(十)卷积神经网络 ...

  4. 详解图像形态学操作之图形的腐蚀和膨胀的概念和运算过程,并利用OpenCV的函数erode()和函数dilate()对图像进行腐蚀和膨胀操作

    图像形态学中两种最基本的操作就是对图形的腐蚀和膨胀,可以说,形态学中的中高级操作都是建立在这两种操作之上.通过这两种基本的运算可以去除图像中的噪声,分割出独立的区域或者将两个区域连接在一起. 关于图像 ...

  5. gma 气象气候函数包的简要介绍及运算过程主要问题说明(内存不足、出现 nan 等)及解决方法

    0 概述 0.1 明确气候与气象的概念    气候(Climate):是指一个地区大气物理特征的长期平均状态,具有一定的稳定性,且周期长.根据世界气象组织(WMO)的规定,一个标准气候计算时间为 30 ...

  6. 【面试】以面试者的角度回答Vue中的diff算法(附图示diff运算过程)

    文章目录 面试者角度回答 图示diff运算过程 掘金同人账号:

  7. 题目: 某学校需要一个能给学领前儿童自动出三个数加减法的算术题的程序,要求在运算过程中只能使用20以内的加减法且不能出现负数,并且未知数可以在等式的任何一位, 如 3 + 4 – 2 = ( ), 8

    题目: 某学校需要一个能给学领前儿童自动出三个数加减法的算术题的程序,要求在运算过程中只能使用20以内的加减法且不能出现负数,并且未知数可以在等式的任何一位, 如 3 + 4 – 2 = ( ), 8 ...

  8. 浮点数的加减法运算过程详解(面向小白的)

    浮点数的加减法运算过程详解(面向小白的) 一. 浮点数在计算机内的表示 二. 浮点数的加减运算步骤 第一次写博客,难免有疏漏之处,如果有错误请批评指正,感谢! 对于浮点数的加减运算,书上写的名词太多, ...

  9. 已知序列求蝶形运算_在N=32的基 2 时间抽取发 FFT 运算流图中,从 到 需______级蝶形运算过程。 (4.0分)_学小易找答案...

    [单选题]互相关函数性质正确的是: [计算题]两个有限长的复序列 x[n] 和 h[n] ,其长度分别为 N 和 M ,设两序列的线性卷积为 y[n]=x[n]*h[n] ,回答下列问题: (1) 序 ...

最新文章

  1. 职称计算机 菏泽,山东菏泽2016年职称计算机首批考试时间
  2. storm kafkaSpout 踩坑问题记录! offset问题!
  3. 谈Tensorflow的Batch Normalization
  4. supersu二进制更新安装失败_vcpkg更新及产品路线图
  5. 您是否尝试过MicroProfile Starter?
  6. 安卓rpg绅士游戏资源_海贼无双3(动作游戏)——电脑安卓单机游戏下载资源分享...
  7. 城市APP集成Firebase/Admob/增强现实带PHP管理后台
  8. c语言打开pdf失败,c语言错误种类总结.pdf
  9. webpack4.0学习笔记
  10. Thinkphp3.2+ 微信小程序图片上传
  11. rgba 透明度转换十六进制
  12. java gui界面设计,2022最新
  13. 虚拟机中无法使用鼠标滚轮(罗技鼠标)
  14. [PTA] 7-6 厘米换算英尺英寸
  15. 席卷全球的大数据发展趋势需要什么?
  16. 几款笔记软件的使用感受
  17. element el-table 在IE浏览器 表头失效问题
  18. Python 通过 Tushare Pro 获取财经数据接口
  19. [渝粤教育] 天水师范学院 人文地理学 参考 资料
  20. 【零基础深度学习教程第一课:深度学习基础】

热门文章

  1. 骑行318、 2016.7.19
  2. k8s中亲和性与反亲和性
  3. 使用MFC绘制一些简单图形
  4. 华为服务器cpu位置,服务器cpu参数详解
  5. 线性回归的scikit-learn实现
  6. c语言程序设计 第四章 总结
  7. hive 查询表中的数据来源hdfs 位置
  8. wps的ppt怎么存html,如何将网页快速转换为WPS与WORD文档 ppt怎么转换成word文档
  9. 中职计算机教师考核工作总结,中职计算机教师教学工作总结
  10. 【Java 入门】(六)表设计