当我使用扩展内联汇编时
int main(void)
{
int result = 2;
int input = 1;
__asm__ __volatile__ ("addl %2,%0":"=r"(result):"r"(result),"m"(input));
printf("%d\n", result);
return 0;
}
如预期的那样,输出“3”。但结果是不确定的数字。 然后我objdump这个文件。 结果是
movl $0x2,0x1c(%esp)
movl $0x1,0x18(%esp)
mov 0x1c(%esp),%eax
add 0x18(%esp),%ebx
mov %ebx,0x1c(%esp)
在第4行中,目标操作数是ebx而不是eax.ebx的内容不确定。 我想问一下,为什么目的地是ebx? ebx是addl指令中的默认选项吗?