2012-02-26 60 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