0

当我像这样使用扩展内联汇编时

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 指令中的默认选项吗?

4

0 回答 0