[英]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.