2013-12-20 66 views
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.任何線索爲什麼它不像我想象的那樣工作?

回答

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 
被保存在非易失性寄存器
+0

謝謝你清理它。關於這兩個解決方案還有一個問題。根據我讀的內容,第一個使用'push eax'的人會比不使用堆棧的第二個(並且因此訪問RAM昂貴)? – mewa