0
我剛開始學習MASM,我寫了一個應該運行簡單循環的示例代碼。MASM無限循環
mov eax, 1
x: add eax,1
print str$(eax),13,10
cmp eax, 4
jne x
inkey
exit
所以,我預計這個小程序打印2,3,4。然而,我得到的是一個無限循環,並不斷地打印3.任何線索爲什麼它不像我想象的那樣工作?
我剛開始學習MASM,我寫了一個應該運行簡單循環的示例代碼。MASM無限循環
mov eax, 1
x: add eax,1
print str$(eax),13,10
cmp eax, 4
jne x
inkey
exit
所以,我預計這個小程序打印2,3,4。然而,我得到的是一個無限循環,並不斷地打印3.任何線索爲什麼它不像我想象的那樣工作?
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昂貴)? – mewa