MASM无限循环

时间:2013-12-20 01:06:40

标签: assembly x86 masm masm32

我刚开始学习MASM,我写了一个示例代码,应该运行一个简单的循环。

   mov eax, 1
x: add eax,1
   print str$(eax),13,10
   cmp eax, 4
   jne x
   inkey
   exit

所以,我预计这个小程序会打印2,3,4。然而,我得到的是一个无限循环,并保持打印3.任何线索为什么它不像我想的那样工作?

1 个答案:

答案 0 :(得分:1)

eax是一个易失性寄存器,意味着它的值不需要跨函数/宏调用保存。您需要在eax宏之前保存print,然后将其恢复:

    mov     eax, 0
x: 
    add     eax,1   
    push    eax
    print str$(eax),13,10
    pop     eax
    cmp     eax, 4
    jne     x

    inkey
    exit

或者只使用一个非易失性寄存器,该值必须由被调用者保存(esi,edi,ebx)

    mov     ebx, 1
x: 
    add     ebx,1   
    print str$(ebx),13,10
    cmp     ebx, 4
    jne     x

    inkey
    exit