我的知识非常有限,我需要知道以下代码:
movl %%esp %0
%0
是代表寄存器,内存地址还是其他什么? %0
是什么意思?
答案 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 */
);
在这种情况下, %0
为b
,%1
为a
。