将堆栈/帧指针的偏移量传递给GCC内联汇编变量

时间:2015-03-29 04:01:31

标签: gcc assembly inline-assembly

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

当将这些变量作为操作数传递给GCC内联汇编时,备用寄存器用于存储计算的地址。有没有办法将操作数指定为"此变量的基址寄存器"和/或"该变量相对于基址寄存器的偏移量"?

1 个答案:

答案 0 :(得分:0)

如果您执行类似

的操作

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

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

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