这里是assembly code
中AT&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/