A gcc -S
opção gerará código de montagem na sintaxe da AT&T. Existe uma maneira de gerar arquivos na sintaxe da Intel? Ou existe uma maneira de converter entre os dois?
A gcc -S
opção gerará código de montagem na sintaxe da AT&T. Existe uma maneira de gerar arquivos na sintaxe da Intel? Ou existe uma maneira de converter entre os dois?
Respostas:
Você já tentou isso?
gcc -S -masm=intel test.c
Não testado, mas o encontrei neste fórum em que alguém afirmou que funcionava para eles.
Eu apenas tentei isso no mac e ele falhou, então procurei na minha página de manual:
-masm=dialect
Output asm instructions using selected dialect. Supported choices
are intel or att (the default one). Darwin does not support intel.
Pode funcionar na sua plataforma.
Para Mac OSX:
clang++ -S -mllvm --x86-asm-syntax=intel test.cpp
prefix
/ noprefix
(não tem certeza se importa se Clang consome a montagem).
o
gcc -S -masm=intel test.c
Funciona comigo. Mas posso dizer de outra maneira, embora isso não tenha nada a ver com a execução do gcc. Compile o arquivo executável ou o código de objeto e desmonte o código de objeto na sintaxe Intel asm com objdump, conforme abaixo:
objdump -d --disassembler-options=intel a.out
Isso pode ajudar.
Eu tenho esse código no arquivo 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;
};
Esse código funcionou com esta linha de comando do GCC:
gcc.exe File.cpp -masm=intel -mconsole -o File.exe
Isso resultará no arquivo * .exe e funcionou na minha experiência.
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.
Isso é tudo.
$ gcc -S -masm=intel -mconsole a.c -o a.out gcc: error: unrecognized command line option ‘-mconsole’
-o a.out
, não receberá um arquivo .s.
echo "packsswb mm0,[bp+si-0x54]" | llvm-mc-3.2 -x86-asm-syntax=intel
dápacksswb -84(%bp,%si), %mm0