将堆栈/帧指针到变量的偏移量传递给GCC内联程序集



在GCC的所有版本中,不适合寄存器的局部变量都存储在堆栈中。为了访问它们,可以使用类似[ESP+n]或[EBP-n]的构造,其中n可能涉及变量中的偏移量。

将此类变量作为操作数传递给GCC内联程序集时,会使用一个备用寄存器来存储计算出的地址。有没有办法将操作数指定为"该变量的基址寄存器"和/或"该变量相对于基址寄存器的偏移量"?

如果您执行类似的操作

int stackvar;。。。asm ("...":"r"(stackvar))

您强制GCC将stackvar加载到寄存器中。如果添加m约束,则不会:

int stackvar;。。。asm ("...":"rm"(stackvar))

最新更新