gcc -S选项将在AT&T语法生成汇编代码,有一个方法,以产生在Intel语法文件?或者是有什么办法可以在两者之间转换?

有帮助吗?

解决方案

您是否尝试过这个?

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的如下面英特尔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.

这是所有。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top