2012-05-03 72 views
0

我需要增加一個數字,以便代碼永遠增加,但它保持爲零。在彙編語言中增加ecx

這裏是我的代碼:

section .data 
FORMAT: db '%c', 0 
FORMATDBG: db '%d', 10, 0 
EQUAL: db "is equal", 10, 0 
repeat: 
    push ecx ; just to print 
    push FORMATDBG ; just to print 
    call printf ; just to print 
    add esp, 8 ; add the spaces 
    inc ecx ; increment ecx 
    cmp ecx, 0 ; compare ecx to zero 
    ja repeat ; if not equal to zero loop again 
+0

恩,你在每次迭代調零'ecx'。所以它永遠不會改變... – Mysticial

+0

我刪除了異或,現在它返回一些負值 – Lefsler

回答

4
repeat: 
    xor ecx, ecx 
    push ecx ; just to print 
    push FORMATDBG ; just to print 
    call printf ; just to print 
    add esp, 8 ; add the spaces 
    inc ecx ; increment ecx 
    cmp ecx, 0 ; compare ecx to zero 
    ja repeat ; if not equal to zero loop again 

xor ecx, ecxecx爲零。我不確定你是否知道這一點。你可能不希望它在每次迭代時發生。此外,你的循環條件ja repeat目前只會在ecx > 0這個循環中產生,這可能不是你想要的(或者是?)。

最後一件事,printf可能是ecx(我假設是cdeclstdcall)。閱讀有關調用約定(不知道您在使用哪種編譯器/操作系統)並查看哪些寄存器保證在函數調用中保留。

在代碼方面,你可能想要的東西接近這個:

xor ebx, ebx 

repeat: 
    push ebx ; just to print 
    push FORMATDBG ; just to print 
    call printf ; just to print 
    add esp, 8 ; add the spaces 
    inc ebx ; increment ecx 
    cmp ebx, 0 ; compare ecx to zero 
    ja repeat ; if not equal to zero loop again 

這不會導致無限循環,但。當ebx達到其最大值時,它的值將回到0,這將導致環路條件(ebx>0)評估爲false,並退出您的環路。

+0

對不起,我喜歡XOR,現在我得到-1074208095值 – Lefsler

+0

@demonofnight:你是否嘗試將'ecx'改爲'ebx '? –

+0

我使用ebx來存儲一些數據。 – Lefsler