Lá, mostramos como criar o arquivo com a extensão asm.
Ao término deste tutorial, você irá aprender como transformar esse arquivo em executável, e executá-lo.
Como transformar um arquivo .asm em executável
Agora precisamos converter nosso código em Assembly, que é feito e entendido por nós humanos, para a linguagem de máquina, que é a linguagem que o computador realmente entende e roda.Isso se faz em dois passos:
- Criar o object file, que pega o .asm e cria, a partir dele, um arquivo com a extensão .o
- Linkar nosso programa, fazendo com que o código-objeto se torne em um executável
Vamos ensinar como fazer isso utilizando o assembler NASM, no sistema operacional Linux.
Um importante detalhe: dependendo da arquitetura de seu sistema, 32 bits ou 64 bits, os comandos diferem um pouco, mas ensinaremos como trabalhar em ambos casos.
Como criar o object file em Assembly
Agora vamos criar o arquivo com extensão .o, que é o objeto (resultado da transformação do código para código de máquina).Para isso, vamos finalmente usar o nasm.
Como Assembly é baixo níveo, o código vai se diferenciar levemente caso você use 32 ou 64 bits, mas nosso tutorial de Assembly vai explicar você a rodar seus programas em ambas arquiteturas.
Caso seja 32 bits, vá no diretório do hello.asm e digite o seguinte código no terminal:
nasm -f hello.asm
Caso seja 64 bits, digite:
nasm -f elf64 hello.asm
Se você notar bem, foi criado um arquivo com extensão .o, é o arquivo-objeto hello.o
Como linkar arquivos em Assembly
O próximo passo é a linkagem, onde vamos transformar o(s) códigos objeto de nossos programas para torná-los executáveis.Vamos usar o comando ld para isso.
32 ou 64 bits:
ld hello.o -o hello
Pronto, agora você tem seu arquivo executável "hello". Para rodá-lo, digite o comando a seguir, que deve mostrar uma mensagem na tela:
./hello
O resultado desses passos é:
Como rodar o código Assembly - Tutorial Alternativo
Uma outra maneira de fazer todo esse processo é a seguinte:1. Criar o código-objeto:
nasm -f hello.asm2. Linkando
32 bits:
ld hello.o -o hello
64 bits:
ld -m elf_i386 hello.o -o hello
7 comentários:
Boa tarde.
Seguindo o tutorial, o comando
ld -m elf_i386 hello.o -o hello
retorna:
'ld' não é reconhecido como um comando interno ou externo, um programa operável ou um arquivo em lotes.
O bloco de notas salva o arquivo como hello.asm.txt, se você digitar apenas hello.asm dá o erro 'nasm: fatal: unable to open input file `hello.asm'. Pelo menos foi assim comigo...
Você ensina a fazer isso em um sistema Linux, como eu faria usando um Windows 10?
Olá. O Comando id/Id não foi reconhecido como um comando interno
ou externo, um programa operável ou um arquivo em lotes.
O que isso significa?
Isso é válido para o Linux apenas?
no windows o ld não funciona, somente a opcão de 32 bits, mas da seguinte forma, "hello.o -o hello" pois o ld e do linux... bom pra mim funcionou pois eu tentei algumas vezes todas deram certo dessa forma inclusive com outros nomes de arquivo
Na hora de criar o executável, tente fazer assim: Id -m elf_i386 hello.o -o hello.exe
Eu uso o gcc do mingw com C no Windows, a diferença é que normalmente tanque pôr a extensão ".exe" para o sistema saber que é uma executável.
Não é Id com i, tente com L, ld.
Postar um comentário