X86 叮当声不响';不要使用英特尔汇编语法
我正在尝试在clang(Windows)中编译内联汇编代码。因此,我有以下代码:X86 叮当声不响';不要使用英特尔汇编语法,x86,clang,inline-assembly,clang++,intel-syntax,X86,Clang,Inline Assembly,Clang++,Intel Syntax,我正在尝试在clang(Windows)中编译内联汇编代码。因此,我有以下代码: int main(int, char **) { asm("mov %eax,$4;"); } 我尝试使用clang++-masm=intel main.cpp编译它,但它抱怨助记符操作数大小main.cpp:4:7:错误:未知使用没有大小后缀的指令助记符,因为它仍然使用AT&T语法。 我试过使用 asm(".intel_syntax;" "mov
int main(int, char **) {
asm("mov %eax,$4;");
}
我尝试使用clang++-masm=intel main.cpp
编译它,但它抱怨助记符操作数大小main.cpp:4:7:错误:未知使用没有大小后缀的指令助记符,因为它仍然使用AT&T语法。
我试过使用
asm(".intel_syntax;"
"mov %eax,$4;");
但它抱怨使用.intel_syntaxmain.cpp:3:7:error:unknown token in expression asm(“.intel_syntax;”“)
,似乎不可能让clang使用intel syntax inline asm。如果没有完全破坏,这将是一个更好的示例。e、 g.asm(“mov$4,%eax”:“eax”)
用于AT&T示例。(源代码在前,目标代码在后,还有一个用来告诉编译器您所使用的寄存器的闭包)。您的英特尔语法尝试仍然在寄存器名和立即数上使用AT&T修饰。该指令的GAS.intel\u语法noprefix
版本是mov eax,4
。Clang的汇编程序甚至在一个独立的.s
文件中也会拒绝这种情况。添加noprefix
似乎有效,但在使用输入/输出时它会停止。例如asm(.intel\u语法noprefix;mov eax,%0\n\t):“i”(10):“eax”)代码>,给出错误“error:unknown token in expression mov eax,$10`,前缀似乎添加到了输入/输出中。似乎不可能让clang使用Intel语法内联asm。如果没有完全中断,这将是一个更好的示例。e、 g.asm(“mov$4,%eax”:“eax”)
用于AT&T示例。(源代码在前,目标代码在后,还有一个用来告诉编译器您所使用的寄存器的闭包)。您的英特尔语法尝试仍然在寄存器名和立即数上使用AT&T修饰。该指令的GAS.intel\u语法noprefix
版本是mov eax,4
。Clang的汇编程序甚至在一个独立的.s
文件中也会拒绝这种情况。添加noprefix
似乎有效,但在使用输入/输出时它会停止。例如asm(.intel\u语法noprefix;mov eax,%0\n\t):“i”(10):“eax”)代码>,给出了错误“error:unknown token in expression mov eax,$10”,似乎前缀添加到了输入/输出中。