扩展内联汇编:“addl”指令中的目标操作数始终为“ebx”

时间:2013-07-30 11:04:40

标签: assembly att

当我使用扩展内联汇编时

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

0 个答案:

没有答案