🚀 Projeto 20 – Projeto Capstone: ULA de 8 Bits em Python
🎯 Objetivo
Construir o simulador completo da Unidade Lógica e Aritmética (ULA) de 8 bits, integrando decodificação de instruções, registradores de entrada/saída e registrador de sinalizadores (Flags: Zero, Carry, Negative, Overflow).
📋 Requisitos do Projeto
- Suportar 8 operações:
ADD,SUB,AND,OR,XOR,NOT,SHL(Shift Left),SHR(Shift Right). - Atualizar dinamicamente o registrador de Flags (
Z,C,N,V). - Interface interativa via terminal exibindo entradas em Hexadecimal, Binário e Decimal.
💡 Código do Simulador ULA Capstone
class ULACapstone8Bits:
def __init__(self):
self.a = 0
self.b = 0
self.resultado = 0
self.flags = {'Z': 0, 'C': 0, 'N': 0, 'V': 0}
def executar(self, a: int, b: int, opcode: str):
self.a = a & 0xFF
self.b = b & 0xFF
self.flags = {'Z': 0, 'C': 0, 'N': 0, 'V': 0}
if opcode == "ADD":
res = self.a + self.b
self.resultado = res & 0xFF
self.flags['C'] = 1 if res > 0xFF else 0
elif opcode == "SUB":
res = self.a - self.b
self.resultado = res & 0xFF
self.flags['C'] = 1 if self.a < self.b else 0
elif opcode == "AND":
self.resultado = self.a & self.b
elif opcode == "OR":
self.resultado = self.a | self.b
elif opcode == "XOR":
self.resultado = self.a ^ self.b
elif opcode == "NOT":
self.resultado = (~self.a) & 0xFF
elif opcode == "SHL":
res = self.a << 1
self.resultado = res & 0xFF
self.flags['C'] = 1 if (self.a & 0x80) else 0
elif opcode == "SHR":
self.resultado = (self.a >> 1) & 0xFF
self.flags['C'] = 1 if (self.a & 0x01) else 0
self.flags['Z'] = 1 if self.resultado == 0 else 0
self.flags['N'] = 1 if (self.resultado & 0x80) else 0
return self.resultado, self.flags
# Execução do Capstone
ula = ULACapstone8Bits()
res, flags = ula.executar(0b11001000, 0b00110100, "ADD")
print(f"Resultado ULA: {bin(res)} | Flags: {flags}")