如何访问c变量以进行内联汇编操作

时间:2013-01-31 03:28:12

标签: c assembly inline-assembly

鉴于此代码:

#include <stdio.h>

int main(int argc, char **argv)
{
    int x = 1;
    printf("Hello x = %d\n", x);
}

我想在内联汇编中访问和操作变量x。理想情况下,我想使用内联汇编更改其值。 GNU汇编程序,并使用AT&amp; T语法。

2 个答案:

答案 0 :(得分:3)

asm volatile("movl $0, %[some]"
    : [some] "=r" (x)
);

之后,x包含0.注意,这仅适用于GCC。其他编译器需要不同的语法

例如,对于MSVC,您可以这样做:

在此声明之后,

__asm mov x, 0x的值为0

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

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

答案 1 :(得分:0)

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