Опция gcc -S
генерирует код сборки в синтаксисе AT & T, есть ли способ генерировать файлы в синтаксисе Intel? Или есть способ конвертировать между двумя?
Как вы используете gcc для генерации кода сборки в синтаксисе Intel?
Ответ 1
Вы пробовали это?
gcc -S -masm=intel test.c
Неподтвержденный, но я нашел его в этом forum, где кто-то утверждал, что он сработал для них.
Я просто попробовал это на mac, и это не получилось, поэтому я посмотрел на мою страницу man:
-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
Источник: fooobar.com/questions/47108/...
Ответ 2
gcc -S -masm=intel test.c
Работает со мной. Но я могу сказать по-другому, хотя это не имеет никакого отношения к запуску gcc. Скомпилируйте исполняемый файл или файл объектного кода, а затем разоберите код объекта в синтаксисе asm asm с помощью objdump, как показано ниже:
objdump -d --disassembler-options=intel a.out
Это может помочь.
Ответ 3
У меня есть этот код в файле 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.
Что все.