[英]Pass offset from stack/frame pointer to variable to GCC inline assembly
在所有GCC版本中,不适合寄存器的局部变量都存储在堆栈中。 为了访问它们,可以使用[ESP + n]或[EBP-n]之类的构造,其中n可能涉及变量内的偏移量。
将此类变量作为操作数传递给GCC内联汇编时,将使用备用寄存器存储计算出的地址。 有没有一种方法可以将操作数指定为“此变量的基址寄存器”和/或“此变量相对于基址寄存器的偏移量”?
如果你做类似的事情
int stackvar;
... asm ("...":"r"(stackvar))
您强制GCC将stackvar加载到寄存器中。 如果添加m
约束,则不会:
int stackvar;
... asm ("...":"rm"(stackvar))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.