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

ven*_*s.w 4 x86 assembly inline-assembly linux-kernel

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

movl %%esp %0
Run Code Online (Sandbox Code Playgroud)

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

Mik*_*wan 7

它代表一些输入/输出操作数.它允许您在汇编代码中使用C变量.这个页面有一些很好的例子.

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

例如:

int a=10, b;
asm ("movl %1, %%eax; 
      movl %%eax, %0;"
     :"=r"(b)        /* output */
     :"r"(a)         /* input */
     :"%eax"         /* clobbered register */
     );
Run Code Online (Sandbox Code Playgroud)

%0就是b在这种情况下,和%1a.