📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados em Módulo 01: Fundamentos da Computação. Recomendado revisar antes de começar.
v1.0 — Portas Lógicas, Circuitos Aritméticos e Aritmética Binária
Trilha de Especialização Pedagógica — Projeto 1 de 4
- ➡️ v1 (este): Fundamentos de Hardware · Simulação de ULA 8-bit · Flags de Status · Conversor de Bases
- v2: Máquina de Turing · Autômatos Finitos Determinísticos (DFA)
- v3: Pipeline RISC-V · Decodificação de Instruções
- v4: Emulador de CPU 8-bit Completo com Memória RAM e Barramento
🎓 Nível Profissional Simulado: Estagiário de Engenharia de Software. Todo programador de alto nível precisa entender o que acontece quando o código vira zeros e uns. Saber como a ULA calcula somas em complemento de dois e lida com Overflow e Carry evita bugs clássicos de estouro de memória em produção.
—`
Construir um Simulador de Unidade Lógica e Aritmética (ULA) de 8 bits e um conversor de bases numéricas (Binário, Octal, Decimal e Hexadecimal), implementando operações booleanas elementares (AND, OR, XOR, NOT), soma em complemento de dois e cálculo atômico de flags de status (Zero, Negative, Carry e Overflow).
—`
“Preciso de um simulador didático para o laboratório de hardware. Os alunos precisam inserir dois operandos em formato decimal, binário ou hexadecimal, selecionar a operação da ULA (ADD, SUB, AND, OR, XOR) e visualizar tanto o resultado em todas as bases quanto o estado exato das 4 flags de registradores (Zero, Negative, Carry, Overflow). O sistema não pode usar operadores prontos de alto nível sem controle de 8 bits.”
| ID | Tipo | Descrição | Origem no Briefing |
|---|---|---|---|
| RF01 | Funcional | Executar operações aritméticas (Soma, Subtração) em registradores de 8 bits (0 a 255). | “selecionar a operação da ULA” |
| RF02 | Funcional | Executar operações lógicas bit a bit (AND, OR, XOR, NOT). | “operações booleanas elementares” |
| RF03 | Funcional | Calcular e atualizar as 4 flags de status (Z, N, C, V) a cada operação. |
“estado exato das 4 flags” |
| RF04 | Funcional | Converter e exibir o resultado nas bases Decimal, Binária (8 bits) e Hexadecimal (2 dígitos). | “visualizar o resultado em todas as bases” |
| RNF01 | Não-Funcional | Operações bitwise puras com máscara de barramento 0xFF. |
Arquitetura de 8 bits |
| RNF02 | Não-Funcional | Código desacoplado e 100% testável via linha de comando (CLI). | Engenharia de Software |
—`
| ID | User Story | Prioridade |
|---|---|---|
| US01 | Como estudante, quero converter números entre Decimal, Binário e Hexadecimal para validar exercícios. | Alta |
| US02 | Como aluno, quero somar dois números binários e saber se houve estouro de Carry ou Overflow. | Alta |
| US03 | Como professor, quero executar operações lógicas bitwise para demonstrar circuitos lógicos. | Média |
| User Story | To Do | Doing | Done |
|---|---|---|---|
| US01 — Conversão de Bases | ✅ | ||
| US02 — Soma, Subtração & Flags | ✅ | ||
| US03 — Operações Lógicas Bitwise | ✅ |
—`
# Criar branch da funcionalidade
git checkout -b feature/US02-ula-bitwise-flags
# Executar o simulador
python src/ula_simulator.py
ULA8Bit com soma em complemento de dois e cálculo de flags Z/N/C/V.python -m unittest discover tests/| Checklist: [x] Sem dependências externas | [x] Máscara 0xFF aplicada | [x] ADR 001 documentada |
—`
src/ula_simulator.py)class ULA8Bit:
def __init__(self):
self.flag_zero = False
self.flag_negative = False
self.flag_carry = False
self.flag_overflow = False
def somar(self, a, b):
raw = a + b
res = raw & 0xFF
self.flag_zero = (res == 0)
self.flag_negative = bool(res & 0x80)
self.flag_carry = (raw > 0xFF)
self.flag_overflow = bool(~(a ^ b) & (a ^ res) & 0x80)
return res
—`
No seu editor/IDE, abra a pasta deste projeto (File > Open Folder) ou navegue via terminal:
cd fundamentos_01_ula_conversor
# Executar comandos específicos da tecnologia:
python main.py # ou npm run dev / ./gradlew build
[!TIP] Dica para execução a partir da raiz do repositório: Se você abriu o repositório completo no VS Code, basta navegar até a pasta antes de executar: cd proj_aplicacoes_full_stack/projetos/fundamentos_01_ula_conversor`
—`
# Teste de Overflow e Carry
assert ula.somar(255, 1) == 0 # Carry = True, Zero = True
assert ula.somar(127, 1) == 128 # Overflow = True (positivo virou negativo em 2's complement)
& 0xFF em todas as saídas de registradores.—`
- Todas as operações aritméticas e lógicas operam no limite de 8 bits.
- As 4 flags refletem com precisão o estado do registrador de status (SR).
- Conversor de bases integrado e funcional.
| ⬅️ Ver Todos os Projetos no Super-Hub | 🏠 Página Inicial do Portal |