2012-02-26 58 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亂七八糟的註冊或什麼?

+0

當您在調試器中運行時,您觀察到了什麼? – 2012-02-26 15:19:32

+0

是的..在這種情況下,調試器輸出會有所幫助。另外,你可以將整個寄存器組推入堆棧,printf,然後再彈出它。 – darnir 2012-02-26 15:23:04

回答

3

的printf如下cdecl調用約定下列哪項是正確的:

「在寄存器EAX,ECX和EDX不需要保存的值,而其他人做的。」

因此,嘗試推動cx,這是ecx的下半部分

+0

推動和彈出cx工作!非常感謝! – user1233963 2012-02-26 15:27:24