汇编程序:无符号64位除32位的除法子程序(

 时间:2024-10-09 07:21:01

我们来了解一下这个程序的基本原理,内容比较多。我们分成两篇来讲,下面是第二篇

方法/步骤

1、程序如下(R4R5R6R7/R2R3=R6R7):;Thisprogramfor:R槐划儋昴4R5R6R7/R婷钠痢灵2R3=R6R7;Remainder=(R4R5);----------------------------------------------------------------;definestacksegmentSTACKSEGMENTSTACK'STACK'DB1024DUP(0)STACKENDS;definedatasegmentDATASEGMENTBWORDEQUTHISBYTER0DW(?)R1DW(?)R2DW(?)R3DW(?)R4DW(?)R5DW(?)R6DW(?)R7DW(?)DATAENDS;definecodesegmentNBDIVSEGMENT;MAINPROCFARASSUMECS:NBDIV,DS:DATA,SS:STACK;START:PUSHDS;returnDOSstandardprogramMOVAX,0PUSHAXMOVAX,DATA;setDSMOVDS,AXMOVAX,R5SUBAX,R3MOVAX,R4SBBAX,R2JNCDIV4;OverprocessMOVCX,32DIV1:CLCRCLR7,1RCLR6,1RCLR5,1RCLR4,1PUSHFPOPR0;StoreRFtoR0MOVAX,R5SUBAX,R3MOVR1,AXMOVAX,R4SBBAX,R2PUSHFTESTBYTEPTRR0,01HJNZDIV21POPFJNCDIV2JMPDIV3DIV21:POPFDIV2:MOVR4,AXMOVAX,R1MOVR5,AXINCR7DIV3:LOOPDIV1STCDIV4:RETMAINENDPNBDIVENDSENDSTART

2、要理解这个程序,我们首先要理解什么是移位相减的除法,不懂的可以百度一下,也可以看下面首先我们假设一个方程A/B=Q,余数是R其中(二进制)A=10000001B=1010那么R和Q等于多少?

3、我们运用移位相减来解决上面的问题A=10000001,向左移四位,把低位补零,结果为:A=00010000把A的原本的高4位左移进R,即R原来是都等于0的,现在R=1000而B=1010若R-B,结果为负数则Q=0这里解释一下,为什么是左移四位,因为我们看到B的有效数字是四位的,所以我们就直接左移四位,但为什么要这么做,别急,请看下面

4、A=00010000,向左移一位,把低位补零,结果为:A=00100000把A的原本的高1位左移进RR=10000而B=1010若R-B,结果为正数110这里就发生了变化,我们应该把1左移进商Q,把结果存进R所以结果就变为Q=1,R=110。这里解释一下,为什么这次是左移一位,因为我们看到B的有效数字是四位的,所以我们就直接左移四位,移了四位仍不够减,所以继续移一位就够减了,接下也是一位一位的移,但为什么要这么做,别急,还是请看下面

5、A=00100000,向左移一位,把低位补零,结果为:A=01000000把A的原本的高1位左移进RR=1100而B=1010若R-B,结果为正数10把1左移进商Q,把结果存进R所以结果就变为Q=11,R=10看到这里可能你已经有些理解了,其实这和我们在草稿纸上计算除法是差不多的

汇编程序:无符号64位除32位的除法子程序(

6、A=01000000,向左移一位,把邋冠判厩低位补零,结果为:A=10000000把A的原本的高1位左移进RR=100而B=1010若R-B,结果为负数把0左移进商Q,把100存进R所以结果就变为求溻皑恰Q=110,R=100。看到这里你可能会问为什么,这里结果是负数就左移一个零,上面就没有左移一个零进商,这是因为前面如果结果是负数,其实也是要左移一个零进商的,当前面的时候,Q还只是等于0而已,所以左移一个零也不会有任何变化,所以没有提到,这也是为什么我们一开始就左移四位,而不是一位一位来,这也是为了减少运算次数,在程序里也体现这个做法。

汇编程序:无符号64位除32位的除法子程序(

7、按照上述步骤再继续一步,就可以得到,商为1100,余数为1001的答案。正如上面的说法一样其实这和我们在草稿纸上计算除法是差不多的,当时由于这是在计算机上运算的,所以还是要按照计算机的语言来理解,以便写程序。

8、接下来我们来看一下程序,可以说程序的原理是基于移位相减的,但考虑到实用性,增加了一些内容,让程序变得复杂了一些程序主要是考虑以下的问题判断够减或不够减的方法够减时的处理方法不够减时的处理方法商上1的位置和方法商上零的方法明白这个后,接下我们来看看程序,请看第二篇

Qml之ListView控件位置定位的几个方法 如何使用JavaScript中的function 【最强蜗牛】怎样补充探索口粮 win10荒野大镖客2闪退怎么解决 空之轨迹怎么设置画质
热门搜索
幼儿园墙面装饰图片 潮汕小吃图片 网球图片大全 美女图片全身一件不留 邵氏武侠电影