Die gcc -S
Option generiert Assemblycode in AT & T-Syntax. Gibt es eine Möglichkeit, Dateien in Intel-Syntax zu generieren? Oder gibt es eine Möglichkeit, zwischen den beiden zu konvertieren?
Die gcc -S
Option generiert Assemblycode in AT & T-Syntax. Gibt es eine Möglichkeit, Dateien in Intel-Syntax zu generieren? Oder gibt es eine Möglichkeit, zwischen den beiden zu konvertieren?
Antworten:
Hast du das versucht?
gcc -S -masm=intel test.c
Ungetestet, aber ich fand es in diesem Forum, wo jemand behauptete, es würde für sie funktionieren.
Ich habe es gerade auf dem Mac versucht und es ist fehlgeschlagen, also habe ich in meiner Manpage nachgesehen:
-masm=dialect
Output asm instructions using selected dialect. Supported choices
are intel or att (the default one). Darwin does not support intel.
Es kann auf Ihrer Plattform funktionieren.
Für Mac OSX:
clang++ -S -mllvm --x86-asm-syntax=intel test.cpp
prefix
/ noprefix
(nicht sicher, ob es wichtig ist, ob Clang die Baugruppe verbraucht).
Das
gcc -S -masm=intel test.c
Funktioniert bei mir Aber ich kann einen anderen Weg sagen, obwohl dies nichts mit dem Ausführen von gcc zu tun hat. Kompilieren Sie die ausführbare Datei oder die Objektcodedatei und zerlegen Sie den Objektcode in der Intel asm-Syntax mit objdump wie folgt:
objdump -d --disassembler-options=intel a.out
Dies könnte helfen.
Ich habe diesen Code in der CPP-Datei:
#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;
};
Dieser Code funktioniert mit dieser GCC-Befehlszeile:
gcc.exe File.cpp -masm=intel -mconsole -o File.exe
Es wird * .exe-Datei ergeben, und es hat meiner Erfahrung nach funktioniert.
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.
Das ist alles.
$ gcc -S -masm=intel -mconsole a.c -o a.out gcc: error: unrecognized command line option ‘-mconsole’
-o a.out
Sie keine .s-Datei.
echo "packsswb mm0,[bp+si-0x54]" | llvm-mc-3.2 -x86-asm-syntax=intel
gibtpacksswb -84(%bp,%si), %mm0