2012-05-03 18 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,、edi。あなたは、スタック上に選択肢の登録を行い、それを後で復元することによってもそれらを保存する必要があります。

関連する問題