我刚开始学习MASM,我写了一个示例代码,应该运行一个简单的循环。
mov eax, 1
x: add eax,1
print str$(eax),13,10
cmp eax, 4
jne x
inkey
exit
所以,我预计这个小程序会打印2,3,4。然而,我得到的是一个无限循环,并保持打印3.任何线索为什么它不像我想的那样工作?
答案 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