`
memorymyann
  • 浏览: 270827 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

CPU如何来计算除法 一

 
阅读更多

问题:计算机如何来计算除法的?

 

第一步:分析除法

 

现在做一个简单的除法 56/7,大部分人会很快一闪"七八五十六",很快能算出结果是8.这是九九乘法表作怪,如果我么没有背诵过乘法表,我们如何来计算这个简单的除法呢?其实大致过程如下:

 

我们首先会比较56中的十位数,既5和除数7来比较,从而来计算我们商的十位上是几?这其实是个选择题,我们备选的答案有0,1,2,3,4,5,6,7,8,9(因为这是十进制的世界)。我们选择了0,因为只有0乘上7以后才会是适合5的答案,因为我们保证了余数是个正数。如是我们就有了商的十分位上为0.接下来我们开始计算个位上的数,现在变成了余数5×10 + 6 来和7做比较,同样的选择题,我们循环开始选择起,从0一直到9,最终我们选择了8,因为它是使得余数大于等于0的最大一个数。从而个位我们得到值为7.由此得到答案是07,且余数为0.

 

接下来,来个难度大一点的除法-3456/11,这次我们还是从千位开始(符号问题最后处理),明显千位为0,因为3对11,我们只能选择0,接下来变成了余数3,3×10 + 4 和11比较,我们选择了3,现在我们的商变成了03,余数变成了1.进一步,1× 10 + 5 和11比较,我们选择了1,于是商变成了031,而余数为4.再接近一点4 × 10 + 6 比11,我们选择了4,商变成恶劣0314,而余数为2.于是我们的答案变成了0314,余数为2.至于符号,+和负我们很容易得到结果为-,于是结果为-0314, 2.

 

至此我们分析了除法大概过程是这样:

从被除数最高为开始,选择一个数,该数满足乘以除数后,他们的积被被除数减后要大于0,既余数必须大于0。且还要满足这个余数必须是大于0的最小数,这个数放到商上。接下来把余数乘以10,既小数点右移移位+上被除数剩下的位,我们要做的是把它做被除数,在继续上一部,的到的数填充到商上,把前面一个数向左移一次位。重复直到所有被除数的位都被处理既完成。

 

第二步,计算机中对第一步的模拟(真值)

 

OK,我们在我们思维逻辑中完成了一次除法运算,在计算机的世界里,某些地方会很简单,而某些地方会比我们的复杂。

计算机硬件只有2进制,从而计算机面临的选择不用太费周章,选1或者选0.选择题的答案少了,但做题目的智力变笨了,对于”它“来说这个选择题很难(因为计算机不会做选择,它只能做确定的关系)。计算机是通过编码来完成对正负数的标识,而这种编码则会给我们计算带来麻烦,但同时又给了我们一个方便了,计算机中出现的除法只会是 0.XXX....X(一共N个X) / 0.YYYYY...Y(一共N个Y),其中第一个字符0也可以为1. 确切的说0表示正号,它不表示数字0。而1则表示正号,其中的点表示小数点。至于为什么2者等长,因为处理双方的寄存器一般是等长的。不够就补0,超过就不能标识,也就是处理不了。至于为什么只会出现绝对值小于1的数,我们知道10000 = 0.1 × 10^6,而计算机是采用后者来表示10000的,当然它用的是2进制。所以你只会看到绝对值小于1的数做除法,至于后面10的6次方,在除法中,它会变成减法,这就很容易处理了。

 

下面我们通过一个具体的例子来看看计算机是如何来模拟上面我们对除法处理的思维过程。比如0.1001/0.1101(注这里是2进制,这个例子也很特殊,首先他们都是正数,所以补码问题不复存在,因为正数补码,原码和反码都是一样的,先从简单的下手),我们用3个寄存器分别存被除数,除数和商(余数怎么办,不用着急),我们还给出0.1101的补码留着备用,它的补码是1.0011.

被除数寄存器             除数寄存器            商            说明

0.1001                    0.1101                               初始化,商寄存器初始化,至于值不用特别指定,但也可以置0,后

                                                                         面会看到,这是没有必要的,选择题来了,我们该选0还是1呢,这

                                                                         其实也简单了,明显只要被除数大于除数(这种情况是100%的,

                                                                         为什么,后面说明)我们就选1,小于我们就选0。自己稍微思考下

                                                                         就明白了。计算机不能直接判断2个数大小,但我们通过减的方式来

                                                                         判断,如果差大于0我们就知道大了上1,如果小于0,我们就知道

                                                                         小了,上0,好先减一次,把结果放到被存数寄存器中(计算机中就

+1.0011                                                            是加补码,这就是我们上面为什么给出除数补码备用)

=======================================================================

1.1100                    0.1101                0              明显符号位是1,是负数小于0,我们商就上1.但我们看到被除数丢

                                                                          了,其实仔细分析,我们除法分析步骤的过程,我们并不是拿被除

                                                                          数去除除数,我们是拿余数去除除数的,所以丢了就丢了,这并不

                                                                          影响。但我们上的商是0,意思就是我们目前的余数并不对。而且

                                                                          他是负的,明显的不对,那我们要做的是把它变回来,加上我们减

+0.1101                                                             掉的东西就可以了,既除数0.1101

=======================================================================

0.1001                   0.1101                 0              再回忆下,我们要怎样处理0.1001这个余数。小数点右移移位继

                                                                          续做被除数处理。小数点右移对于计算机来说是不可能的,或者说

                                                                          是不容易办到的,其实想当与数值的左移,我们左移一次,同时我

                                                                          们把商也左移,因为接下来的数会填在它后面。左移

1.0010                   0.1101               0                最低位补0很容易理解,最高位的0丢了,怎么办。其实我们就是为

                                                                          了丢弃它才左移的。从另一个角度看我们已经处理过最高位了,丢

                                                                          了就丢了,因为我们不会再处理他。继续重复上面步骤

+1.0011

=======================================================================

0.0101                  0.1101                01               这里余数大于0,所以我们上商1.左移,下面就是重复工作了

0.1010                  0.1101              01

+1.0011

=======================================================================

1.1101                  0.1101              010               小于0,上0,同时我们要加上除数

+0.1101

0.1010                  0.1101              010               左移

1.0100                  0.1101             010                减除数

+1.0011

=======================================================================

0.0111                  0.1101             0101             大于0,上1,左移

0.1110                  0.1101           0101               减除数

+1.0011

=======================================================================

0.0001                  0.1101           01011              大于0,上1,结束

 

结果为0.1011,余数为0.0000 0001(因为你左移了4位,你得移回还原)

结果,大家自行验证一下。

 

 

分享到:
评论

相关推荐

    高性能CPU中除法器的设计.pdf

    总的来说,高性能CPU中除法器的设计是一个涉及算法优化、硬件实现、错误处理和系统集成等多个领域的复杂工程问题。刘冀的硕士论文可能详细探讨了这些方面,并提供了创新的设计方案,为提升CPU的除法性能做出了贡献。...

    《自己动手写CPU》除法指令实现

    3. **流水线**:如果OpenMIPS是一个多级流水线CPU,那么除法指令的实现必须考虑到流水线的各个阶段,比如取指、译码、执行和结果写回。除法可能需要多个时钟周期才能完成,所以需要防止数据 hazards(比如转发和分支...

    CPU 设计 (加法器、乘法器、除法器等,ppt文件)

    除法器在CPU中主要用于执行除法和取模操作,对于浮点运算和数学函数的计算尤为重要。 FPGA设计是电子工程和计算机科学的一个分支,允许开发者根据需求定制硬件。与ASIC(应用特定集成电路)相比,FPGA具有更高的...

    精品专题(2021-2022年收藏)cpu计算除法.doc

    【CPU计算除法】 CPU(中央处理器)是计算机的核心组件,负责执行各种计算任务,包括进行除法运算。计算机中的除法操作并不像人类那样直接使用乘法表或直观的算法,而是通过复杂的数字逻辑和硬件电路来实现的。下面...

    开放式CPU设计 实验程序 运算器部件实验:除法器

    总结来说,这个“开放式CPU设计 实验程序 运算器部件实验:除法器”提供了一个宝贵的学习机会,让学习者能够亲手构建一个除法器模块,从而深化对计算机硬件设计的理解。通过这个过程,不仅可以掌握除法器的设计,还...

    CPU_设计_(加法器、乘法器、除法器等,ppt文件).rar

    本资源包"CPU_设计_(加法器、乘法器、除法器等,ppt文件).rar"包含了关于CPU内部关键计算部件的详细讲解,以PPT形式呈现,便于学习者理解和掌握。以下是对这些组件的详细介绍: 1. **加法器**:加法器是CPU中实现...

    测试计算机的CPU逻辑计算能力

    测试是为了度量和比较,CPU是指我们要关注的硬件部分,而“运算”涵盖了加法、减法、乘法、除法等基本数学操作,以及逻辑运算如与、或、非、异或等。这样的测试能够帮助用户了解他们的CPU在处理不同类型计算任务时的...

    comp_arith.rar_comp_arith_cpu设计_enemyjmc_除法器

    本资源“comp_arith.rar_comp_arith_cpu设计_enemyjmc_除法器”包含了一个关于CPU设计中加法器、乘法器以及除法器设计的PPT,这些是CPU内部执行算术运算的关键组件。下面将详细阐述这三个核心部分。 1. **加法器**...

    COP2000实现乘法器和除法器

    "COP2000实现乘法器和除法器" 本课程设计报告的主要目的是在COP2000实验仪上设计实现乘法器和除法器,通过控制器的微程序设计,综合理解计算机组成原理课程的核心知识并进一步建立整机系统的概念。 一、COP2000...

    fpga的verilog实现的硬件除法器

    在传统的CPU中,除法操作通常由软件模拟,这在处理大量除法运算时效率低下。而通过硬件实现除法器,可以显著提高计算速度,尤其适用于实时计算和高性能计算应用。 首先,我们需要理解Verilog的基本语法。Verilog是...

    定点除法的ASIC实现

    其中,定点运算部件的设计,尤其是定点除法器的实现,是ASIC设计中的一个关键挑战。 #### 二、32位定点运算部件的设计概述 葛亮在其硕士学位论文《一种定点运算部件的设计与实现》中,深入探讨了32位定点运算部件...

    实现2个浮点数做除法的ip

    在数字电路设计中,IP( Intellectual Property)是指可重用的、预设计好的硬件模块,它们可以被集成到更复杂的系统级...同时,由于它是预先设计并经过优化的,其功耗和面积效率也会优于直接在CPU上执行浮点除法指令。

    将双比特算法应用到有符号除法器中

    针对有符号整数除法这一核心问题,本文提出了将无符号除法中已被广泛研究的双比特算法引入到有符号除法中来提升性能的方法。该方法不仅能够提高计算效率,而且在设计高性能CPU时具有重要价值。 在介绍双比特算法...

    计算机组成原理 CPU

    2. **算术逻辑单元(Arithmetic Logic Unit, ALU)**:ALU是执行算术和逻辑运算的地方,如加法、减法、乘法、除法、比较、位操作等。 3. **寄存器组(Registers)**:CPU内部的高速存储器,用于临时存储数据和指令...

    pic18 双字节除法 C语言汇编混合编程

    "pic18 双字节除法 C语言汇编混合编程"这个主题涉及了如何在PIC18系列单片机上,使用C语言调用汇编函数来实现一个高效的16/16位定点除法操作。以下是对这个主题的详细解释: 1. **PIC18单片机**:PIC18是Microchip ...

    masm.rar_assembly_masm_汇编实现除法_汇编语言_除法

    2. **寄存器使用**:在x86架构中,CPU有一组通用寄存器,如AX, BX, CX, DX等,它们在除法运算中扮演着关键角色。例如,AL或AX通常用于存放被除数,BL或BX用于存放除数。 3. **除法指令**:x86汇编提供了一些专门的...

    快速立即除法的乘法实现(通用算法).txt

    该方法适用于特定类型的处理器(如Intel 32位 x86 CPU),并提供了一种高效执行除法运算的方式。这种方法在某些情况下可以替代传统的除法指令,从而提高程序运行效率。 #### 关键知识点详解 ### 1. 原理简介 在...

    计算机组成原理课程设计乘除法运算.docx

    本设计主要围绕在COP2000实验仪上实现乘法和除法运算,通过设计新的指令系统和编写相应的微程序来达成这一目标。 COP2000实验仪是一个模拟计算机硬件的平台,包含标准CPU的所有组件,如运算器、累加器、寄存器、...

    SAP-1CPU及计算机的组成架构介绍.pptx

    它是一个8-bit的寄存器,用于存储加法、减法、乘法、除法等运算的结果。 Adder/Subtractor是SAP-1 CPU中的一个算术逻辑单元,用于执行加法、减法等运算。它可以将两个8-bit的数相加或相减,并将结果存储在...

Global site tag (gtag.js) - Google Analytics