当我像这样使用扩展内联汇编时
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 指令中的默认选项吗?