在所有类型的GCC中,不适合寄存器的局部变量存储在堆栈中。为了访问它们,可以使用[ESP + n]或[EBP-n]等结构,其中n可能涉及变量中的偏移量。
当将这些变量作为操作数传递给GCC内联汇编时,备用寄存器用于存储计算的地址。有没有办法将操作数指定为"此变量的基址寄存器"和/或"该变量相对于基址寄存器的偏移量"?
答案 0 :(得分:0)
如果您执行类似
的操作 int stackvar;
...
asm ("...":"r"(stackvar))
你强制GCC将stackvar加载到寄存器中。如果您添加m
约束,则不会:
int stackvar;
...
asm ("...":"rm"(stackvar))