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