import time
from machine import Pin
led_fetch = Pin(2, Pin.OUT)
led_decode = Pin(3, Pin.OUT)
led_execute = Pin(4, Pin.OUT)
def acender_led(etapa):
led_fetch.value(0)
led_decode.value(0)
led_execute.value(0)
if etapa == "FETCH":
led_fetch.value(1)
elif etapa == "DECODE":
led_decode.value(1)
elif etapa == "EXECUTE":
led_execute.value(1)
programa = [
"LOAD R0 10",
"LOAD R1 2",
"SUB R0 R1",
"LOAD R0 4",
"LOAD R1 3",
"MUL R0 R1",
"STORE R0 R2",
]
registradores = {
"R0": 0,
"R1": 0,
"R2": 0
}
pc = 0
while pc < len(programa):
print()
print("====================================")
acender_led("FETCH")
instrucao = programa[pc]
print("FETCH")
print("PC =", pc)
print("Instrucao:", instrucao)
time.sleep(1)
acender_led("DECODE")
partes = instrucao.split()
comando = partes[0]
print()
print("DECODE")
print("Comando:", comando)
time.sleep(1)
acender_led("EXECUTE")
print()
print("EXECUTE")
if comando == "LOAD":
reg = partes[1]
valor = int(partes[2])
registradores[reg] = valor
print("Carregando", valor, "em", reg)
elif comando == "ADD":
r1 = partes[1]
r2 = partes[2]
registradores[r1] = registradores[r1] + registradores[r2]
print(r1, "+", r2)
elif comando == "SUB":
r1 = partes[1]
r2 = partes[2]
registradores[r1] = registradores[r1] - registradores[r2]
print(r1, "-", r2)
elif comando == "MUL":
r1 = partes[1]
r2 = partes[2]
registradores[r1] = registradores[r1] * registradores[r2]
print(r1, "*", r2)
elif comando == "STORE":
origem = partes[1]
destino = partes[2]
registradores[destino] = registradores[origem]
print("Copiando", origem, "para", destino)
print()
print("REGISTRADORES")
print("R0 =", registradores["R0"])
print("R1 =", registradores["R1"])
print("R2 =", registradores["R2"])
print("====================================")
time.sleep(1)
pc += 1
print()
print("Fim do programa")