#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等价物吗?
答案 0 :(得分:3)
您在汇编中编写的代码将逐字地放在编译器的输出中。
这意味着如果您更改有关如何解析汇编代码的格式或其他全局选项,则需要在最后恢复默认选项。
如果您不这样做,编译后生成的代码将失效。