X86 叮当声不响';不要使用英特尔汇编语法

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

我正在尝试在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 %eax,$4;");

但它抱怨使用.intel_syntax
main.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”,似乎前缀添加到了输入/输出中。