C ++内联ASM循环

时间:2012-02-26 15:17:38

标签: assembly x86 inline-assembly

我有以下代码:

        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寄存器混淆了什么?

1 个答案:

答案 0 :(得分:3)

printf遵循cdecl调用约定,其满足以下条件:

“寄存器EAX,ECX和EDX中的值不需要保留,而其他值则保留。”

因此,尝试推送cx,这是ecx的下半部分