`
memorymyann
  • 浏览: 266209 次
  • 性别: 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位,你得移回还原)

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

 

 

分享到:
评论

相关推荐

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

    精品专题课件(2021-2022年收藏)

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

    文提出了一种方法,将无符号除法中的双比特算法应用到有符号除法中。与传统的有符号算法相比,此法可以大大 提高计算效率,使我们可以进行高性能 CPU 设计。此设计已经通过了软件仿真。

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

    详细了解并掌握COP 2000模型机的微程序控制器原理,通过综合实验来实现 该模型机指令系统的特点: 总体概述 COP2000模型机包括了一个标准CPU所具备所有部件,这些部件包括:运算器ALU、累加器A、工作寄存器W、左移门...

    ARM的除法运算优化策略

    在嵌入式软件编程中,为了节省CPU运行时间,应尽可能避免使用除法。...预先计算好s=(2k一1)/d,用乘以s的2k位乘法来代替除以d的k位无符号整数除法,可大大减少由于直接使用除法操作引入的指令周期数。

    计算机组成原理课后解答(唐朔飞)

    MQ——Multiplier-Quotient Register,乘商寄存器,乘法运算时存放乘数、除法时存放商的寄存器。 X——此字母没有专指的缩写含义,可以用作任一部件名,在此表示操作数寄存器,即运算器中工作寄存器之一,用来存放...

    计算机体系结构指令调度实验报告

     (1) 通过Configuration菜单中的“Floating point stages”选项,把除法单 元数设置为3,把加法﹑乘法﹑除法的延迟设置为3个时钟周期。  (2) 用WinDLX模拟器运行调度前的程序sch-before.s 。记录程序执行过程...

    int_fastdiv:在编译时未知使用除数的快速整数除法。 主要用于CUDA内核

    快速整数除法众所周知,在现代CPU和GPU上,整数除法相对较慢。 编译器为单个整数除法运算生成约30条指令: int q = n / d; 但是,如果除数在编译时是已知的,则编译器将计算一对幻数M和s ,这样q = hi32bits(n * M) ...

    计算机组成原理基础知识点介绍.zip

    算术逻辑单元则负责进行算术和逻辑运算,如加法、减法、乘法、除法等。 存储器:存储器用于存储数据和指令,它分为主存储器和辅助存储器两种形式。主存储器(如RAM)直接与CPU相连,存取速度快,但容量相对较小;...

    唐朔飞计算机组成原理答案完整版

    MQ:Multiplier-Quotient Register,乘商寄存器,乘法运算时存放乘数、除法时存放商的寄存器。 X:此字母没有专指的缩写含义,可以用作任一部件名,在此表示操作数寄存器,即运算器中工作寄存器之一,用来存放操作...

    计算机组成原理试题及答案

    D 4位乘法运算和除法运算功能 4. 存储单元是指______。 A 存放一个二进制信息位的存贮元 B 存放一个机器字的所有存贮元集合 C 存放一个字节的所有存贮元集合 D 存放两个字节的所有存贮元集合; 5. 相联存贮器是按_...

    计算机组成原理(唐朔飞版)

    附录6B 阵列乘法器和阵列除法器 附录6C 74181逻辑电路 第7章 指令系统 7.1 机器指令 7.2 操作数类型和操作类型 7.3 寻址方式 7.4 指令格式举例 7.5 RISC技术 思考题与习题 第8章 CPU的结构和功能 8.1 CPU...

    计算机组成原理练习题及答案

    D 4位乘法运算和除法运算功能 4. 存储单元是指______。 A 存放一个二进制信息位的存贮元 B 存放一个机器字的所有存贮元集合 C 存放一个字节的所有存贮元集合 D 存放两个字节的所有存贮元集合; 5. 相联存贮器是按_...

    计算机组成原理试卷及答案

    D: 尾数部件只进行乘法和除法运算 4、 输入输出指令的功能是 ________ 。 A: 进行算术运算和逻辑运算 B: 进行主存与CPU之间的数据传送 C: 进行CPU和I/O设备之间的数据传送 D: 改变程序执行的顺序 5、 根据CPU在...

    计算机组成原理模拟试题

    A 16种算术运算功能B 16种逻辑运算功能C 16种算术运算功能和16种逻辑运算功能D 4位乘法运算和除法运算功能4.存储单元是指______。A 存放一个二进制信息位的存贮元B 存放一个机器字的所有存贮元集合C 存放一个字节的...

    HugeCalc 超大整数完全精度快速计算器/算法库 V7.0.0.0

    <br> 现已提供了如下功能: <br> ⊙ 高精度快速加法 ⊙ 高精度快速减法 ⊙ 高精度快速乘法 ⊙ 高精度快速除法 ⊙ 高精度快速同余 ⊙ 高精度快速位运算 ⊙ 高精度快速乘方 ⊙ 高...

    白中英—计算机组成原理题库 试题+答案很全20套

    D 4位乘法运算和除法运算功能 4. 存储单元是指______。c A 存放一个二进制信息位的存贮元 B 存放一个机器字的所有存贮元集合 C 存放一个字节的所有存贮元集合 D 存放两个字节的所有存贮元集合; 5. 相联存贮器是按...

    计算机组成原理期末卷20套含答案(本科用)

    D 4位乘法运算和除法运算功能 4. 存储单元是指______。 A 存放一个二进制信息位的存贮元 B 存放一个机器字的所有存贮元集合 C 存放一个字节的所有存贮元集合 D 存放两个字节的所有存贮元集合; 5. 相联存贮器是按_...

    C#,最大公约数(GCD)斯坦因(Stein)算法的源代码

    但是对于更大的素数,这样的计算过程就不得不由用户来设计,为了计算两个超过64位的整数的模,用户也许不得不采用类似于多位数除法手算过程中的试商法,这个过程不但复杂,而且消耗了很多CPU时间。对于现代密码算法...

    -----计算机组成原理讲义

    计算机组成原理讲义 包括试题与PPT 指令系统 运算器 储存系统 CPU与微程序系统 I-O接口 并附有补码除法规则-------------------------------------------------------------------------------------------

Global site tag (gtag.js) - Google Analytics