如何访问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, 0x在此语句后将具有值0

请指定您想要使用的编译器。

另请注意,执行此操作会限制程序仅使用特定的编译器 – 汇编程序组合进行编译,并且仅针对特定体系结构。

asm("mov $0, %1":"=r" (x):"r" (x):"cc");
– 这可能会让你走上正轨。 尽可能指定寄存器的使用以提高性能和效率。 然而,正如Aniket指出的那样,高度依赖于架构并且需要gcc。