2012-02-26 23 views
0

は、私は次のコードを持っている:C++のインラインASMループ

 mov cx,10 
    l1: 
    mov eax,1 
    push eax 
    mov eax, offset format 
    push eax 
    call DWORD ptr [printf] 
    pop ebx 
    pop ebx 
    dec cx 
    jnz l1 

問題は、それがループを抜けることがないということです! printfがcxレジスタで混乱しているのですか?

+0

の下半分デバッガでこれを実行したときに何を観察したのである

したがって、CXをプッシュしようと、? –

+0

ええ..デバッガ出力はこの場合に役立ちます。また、レジスタセット全体をスタックprintfにプッシュしてから再びポップすることもできます。 – darnir

答えて

3

printf関数は次が真であるcdecl呼び出し規約に従います。

「他の人が行うのに対し、レジスタEAX、ECX、およびEDXの値は、保存する必要はありません。」 ECX

+0

cxを押してポップしました!どうもありがとうございます! – user1233963