Assembly, assembler e linguagem de maquina

São Coisas Diferentes

Existem três conceitos diferentes, mas relacionados, que as pessoas frequentemente confundem. Vamos esclarecer cada um deles.

Assembly

Assembly é uma linguagem de programação composta por mnemônicos simples. Ela corresponde diretamente às instruções da plataforma utilizada. Ao escrever código em Assembly, você sabe exatamente o que o processador está fazendo e tem acesso a recursos que podem não estar disponíveis em linguagens de alto nível. Podemos chamar Assembly de uma linguagem de baixo nível, o que significa que está mais próxima do hardware.

Assembler

Assembler é o montador, um programa que lê o arquivo com os mnemônicos da linguagem Assembly e converte em linguagem de máquina. Ele atua como o compilador.

Linguagem de Máquina

A linguagem de máquina é a única que o processador consegue interpretar. Ela é composta apenas por códigos, tornando-a ilegível para humanos. Com prática, é possível reconhecer alguns códigos em hexadecimal e relacioná-los com seus mnemônicos em Assembly. Por exemplo, na plataforma 8086, a instrução NOP é 0x90 e 0xCD é o código para chamar uma interrupção. Já na plataforma Z80, NOP é 0x00.

Exemplos

Olá Mundo em DOS x86 16 bits

ORG 100h
section .text
    MOV AH, 40h
    MOV BX, 1
    MOV CX, 11
    MOV DX, msg
    INT 21h
    MOV AL, 1
    MOV AH, 4Ch
    INT 21h
section .data
    msg db "hello world"

Programa Compilado pelo Assembler

B4 40 BB 01 00 B9 0B 00 BA 14 01 CD 21 B0 01 B4
4C CD 21 00 68 65 6C 6C 6F 20 77 6F 72 6C 64

Aplicação nos Dias de Hoje

Antigamente, Assembly era a única opção além de digitar diretamente os códigos de máquina. Hoje, isso mudou, mas Assembly continua sendo uma linguagem importante e faz parte do código de muitas linguagens modernas.

Ela é usada para acessar instruções de criptografia por hardware ou para obter máxima velocidade em tarefas importantes, como a troca de contexto em linguagens modernas como Go.

Aprender Assembly é entender como os computadores funcionam internamente. Todo programador profissional que leva seu trabalho a sério deveria aprender Assembly.

O Computador

Para entender melhor como as partes de um computador funcionam, sugiro escrever um emulador. Não precisa ser completo; pode ser apenas um pequeno interpretador que lê e executa binários, simulando um interpretador e um pouco de RAM.

Criei um exemplo de emulador limitado com o objetivo de ser didático. Se tiver dúvidas sobre o conceito ou funcionamento, me avise.

Cesar Gimenes

Última modificação