Introdução ao NASM
1 Introdução
Este texto constitui uma pequena introdução ao assembler NASM(Netwide Assembler). Embora contenha algumas notas relacionadas com a arquitectura de computadores e programação em baixo-nível, não é um manual de programação. Pretende ser apenas um auxiliar para apoiar os primeiros passos na programação em assembly usando este assembler.
O primeiro conceito que importa esclarecer é precisamente a distinção entre aqueles dois termos realçados a itálico. Assim, o termo assembly refere-se à linguagem de programação, que é também designada por linguagem de baixo-nível, uma vez que se encontra intimamente relacionada com o processador a que se destina. Deste modo, cada processador, de cada fabricante(Intel, AMD,
Motorola,...), tem o seu próprio assembly, já que cada um tem estrutura interna diferente, mas o termo assembly aplica-se a todos eles (i.e. não há uma linguagem “assemblyIntel” ou “assemblyAMD”, tal como existe Pascal ou C). O que acontece é dizer-se que se está a utilizar o assembly do Pentium, do
Athlon, ou do Motorola68000. Em princípio, um programa que utilize o assembly do Pentium não será executado por um processador de outro fabricante, a menos que sejam compatíveis entre si.
Pelo seu lado, o termo assembler (“montador” em inglês) refere-se a um programa que permite facilitar o trabalho com a linguagem assembly, fazendo com que esta se assemelhe um pouco mais a uma linguagem de alto-nível. De facto, torna-se muito complicado para os programadores humanos escrever programas usando a linguagem “pura” do processador (linguagem-máquina), a
qual é
constituída por um conjunto mais ou menos extenso de bits (ex: a instrução “mov ah,40h”, muito usada em assembly, corresponde a 1011010010000000 - bits é a única coisa que as máquinas
“entedem” !). O assembler atribui nomes (mnemónicas) aos conjuntos de bits que constituem as instruções do processador,