Pular para conteúdo

🚀 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

  1. Suportar 8 operações: ADD, SUB, AND, OR, XOR, NOT, SHL (Shift Left), SHR (Shift Right).
  2. Atualizar dinamicamente o registrador de Flags (Z, C, N, V).
  3. 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}")