asm代码包含%0,这是什么意思?

时间:2012-05-05 12:23:13

标签: assembly linux-kernel x86 inline-assembly

我的知识非常有限,我需要知道以下代码:

movl %%esp %0

%0是代表寄存器,内存地址还是其他什么? %0是什么意思?

1 个答案:

答案 0 :(得分:6)

代表一些input/output operand。它允许您在汇编代码中使用C变量。 This page有一些很好的例子。

%0只是代码中定义的第一个输入/输出操作数。实际上,这可能是堆栈变量,堆变量或寄存器,具体取决于编译器生成汇编代码的方式。

例如:

int a=10, b;
asm ("movl %1, %%eax; 
      movl %%eax, %0;"
     :"=r"(b)        /* output */
     :"r"(a)         /* input */
     :"%eax"         /* clobbered register */
     );
在这种情况下,

%0b%1a