C++ 带GCC的内联汇编

C++ 带GCC的内联汇编,c++,assembly,C++,Assembly,因为我添加了asm(“.intel\u语法noprefix\n”)我想我不需要添加GCC标志-masm=intel 另外,在哪里可以找到有关-masm标志的更多信息?是否有NASM的等价物 您在程序集中编写的代码将被逐字放入编译器的输出中 这意味着,如果更改有关如何解析程序集代码的格式或其他全局选项,则需要在最后恢复默认选项 如果您不这样做,编译器在您的部件之后生成的代码将变得无效。您是否尝试使用%符号%使用%源代码没有任何%这是AT&t汇编而不是Intelassembly@SSpoke我想使用

因为我添加了
asm(“.intel\u语法noprefix\n”)
我想我不需要添加GCC标志
-masm=intel


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

您在程序集中编写的代码将被逐字放入编译器的输出中

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


如果您不这样做,编译器在您的部件之后生成的代码将变得无效。

您是否尝试使用
%
符号
%
使用
%
源代码没有任何
%
这是AT&t汇编而不是Intelassembly@SSpoke我想使用英特尔语法。这就是为什么我添加了行
asm(“.intel\u语法noprefix\n”)
。尝试将其替换为
。“英特尔语法noprefix\n\t”
使用
。“att\u语法前缀”
由于最后一行可能有效,老实说,解决问题的最佳方法是使用工作正常的英特尔到AT&t汇编转换器。。。无论如何,不应该过多地使用内联汇编。你是说,他需要从intel noprefix格式切换回AT&t?我想他的意思是使用最后一行作为
asm(“.att_语法前缀”)@mangusta:没错。如果您有大量的汇编代码,那么最好的选择是组装一个单独的模块,并将其与代码的其余部分链接起来。
#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());
}
/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'