我刚刚开始学习MASM,我编写了一个应该运行一个简单循环的示例代码。
mov eax, 1
x: add eax,1
print str$(eax),13,10
cmp eax, 4
jne x
inkey
exit所以,我期望这个小程序打印2, 3 ,4。然而,我得到的是一个无限循环,并不断打印3。有什么线索表明它不像我想的那样工作呢?
发布于 2013-12-20 03:10:37
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
exithttps://stackoverflow.com/questions/20694649
复制相似问题