🚀 Capítulo 19: Projeto Final Parte 1: Simulador de CPU (Tema: Tron)

NOTE

Este capítulo inicia o projeto final do curso de Hardware e Compiladores. Você vai criar a lógica de um simulador de CPU vivendo dentro do mundo digital de Tron!


1. 🎯 Objetivo da Aula

Aplicar os conceitos de arquitetura de computadores e ciclo de instrução para criar a lógica de um Simulador de CPU simples em pseudocódigo ou C++.

2. 🏢 O Cenário Prático (Seu Desafio)

No filme Tron, o protagonista é digitalizado e vai viver dentro dos circuitos do computador. Ele vê os programas agindo como pessoas e as instruções correndo pelas ruas como feixes de luz. Para ajudar a libertar o sistema do controle do Master Control Program (MCP), você vai construir um simulador que mostra exatamente como uma CPU executa as ordens.

Você deve simular:

  1. A Memória RAM (um array de números).
  2. Os Registradores (variáveis simples).
  3. O Ciclo de Instrução (um loop while que busca, decodifica e executa).

🧠 Fundamentos: A Teoria Traduzida

Para criar nosso simulador, vamos definir uma linguagem de máquina simplificada com apenas 3 comandos (instruções):

  • Código 1: Carregar valor na gaveta (Registrador).
  • Código 2: Somar valor na gaveta.
  • Código 3: Parar o programa (Halt).

Nosso programa na “Memória RAM” será uma lista de números assim: [1, 5, 2, 10, 3].

  • O 1 diz para carregar o próximo número (5) na gaveta.
  • O 2 diz para somar o próximo número (10) na gaveta.
  • O 3 diz para parar. Ao final, o valor na gaveta deve ser !

4. 📖 Exemplo Guiado: O Esqueleto do Simulador

Aqui está o esqueleto em C++ de como funciona o coração do nosso simulador (O Ciclo de Instrução):

int RAM[] = {1, 5, 2, 10, 3}; // Nosso programa
int PC = 0;                    // Contador de Programa
int ACC = 0;                   // Acumulador (Nossa gaveta)
bool rodando = true;
 
while (rodando) {
    int instrucao = RAM[PC]; // 1. BUSCA
    PC++; // Avança para o próximo dado
 
    if (instrucao == 1) { // 2. DECODIFICA E EXECUTA
        ACC = RAM[PC]; // Carrega o valor
        PC++;
    }
    else if (instrucao == 2) {
        ACC += RAM[PC]; // Soma o valor
        PC++;
    }
    else if (instrucao == 3) {
        rodando = false; // Para o programa
    }
}

5. 🛠️ Prática Obrigatória: Rastreando o Código

Usando o esqueleto do simulador acima e o programa na RAM: [1, 5, 2, 10, 3]. Preencha a tabela abaixo mostrando o valor das variáveis a cada passo do loop while:

PassoinstrucaoACC (Gaveta)PC (Próxima posição)
Início-00
Volta 1152
Volta 2???
Volta 3???

Complete os pontos de interrogação!


7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)

  1. Faça o Commit: No GitHub Desktop, digite a mensagem (ex: Finaliza Capítulo 19 Hardware) e clique em Commit to main.
  2. Envie para a Nuvem (Push): Clique em Push origin.

8. 📂 Estrutura de Pastas

mod_14_hardware_e_compiladores/
├── capitulos/
│   ├── capitulo_19_projeto_p1.md
│   └── codigos/
│       └── cap19/
│           └── simulador.cpp

💡 Checkpoint de Lógica

Este simulador é simples, mas processadores reais funcionam exatamente assim, apenas com centenas de instruções a mais e rodando bilhões de vezes mais rápido!

10. 🔥 Desafio de Fixação

Adicione mentalmente uma nova instrução de código 4 que SUBTRAI o valor em vez de somar. Como ficaria o código do else if dessa nova instrução?

🔑 Gabarito de Código/Fórmulas

Gabarito da Prática Obrigatória:

PassoinstrucaoACC (Gaveta)PC (Próxima posição)
Início-00
Volta 1152
Volta 2215 ()4
Volta 33155 (Loop para)

Capitulo Anterior | Proximo Capitulo