The gcc -S
pilihan akan menghasilkan kode assembly di AT & T sintaks, apakah ada cara untuk menghasilkan file dalam sintaks Intel? Atau adakah cara untuk mengkonversi antara keduanya?
The gcc -S
pilihan akan menghasilkan kode assembly di AT & T sintaks, apakah ada cara untuk menghasilkan file dalam sintaks Intel? Atau adakah cara untuk mengkonversi antara keduanya?
Jawaban:
Sudahkah Anda mencoba ini?
gcc -S -masm=intel test.c
Belum diuji, tetapi saya menemukannya di forum ini di mana seseorang mengklaim itu bekerja untuk mereka.
Saya baru saja mencoba ini di mac dan gagal, jadi saya melihat di halaman manual saya:
-masm=dialect
Output asm instructions using selected dialect. Supported choices
are intel or att (the default one). Darwin does not support intel.
Ini bisa bekerja pada platform Anda.
Untuk Mac OSX:
clang++ -S -mllvm --x86-asm-syntax=intel test.cpp
prefix
/ noprefix
(tidak yakin apakah itu penting jika Dentang mengkonsumsi perakitan).
Itu
gcc -S -masm=intel test.c
Apakah bekerja dengan saya. Tapi saya bisa tahu cara lain, meskipun ini tidak ada hubungannya dengan menjalankan gcc. Kompilasi file kode objek yang dapat dieksekusi dan kemudian bongkar kode objek dalam sintaks Intel asm dengan objdump seperti di bawah ini:
objdump -d --disassembler-options=intel a.out
Ini mungkin bisa membantu.
Saya memiliki kode ini dalam file 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;
};
Kode itu berfungsi dengan baris perintah GCC ini:
gcc.exe File.cpp -masm=intel -mconsole -o File.exe
Ini akan menghasilkan file * .exe, dan itu berhasil menurut pengalaman saya.
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.
Itu saja.
$ gcc -S -masm=intel -mconsole a.c -o a.out gcc: error: unrecognized command line option ‘-mconsole’
-o a.out
Anda tidak akan mendapatkan file .s.
echo "packsswb mm0,[bp+si-0x54]" | llvm-mc-3.2 -x86-asm-syntax=intel
givespacksswb -84(%bp,%si), %mm0