1

asm でループを作成しようとすると、いくつかの問題が発生しました。そこで、ループだけで別のコードを作成しました。問題は、 をデクリメントまたはインクリメントするecxと、変数がめちゃくちゃになることです。decなしでループ命令を使用しても機能しません。ecxto ループを使用するにはどうすればよいですか?

コード

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
4

1 に答える 1

3

ecxprintf値は、呼び出し全体で保持されるとは限りません。代わりに次のいずれかのレジスタを使用してください: ebxebpesiedipushchoise のレジスタをスタックに入れ、後で復元することで、それらも保存する必要があります。

于 2012-05-03T10:53:07.693 に答える