首页 > 代码库 > 80x86 DIVX子程序跟踪过程

80x86 DIVX子程序跟踪过程

杨季文 80X86汇编语言程序 P352,子程序 DIVX ,使用移位和减法进行除法运算,尝试举例验证之。程序如下:;子程序名:DIVX;功      能:64 位数除以32 位数,商用64 位表示;入口参数:EDX:EAX=被除数;               EBX=除数;出口参数:EDX:EAX=商;               EBX=余数DIVX    PROC    NEAR             PUSH    ECX             PUSH    ESI             MOV      CX, 54             XOR    ESI, ESI DIV1:    SHL    EAX, 1                ;这3 句代码相当于把ESI,EDX,EAX             RCL    EDX, 1               ;作为1 个整体向左移位             RCL    ESI, 1                          JC    SHORT DIVX2             CMP    ESI, EBX             JB    SHORT DIVX3DIVX2:  SUB    ESI, EBX             BTS    AX, 0DIVX3:  LOOP    DIVX1             MOV    EBX, ESI             POP     ESI             POP     ECX             RETDIVX     ENDP  下面以实例跟踪验证之。为简单,假设有寄存器,AX、BX、CX、DX、SI 都是8 bit 寄存器CF            SI                DX                AX          CX0       00000000    10100111    01011110     16(LOOP前)                                                       BX                                                 11011001dx:ax=A75E,被除数 bx=D9,以计算器算之,商=C5,余数=61 根据算法,循环8 次后,CF            SI                DX                AX          CX0       10100111    01011110    00000000     08(LOOP前)                                                       BX                                                 11011001再左移 1 bitCF            SI                DX                AX          CX1       01001110    10111100    00000000     08(LOOP前)                                                       BX                                                 11011001 执行 SUB SI, BX, BTS AX, 0CF            SI                DX                AX          CX0       01110101    10111100    00000001     08(LOOP前)                                                       BX                                                 11011001再左移1 bitCF            SI                DX                AX          CX0       11101011    01111000    00000010     07(LOOP前)                                                       BX                                                 11011001执行 SUB SI, BX,    BTS  AX, 0CF            SI                DX                AX          CX0       00010010    01111000    00000011     07(LOOP前)                                                       BX                                                 11011001再左移4 bitCF            SI                DX                AX          CX1       00100111    10000000    00110000     03(LOOP前)                                                       BX                                                 11011001执行 SUB SI, BX,    BTS  AX, 0CF            SI                DX                AX          CX0       01001110    10000000    00110001     03(LOOP前)                                                       BX                                                 11011001再左移1 bitCF            SI                DX                AX          CX0       10011101    00000000    01100010     02(LOOP前)                                                       BX                                                 11011001再左移1 bitCF            SI                DX                AX          CX1       00111010    00000000    11000100     01(LOOP前)                                                       BX                                                 11011001执行 SUB  SI, BX,   BTS   AX, 0CF            SI                DX                AX          CX1       01100001    00000000    11000101     01(LOOP前)                                                       BX                                                 11011001到此结束,可以看出,SI 中余数是 61H,DX:AX=0C5H,与计算器结果一致。

 

80x86 DIVX子程序跟踪过程