这里是assembly codeAT&T Syntax的一个片段。

int foo_array[64*1024]  __attribute__ ((aligned (8192)));

void
foo()
{
    __asm__("movl %0,%%eax"::"r"(&foo_array));

我知道movl将数据从源操作数复制到目标操作数。也就是说,在我的例子中,它正在移动。。这就是我从这个link-0 to eax中了解到的
但是,我不明白其余的事情。有人能给我解释一下吗。

最佳答案

您应该阅读GCC inline assembly constraints
简言之,::"r"(&foo_array)所说的是,您需要一个程序集代码的输入,该输入应该放在寄存器中,其值应该是foo_array的地址。代码中的%0被该输入替换,因此代码将foo_array的地址放在eax中。

关于c - 带有属性的movl AT&T语法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17019292/

10-13 06:29