如何访问c变量以进行内联汇编操作
鉴于此代码:
#include int main(int argc, char **argv) { int x = 1; printf("Hello x = %d\n", x); }
我想在内联汇编中访问和操作变量x。 理想情况下,我想使用内联汇编更改其值。 GNU汇编程序,并使用AT&T语法。
asm volatile("movl $0, %[some]" : [some] "=r" (x) );
在此之后,x包含0.注意,这仅适用于GCC。 其他编译器需要不同的语法
例如,对于MSVC,您执行此操作:
__asm mov x, 0
和x
在此语句后将具有值0
。
请指定您想要使用的编译器。
另请注意,执行此操作会限制程序仅使用特定的编译器 – 汇编程序组合进行编译,并且仅针对特定体系结构。
asm("mov $0, %1":"=r" (x):"r" (x):"cc");
– 这可能会让你走上正轨。 尽可能指定寄存器的使用以提高性能和效率。 然而,正如Aniket指出的那样,高度依赖于架构并且需要gcc。