Assembly, assembler e linguagem de maquina
São coisas diferentes!
São três coisas diferentes mas relacionadas e as pessoas vivem confundindo, então vamos a explicação.
Assembly
É uma linguagem de programação composta por mnemônicos simples. Ela reflete um para um as instruções da plataforma que estiver sendo usada. Escrevendo código Assembly você sabe exatamente o que o processador esta fazendo e tem acesso a recursos que podem não estar disponíveis em linguagens de mais alto nível… falando nisso podemos chamar Assembly de uma linguagem de baixo nível, nesse caso não é ruim, quer dizer apenas mais perto do hardware.
Assembler
Assembler é o montador, um programa que lê o arquivo contendo os mnemônicos da linguagem Assembly e transforma em linguagem de maquina. É o compilador!
Linguagem de Maquina
É a única coisa que o processador consegue interpretar, e são apenas códigos, não da para ser lido por humanos… bom eu tenho uns dois amigos que conseguem mas não tenho certeza que eles são humanos.
Falando sério, com alguma pratica você começa a reconhecer alguns dos códigos da linguagem de maquina escritos em hexadecimal e relacionar eles com seu mnemônico 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 escrito para 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"
O mesmo programa depois de 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
Houve uma época que Assembly era a única escolha possível, era isso ou tentar digitar diretamente os códigos de maquina.
Hoje em dia não é mais assim mas Assembly ainda é uma linguagem importante e faz parte do código de muitas linguagens modernas.
É usado por exemplo para acessar instruções de criptografia por hardware ou para maxima velocidade em tarefas importantes como a troca de contexto em linguagens modernas como Go.
Aprender Assembly é aprender como os computadores funcionam debaixo do capo e todo programador profissional que leva seu trabalho a sério devia aprender.
O computador
Para aprender mais sobre como as partes de um computador funcionam eu sugiro escrever um emulador, não precisa ser um emulador completo, pode ser apenas um pequeno interpretador que lê e interpreta o binário simulando um interpretador e um pouco de RAM.
Eu criei um exemplo de emulador muito limitado com exatamente o objetivo de ser um exemplo didático. Se tiver duvidas quanto ao conceito e ao funcionamento é só me avisar.