与GCC的内联汇编

时间:2014-04-15 05:32:44

标签: c++ assembly

#include <stdio.h>

int
get_random(void)
{
    asm(".intel_syntax noprefix\n"
        "mov eax, 42           \n");
    asm("mov eax, 42 \n");
}
int
main(void)
{
    return printf("The answer is %d.\n", get_random());
}

我正在尝试使用以下CLI命令编译此C ++程序: g++ asm.cpp -o asm

错误讯息:

/tmp/ccXHbaRO.s: Assembler messages:
/tmp/ccXHbaRO.s:41: Error: no such instruction: `movl %eax,%esi'
/tmp/ccXHbaRO.s:42: Error: no such instruction: `movl $.LC0,%edi'
/tmp/ccXHbaRO.s:43: Error: no such instruction: `movl $0,%eax'

因为我添加了asm(".intel_syntax noprefix\n");我认为我不需要添加GCC标志-masm=intel

另外,我在哪里可以找到有关-masm标志的更多信息?有NASM等价物吗?

1 个答案:

答案 0 :(得分:3)

您在汇编中编写的代码将逐字地放在编译器的输出中。

这意味着如果您更改有关如何解析汇编代码的格式或其他全局选项,则需要在最后恢复默认选项。

如果您不这样做,编译后生成的代码将失效。