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, ecx
ゼロに設定ecx
します。あなたがこれを知っているかどうかはわかりません。おそらく、各反復でそれが発生することを望まないでしょう。さらに、ループ条件は現在、おそらくあなたが望んでいたものではja repeat
ない場合にのみループを引き起こします(またはそれですか?)。ecx > 0
最後にもう1つ、printf
おそらくゴミ箱ですecx
(私はcdecl
またはを想定していますstdcall
)。呼び出し規約(使用しているコンパイラ/ OSがわからない)を読み、関数呼び出しで保持されることが保証されているレジスタを確認します。
コードに関しては、おそらくこれに近いものが必要でした。
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と評価され、ループが終了します。