Como as instruções funcionam
Parte da seção Fundamentos do Journey de Assembly da Coddy. Lição 4 de 45.
Você sabe que a CPU executa instruções uma por uma. Mas como a CPU sabe qual instrução executar em seguida? Onde as instruções são armazenadas? E como é uma instrução, de fato?
Instruções são números.
Esta é uma verdade fundamental sobre os computadores. Tudo é um número. Os dados com que você trabalha (como o número 42) são um número. O endereço onde os dados ficam (como 1000) é um número. E as próprias instruções (como mov, add, cmp) também são números.
Quando você escreve código assembly como mov rax, 5, o montador converte esse texto legível por humanos em um número que a CPU entende. Esse número é chamado de código de instrução.
Onde as instruções são armazenadas?
As instruções são armazenadas na memória, assim como os dados. Não há um local especial para as instruções. A memória armazena ambos:
- Dados (números, caracteres, arrays)
- Instruções (o próprio programa)
A CPU não sabe a diferença. Ela simplesmente lê o que quer que esteja no endereço de memória apontado pelo Contador de Programa. Você aprendeu brevemente sobre o PC na Lição 0.1. Agora é hora de entender exatamente como ele funciona.
O Contador de Programa (também chamado de Ponteiro de Instrução) é um registrador especial dentro da CPU. Sua única função é armazenar o endereço de memória da próxima instrução a ser executada.
O ciclo de busca e execução:
A CPU repete estas três etapas para sempre:
| Etapa | O que acontece |
|---|---|
| 1. FETCH | Read a instrução no endereço em PC |
| 2. EXECUTE | Perform essa instrução |
| 3. ADVANCE | Move PC para a próxima instrução |
Exemplo simples:
Se PC = 1000, a CPU:
- Busca a instrução no endereço 1000
- Executa-a
- Move PC para o próximo endereço (1000 + tamanho da instrução)
Então, ele se repete com o novo valor de PC.
Como é uma instrução:
Toda instrução tem duas partes:
| Parte | O que ela faz | Exemplo |
|---|---|---|
| Opcode | O que FAZER | mov, add, cmp |
| Operandos | Em que fazê-lo | rax, 5, [result] |
Algumas instruções têm um operando (como inc rax para adicionar 1). Algumas têm dois (como mov rax, 5). Algumas têm três (como add rax, rbx, rcx em algumas arquiteturas).
Experimente você mesmo
Esta lição não inclui um desafio de código.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Fundamentos
1A Máquina
O que é CPUMemóriaRegistradores vs MemóriaComo as instruções funcionamPadrão de Dois ArquivosA Arquitetura x86-64Pratique por conta própria: Playground de Assembly