
A linguagem de montagem e bem parecida com o Código de máquina (ou seja, a linguagem que usa o computador : informações em binário, 0 ou 1). Depende muito do tipo de processador. Assim, não existe uma linguagem de montagem, mas, uma linguagem de montagem por tipo de processador. Assim sendo, é preciso conhecer um mínimo do funcionamento de um processador para poder abordar esta parte. Um processador real, no entanto, tem registros e instruções demais para ser estudado em detalhe. É por esta razão que só os registros e as instruções de um processador simples (Intel 80x86 16-bit) serão estudados nesta dica.
Um processador é conectado à memória através de uma conexão chamada bus. Os dados que o processador precisa ficam armazenados no que chamamos de registros (eles são anotados AX, BX, CX, DX,...). Cada um tem sua própria utilidade:
| Nome do registro | Tamanho |
|---|---|
| Acumulador AX | 16 bits |
| Registro auxiliar básico BX | 16 bits |
| Registro auxiliar (contador) CX | 16 bits |
| Registro auxiliar de dados DX | 16 bits |
| Ponteiro de instrução IP | 16 bits |
| ?ndice de fonte SI | 16 bits |
| ?ndice de destino DI | 16 bits |
| Código de registro de segmentos CS | 16 bits |
| Registro do segmento de dados DS | 16 bits |
| Registro do segmento da pilha SS | 16 bits |
| Registro do segmento adicional ES | 16 bits |
| Ponteiro de pilha SP | 16 bits |
| Ponteiro básico BP | 16 bits |
Os registros AX, BX, CX e DX são os mais usados para os cálculos:
Trata-se da utilização básica desses registros, mas, na prática, eles podem ser usados para outros fins.
Os registres AX, BX, CX e DX podem ser usados por blocos de um byte (8 bits), a letra X de seus nomes é substituída pelo L (como Low para indicar os bits mais leves) e H (para High para indicar os bits mais significativos). Além disso, nas arquiteturas x86 32 bits, esses registros se estenderam a 32 e viram seu nome precedido de um E (para Extended).
| EAX (32 bits) | |||
| AX (16 bits) | |||
| AH (8 bits) | AL (8 bits) | ||
Para fazer o processador executar uma série de instruções, é preciso fornecer dados binários (muitas vezes representados em notação hexadecimal para facilitar a leitura, mas dá no mesmo...). Ora, as funções em notação hexadecimal são difíceis de decorar, é por isso que a linguagem de montagem foi desenvolvida. Com ela, é possível anotar as instruções com nomes explícitos seguidos de parâmetros.
Veja o exemplo de um programa em código máquina:
A1 01 10 03 06 01 12 A3 01 14
Trata-se da representação hexadecimal de um programa que soma os valores de duas casas da memória e armazena o resultado em uma terceira casa. É óbvio que este tipo de escrita é dificilmente legível por nós, humanos.
Assim, já que todas as instruções que o processador pode executar são associadas a um valor binário, utilizamos uma notação simbólica em forma de texto correspondente a cada função; isto é o que chamamos de linguagem de montagem. No exemplo anterior a seqüência A1 01 10 significa copiar o conteúdo da memória no endereço 0110h <Ital /> no registo AX do processador. Isto se nota em linguagem de montagem:
MOV AX, [0110]
Todas as instruções têm uma notação simbólica associada (fornecida pelo fabricante do processador). O uso de linguagem de montagem consiste, portanto, em escrever, de forma simbólica, a sucessão de instruções (precedidas por seus endereços a fim de identificar as instruções e passar facilmente de uma para outra). Essas instruções são armazenadas em um arquivo de texto (o arquivo <ital> fonte ) que, graças a um programa específico (chamado de "linguagem de montagem") será traduzido para o código de máquina.
O programa anterior escrito em linguagem de montagem daria isso:
| Endereço da instrução | Instrução em código de máquina | Instrução em linguagem de montagem | Comentários sobre a instrução |
|---|---|---|---|
| 0100 | A1 01 10 | MOV AX, [0110] | Copiar o conteúdo de 0110 no registro AX |
| 0103 | 03 06 01 12 | ADD AX, [0112] | Adicionar o conteúdo de 0112 à AX e por o resultado no AX |
| 0107 | A3 01 14 | MOV [0114], AX | Armazenar AX no endereço da memória 0114 |
A escrita em linguagem de montagem, embora ainda difícil, é muito mais fácil de ser compreendida por um ser humano, porque, de um modo geral, os nomes são mais fáceis de decorar do que números.