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

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


你试过这个吗?

gcc -S -masm=intel test.c

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

我只是在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

与我合作。 但我可以用另一种方式说,尽管这与运行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 = %dn", 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.

就这样。

链接地址: http://www.djcxy.com/p/15219.html

上一篇: How do you use gcc to generate assembly code in Intel syntax?

下一篇: means (or other optimizations)