🚀 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:
- A Memória RAM (um array de números).
- Os Registradores (variáveis simples).
- O Ciclo de Instrução (um loop
whileque 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
1diz para carregar o próximo número (5) na gaveta. - O
2diz para somar o próximo número (10) na gaveta. - O
3diz 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:
| Passo | instrucao | ACC (Gaveta) | PC (Próxima posição) |
|---|---|---|---|
| Início | - | 0 | 0 |
| Volta 1 | 1 | 5 | 2 |
| Volta 2 | ? | ? | ? |
| Volta 3 | ? | ? | ? |
Complete os pontos de interrogação!
7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)
- Faça o Commit: No GitHub Desktop, digite a mensagem (ex:
Finaliza Capítulo 19 Hardware) e clique em Commit to main. - 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:
| Passo | instrucao | ACC (Gaveta) | PC (Próxima posição) |
|---|---|---|---|
| Início | - | 0 | 0 |
| Volta 1 | 1 | 5 | 2 |
| Volta 2 | 2 | 15 () | 4 |
| Volta 3 | 3 | 15 | 5 (Loop para) |