2012-05-03 21 views
1

我嘗試在asm中創建循環時出現了一些問題。 所以我用循環創建了另一個代碼。 問題是,當我遞減或遞增ecx時,變量會變得混亂。 如果我使用沒有dec的循環指令,它也不起作用。 如何使用ecx進行循環?循環裝配不起作用

代碼

section .text 
    global main 

    extern printf 
section .data 
FORMAT: db "L", 10, 0 ; just to print the L 10 times 
main: 

    mov ecx, 10 ; start the counter in 10 
    jmp runloop ; i imagine i dont need it 
runloop: 
    push FORMAT 
    call printf 
    add esp, 4 
    dec ecx 
    cmp ecx, 0 
    jne runloop 
+1

你說得對,'jmp runloop'在這裏沒有用處。 – sharptooth

回答

3

ecx值不保證整個printf呼叫被保留。改爲使用以下寄存器之一:ebx,ebp,esi, edi。您也應該將選擇器的寄存器保存到堆棧中,然後再恢復。