在GCC内联汇编中,等于符号g“= g”是什么意思/做什么?

时间:2011-06-12 02:34:40

标签: c gcc assembly x86

我不确定这个内联汇编是做什么的:

asm ("mov %%esp, %0" : "=g" (esp));

尤其是: "=g" (esp)部分。

2 个答案:

答案 0 :(得分:9)

"=g" (esp)定义内联汇编的输出。 g告诉编译器它可以使用任何通用寄存器或存储器来存储结果。 (esp)表示结果将存储在名为esp的c变量中。 mov %%esp, %0是汇编命令,它只是将堆栈指针移动到第0个操作数(输出)。因此,此程序集只是将堆栈指针存储在名为esp的变量中。

答案 1 :(得分:9)

如果您需要详细信息,请阅读Extended Asm上的GCC文档。

简短的回答是,这会将x86堆栈指针(%esp寄存器)移动到名为“esp”的C变量中。 “= g”告诉编译器它可以用什么类型的操作数代替汇编代码中的%0。 (在这种情况下,它是一个“通用操作数”,这意味着几乎允许任何寄存器或内存引用。)

相关问题