Resumo
Este artigo descreve o histórico e o uso básico do montador NASM.
Introdução ao NASM
NASM (The Netwide Assembler) é um montador amplamente utilizado para plataformas x86 e x86-64. Seu histórico de versões é o seguinte:
0.98 - Lançada em 1997, esta versão inclui suporte para os processadores da série x86, bem como algumas instruções de montagem e definições de macro comumente usadas, tornando-se o primeiro montador capaz de compilar o kernel Linux.
0.99 - Lançado em 1998, muitos novos recursos foram adicionados, incluindo suporte para o conjunto de instruções MMX.
0.98.39 - Lançado em 2000, tornando-se a última versão somente para DOS.
1.0rc1 - lançado em 2002, adicionou suporte para a plataforma Windows.
2.0 – Lançado em 2008, adicionou suporte para a plataforma x86-64 e melhorou a sintaxe.
2.11 - Lançado em 2014, muitos novos recursos foram adicionados, incluindo suporte para o conjunto de instruções AVX2 e plug-ins de compilador.
2.14 – Lançado em 2017, adicionou suporte para o conjunto de instruções AVX-512 e outras melhorias.2.15 - Lançado em janeiro de 2021, adiciona suporte para algumas das instruções mais recentes, adiciona suporte para formatos de saída de código de bits LLVM IR e LLVM, adiciona algumas opções de linha de comando e melhora a flexibilidade e personalização do NASM. , as informações de erro são mais detalhadas e preciso, o que facilita aos usuários a depuração e eliminação de erros, melhora a velocidade e a eficiência da montagem e torna o NASM mais rápido na compilação de grandes projetos.
Atualmente, a versão mais recente do NASM é a 2.15, que se tornou um dos montadores mais utilizados nas plataformas x86 e x86-64, podendo gerar código de máquina eficiente e arquivos de objetos relocáveis.
Instale o nasm
Primeiro você precisa instalar o NASM em seu ambiente de desenvolvimento. Você pode usar o gerenciador de pacotes para instalar no Linux ou baixar o instalador do site oficial no Windows.
Instale NASM no Ubuntu:
sudo apt install nasm
escrever código assembly
Escreva o código assembly usando qualquer editor de texto e salve o arquivo como .asm
formato. Aqui está um exemplo simples:
section .data
hello db 'Hello, world!',0xD,0xA,0
section .text
global _start
_start:
; write the message
mov eax, 4
mov ebx, 1
mov ecx, hello
mov edx, 15
int 0x80
; exit
mov eax, 1
xor ebx, ebx
int 0x80
Este código Hello, world!
grava a string na saída padrão e sai do programa.
código de montagem
Abra um terminal ou interface de linha de comando, mude para .asm
o diretório onde o arquivo está armazenado e execute o seguinte comando:
nasm -f elf64 hello.asm
O comando acima irá gerar um elf64
arquivo objeto de formato hello.o
.
vincular arquivo de objeto
Para converter um assembler em um executável, os arquivos objeto precisam estar vinculados ao executável. ld
Isso pode ser feito usando o vinculador GNU . Execute o seguinte comando em um terminal ou interface de linha de comando:
ld -s -o hello hello.o
O comando acima irá gerar um arquivo executável hello
, que é a versão final do assembler.
execute o programa
Em um terminal ou interface de linha de comando, execute o programa com o seguinte comando:
./hello
irá gerar Hello world!
, indicando que o programa foi executado com sucesso.
Referências
Resumir
Aprender a linguagem assembly NASM pode ajudá-lo a compreender profundamente a arquitetura subjacente e o conjunto de instruções do computador, de modo a compreender melhor o princípio de funcionamento do sistema de computador e ajudá-lo a compreender o processo de como a linguagem de alto nível é convertida em código de máquina, de modo a compreender melhor o trabalho da linguagem de alto nível.