【问题标题】:MASM infinite loopMASM 无限循环
【发布时间】:2013-12-20 01:06:40
【问题描述】:

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

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

所以,我希望这个小程序能够打印 2、3、4。然而,我得到的是一个无限循环并不断打印 3。任何线索为什么它没有像我想象的那样工作?

【问题讨论】:

    标签: assembly x86 masm masm32


    【解决方案1】:

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

        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
    

    【讨论】:

    • 感谢您清理它。关于这两个解决方案的另一个问题。使用push eax 的第一个会(相当)比不使用堆栈的第二个慢(因此根据我所读到的RAM,访问是昂贵的)?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-25
    • 1970-01-01
    • 2015-02-01
    • 1970-01-01
    • 2013-09-05
    相关资源
    最近更新 更多