我有以下代码:
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 :(得分:3)
printf遵循cdecl调用约定,其满足以下条件:
“寄存器EAX,ECX和EDX中的值不需要保留,而其他值则保留。”
因此,尝试推送cx,这是ecx的下半部分