首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MASM无限回路

MASM无限回路
EN

Stack Overflow用户
提问于 2013-12-20 01:06:40
回答 1查看 682关注 0票数 0

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

代码语言:javascript
运行
复制
   mov eax, 1
x: add eax,1
   print str$(eax),13,10
   cmp eax, 4
   jne x
   inkey
   exit

所以,我期望这个小程序打印2, 3 ,4。然而,我得到的是一个无限循环,并不断打印3。有什么线索表明它不像我想的那样工作呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-20 03:10:37

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

代码语言:javascript
运行
复制
    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)。

代码语言:javascript
运行
复制
    mov     ebx, 1
x: 
    add     ebx,1   
    print str$(ebx),13,10
    cmp     ebx, 4
    jne     x

    inkey
    exit
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20694649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档