Цей gcc -S
параметр генерує код складання в синтаксисі AT&T, чи є спосіб генерувати файли в синтаксисі Intel? Або є спосіб конвертувати між ними?
Цей 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
prefix
/ noprefix
(не впевнений, чи має значення, якщо Clang споживає збірку).
The
gcc -S -masm=intel test.c
Чи працює зі мною. Але я можу сказати інший спосіб, хоча це не має нічого спільного з запуском gcc. Скомпілюйте виконуваний файл або файл кодового коду, а потім розібріть код об'єкта в синтаксисі 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.
Це все.
$ gcc -S -masm=intel -mconsole a.c -o a.out gcc: error: unrecognized command line option ‘-mconsole’
-o a.out
ви не отримаєте .s файл.
echo "packsswb mm0,[bp+si-0x54]" | llvm-mc-3.2 -x86-asm-syntax=intel
даєpacksswb -84(%bp,%si), %mm0