0

这是assembly codein的一个片段AT&T Syntax

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

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

我知道movl将数据从源操作数复制到目标操作数。也就是说,就我而言,它正在移动0 to eax..这就是我从这个链接中了解到的-slide 2

但是,我不明白它的其余部分。有人可以解释一下吗?

4

1 回答 1

3

您应该阅读GCC 内联汇编约束

简而言之,这::"r"(&foo_array)就是说您需要一个汇编代码输入,该输入应该放在一个寄存器中,并且它的值应该是foo_array.
代码中的%0in 被该输入替换,因此代码放置了foo_arrayin的地址eax

于 2013-06-10T08:23:00.357 回答