A CPU

Como o computador funciona

Professor: Gabriel Soares Baptista

Fundamentos da CPU

A Base do Compilador

Antes de entender o compilador, precisamos entender a Unidade de Processamento Central (CPU).

Utilizaremos uma abstração fundamental: Máquina de Estados Finitos (FSM).

  • Definição: Modelo matemático com estados limitados e transições.
  • Comportamento: O sistema ocupa um estado por vez.
  • Transição: Ocorre via gatilho/evento específico.
  • Aplicações: De semáforos a protocolos de rede e IA.

Uma CPU Didática: MIPS

Utilizaremos a arquitetura MIPS (32 bits) como modelo. Ela opera com um Pipeline de 5 etapas (linha de montagem).

Estágio 1: Busca da Instrução

Program Counter (PC)

  • Registrador que armazena o endereço da próxima instrução.
  • Inicia geralmente em zero.

A Matemática do Endereçamento

Em arquiteturas de 32 bits, uma palavra (WORD) tem 4 bytes. O PC é incrementado em 4 para apontar para a próxima sequência:

$$ 4 \text{ bytes} \times 8 \text{ bits} = 32 \text{ bits} $$

Incremento

O somador adiciona a constante 4 ao valor atual do PC a cada ciclo.

Estágio 2: Decodificação

A CPU interpreta o que a instrução (bits) significa.

ISA (Instruction Set Architecture)

Conjunto de instruções do processador (ex: x86, ARM, RISC-V). Código: ADD $t0, $t1, $t2 $\to$ Hardware: 000000...

Funções deste estágio:

  1. Identificar a operação: Via tabela verdade na Unidade de Controle.
  2. Acessar Registradores: Ler dados do banco de registradores (MIPS tem 32).
  3. Extensão de Sinal: Expandir constantes pequenas para 32 bits.

Estágio 3: Execução

A mágica acontece na ALU (Arithmetic Logic Unit).

Controle de Fluxo (Branches)

Saltos condicionais dependem de comparações (ex: if (i == 10)).

  1. CPU subtrai 10 de i.
  2. Se resultado for 0, ativa a Flag Zero.
  3. A flag avisa para não seguir para PC + 4.
  4. Carrega-se um novo endereço no PC (Desvio).

Estágios 4 e 5: Memória e Escrita

Estágio 4: Memória

  • Acessa a RAM apenas se a instrução for:
    • Leitura (LOAD)
    • Escrita (STORE)

Estágio 5: Write Back

  • Grava o resultado do cálculo (da ALU) de volta no banco de registradores.
Pipeline

Os registradores de estágio (blocos verdes no diagrama inicial) salvam resultados intermediários, permitindo execução simultânea de múltiplas instruções.

Questão de Fixação - 1 / 2

1. Qual é a função do registrador Program Counter (PC) e por que em várias arquiteturas de 32 bits, como o MIPS, ele é incrementado em 4 bytes a cada instrução sequencial?

Nossa Máquina Virtual (VM)

Focaremos em uma versão simplificada, similar à JVM, baseada em Pilha.

Diferenças do MIPS

  • Foco no registrador SP (Stack Pointer).
  • O PC ainda existe.
  • A VM gerencia a lógica de controle complexa.

Gerenciamento de Memória na VM

1. Memória Convencional (RAM)

  • Dados grandes/arquivos.
  • Acesso via LOAD e STORE.
  • Exige endereços específicos.

2. A Pilha (Stack)

  • Crucial para o compilador.
  • Operações: PUSH (empilhar) e POP (desempilhar).

Por que usar uma Máquina de Pilha?

O problema dos Registradores

Trabalhar com número restrito de registradores exige alocação de registradores (tarefa complexa).

A Vantagem da Pilha

  • Simplifica a geração de código.
  • Apenas empilhamos valores e operamos no topo.
  • Remove a necessidade de gerenciar "qual dado vai para qual lugar".
  • Permite foco na lógica de tradução.

O Fluxo Completo

Integração entre Código, Memória e CPU na nossa VM:

  • PC aponta para instrução atual (ex: ADD).
  • PC incrementa automaticamente ou sofre salto (Loop/Função).

Questão de Fixação - 2 / 2

2. Explique a principal diferença de gerenciamento de dados entre uma arquitetura baseada em registradores, como o MIPS, e a arquitetura baseada em pilha que utilizaremos na nossa máquina virtual.

3. Em qual situação o registrador PC não segue o seu incremento automático sequencial e como isso se relaciona com a execução de desvios no código?

Próximos Passos

Próximo Capítulo: Etapas do processo de compilação

  • Análise em alto nível do pipeline de compilação.
  • Entendimento das etapas específicas.
  • Início da escrita do código do nosso compilador.