Как вы используете gcc для генерации ассемблерного кода в синтаксисе Intel? - PullRequest
140 голосов
/ 14 октября 2008

Опция gcc -S генерирует ассемблерный код в синтаксисе AT & T, есть ли способ генерировать файлы в синтаксисе Intel? Или есть способ конвертировать между двумя?

Ответы [ 3 ]

183 голосов
/ 14 октября 2008

Вы пробовали это?

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

15 голосов
/ 12 апреля 2011

The

gcc -S -masm=intel test.c

Работает ли со мной. Но я могу сказать по-другому, хотя это не имеет ничего общего с запуском gcc. Скомпилируйте исполняемый файл или файл объектного кода, а затем разберите объектный код в синтаксисе Intel asm с помощью objdump, как показано ниже:

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

Это может помочь.

5 голосов
/ 26 мая 2012

У меня есть этот код в файле 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.

Вот и все.

...