0

所有文档都使用 AT&T 语法。

int EAX;
asm( "movl $5, %0"
   : "=a" (EAX)
);

如何使用 Intel 语法重写它?

int EAX;
asm( 
 ".intel_syntax noprefix;"
 "mov %0, 5"
 :"=a"(EAX)
);

不起作用:

 error: unknown token in expression
 asm(".intel_syntax noprefix;"
     ^
<inline asm>:1:29: note: instantiated into assembly here
        .intel_syntax noprefix;mov %0, 5
4

1 回答 1

3

根据经验,gcc 内联汇编必须用 AT&T 语法编写才能正常编译。您可以-masm=intel使用 Intel 语法进行编译,但如果没有此标志,您的代码将无法编译。可以在 Intel 和 AT&T 汇编语法中提供内联汇编,以便您的代码在使用和不使用-masm=intel. 详情请参阅手册

于 2019-11-16T23:25:19.510 回答