首页 > 代码库 > 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 11011001即 dx: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子程序跟踪过程
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。