4

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

movl %%esp %0

是否%0代表寄存器、内存地址或其他内容?是什么%0意思?

4

1 回答 1

9

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

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

例如:

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

%0b在这种情况下是并且%1a

于 2012-05-05T12:27:34.500 回答