手抄报 安全手抄报 手抄报内容 手抄报图片 英语手抄报 清明节手抄报 节约用水手抄报

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

时间:2024-10-11 18:42:54

1、程序如下(R4R5R6R7/R2R3=R6R7):;This program for:R4R5R6R7/R2R3=R6R7 ;Remainder=(R4R5);----------------------------------------------------------------;define stack segmentSTACK SEGMENT STACK 'STACK' DB 1024 DUP (0)STACK ENDS;define data segmentDATA SEGMENTBWORD EQU THIS BYTE R0 DW (?) R1 DW (?) R2 DW (?) R3 DW (?) R4 DW (?) R5 DW (?) R6 DW (?) R7 DW (?)DATA ENDS;define code segmentNBDIV SEGMENT;MAIN PROC FAR ASSUME CS:NBDIV,DS:DATA,SS:STACK;START: PUSH DS ;return DOS standard program MOV AX,0 PUSH AX MOV AX,DATA ;set DS MOV DS,AX MOV AX,R5 SUB AX,R3 MOV AX,R4 SBB AX,R2 JNC DIV4 ;Over process MOV CX,32 DIV1: CLC RCL R7,1 RCL R6,1 RCL R5,1 RCL R4,1 PUSHF POP R0 ;Store RF to R0 MOV AX,R5 SUB AX,R3 MOV R1,AX MOV AX,R4 SBB AX,R2 PUSHF TEST BYTE PTR R0,01H JNZ DIV21 POPF JNC DIV2 JMP DIV3DIV21: POPFDIV2: MOV R4,AX MOV AX,R1 MOV R5,AX INC R7DIV3: LOOP DIV1 STCDIV4: RETMAIN ENDPNBDIV ENDS END START

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、判断够减或不够减的方法2、够减时的处理方法3、不够减时的处理方法4、商上1的位置和方法5、商上零的方法明白这个后,接下我们来看看程序,请看第二篇

© 手抄报圈