如何使用gcc生成英特尔语法的汇编代码?

gcc -S选项会在AT&T语法中生成汇编代码,有没有一种方法可以在英特尔语法中生成文件? 或者有没有办法在两者之间进行转换?

你尝试过吗?

 gcc -S -masm=intel test.c 

未经testing,但我发现它在这个论坛 ,有人声称它为他们工作。

我刚刚在Mac上试过,失败了,所以我看了一下我的手册页:

  -masm=dialect Output asm instructions using selected dialect. Supported choices are intel or att (the default one). Darwin does not support intel. 

它可能在你的平台上工作。

对于Mac OSX:

 clang++ -S -mllvm --x86-asm-syntax=intel test.cpp 

资料来源: https : //stackoverflow.com/a/11957826/950427

 gcc -S -masm=intel test.c 

跟我一起工作 但是我可以用另一种方式来说明,尽pipe这与运行gcc无关。 编译可执行文件或目标代码文件,然后使用objdump反汇编Intel asm语法中的目标代码,如下所示:

  objdump -d --disassembler-options=intel a.out 

这可能有帮助。

我在CPP文件中有这样的代码:

 #include <conio.h> #include <stdio.h> #include <windows.h> int a = 0; int main(int argc, char *argv[]) { asm("mov eax, 0xFF"); asm("mov _a, eax"); printf("Result of a = %d\n", a); getch(); return 0; }; 

这是GCC命令行的代码:

 gcc.exe File.cpp -masm=intel -mconsole -o File.exe 

这将导致* .exe文件,并在我的经验。

 Notes: immediate operand must be use _variable in global variabel, not local variable. example: mov _nLength, eax NOT mov $nLength, eax or mov nLength, eax A number in hexadecimal format must use at&t syntax, cannot use intel syntax. example: mov eax, 0xFF -> TRUE, mov eax, 0FFh -> FALSE. 

就这样。