L' gcc -S
option générera du code d'assemblage dans la syntaxe AT&T, existe-t-il un moyen de générer des fichiers dans la syntaxe Intel? Ou y a-t-il un moyen de convertir entre les deux?
L' gcc -S
option générera du code d'assemblage dans la syntaxe AT&T, existe-t-il un moyen de générer des fichiers dans la syntaxe Intel? Ou y a-t-il un moyen de convertir entre les deux?
Réponses:
Avez-vous essayé cela?
gcc -S -masm=intel test.c
Non testé, mais je l'ai trouvé dans ce forum où quelqu'un a affirmé que cela fonctionnait pour eux.
J'ai juste essayé ceci sur le mac et cela a échoué, alors j'ai regardé dans ma page de manuel:
-masm=dialect
Output asm instructions using selected dialect. Supported choices
are intel or att (the default one). Darwin does not support intel.
Cela peut fonctionner sur votre plateforme.
Pour Mac OSX:
clang++ -S -mllvm --x86-asm-syntax=intel test.cpp
prefix
/ noprefix
(je ne sais pas si cela compte si Clang consomme l'assemblage).
le
gcc -S -masm=intel test.c
Fonctionne avec moi. Mais je peux dire une autre façon, même si cela n'a rien à voir avec l'exécution de gcc. Compilez l'exécutable ou le fichier de code objet, puis désassemblez le code objet dans la syntaxe Intel asm avec objdump comme ci-dessous:
objdump -d --disassembler-options=intel a.out
Cela pourrait aider.
J'ai ce code dans le fichier 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;
};
C'est du code qui fonctionne avec cette ligne de commande GCC:
gcc.exe File.cpp -masm=intel -mconsole -o File.exe
Il en résultera un fichier * .exe, et cela a fonctionné selon mon expérience.
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.
C'est tout.
$ gcc -S -masm=intel -mconsole a.c -o a.out gcc: error: unrecognized command line option ‘-mconsole’
-o a.out
vous n'obtiendrez pas de fichier .s.
echo "packsswb mm0,[bp+si-0x54]" | llvm-mc-3.2 -x86-asm-syntax=intel
donnepacksswb -84(%bp,%si), %mm0