import time
from machine import Pin
#Gabriel Carlos Barbosa 574074
# Memória de instruções
programa = [
"LOAD R0 5",
"LOAD R1 3",
"MUL R0 R1",
"STORE R0 R2"
]
# Registradores
registradores = {
"R0": 0,
"R1": 0,
"R2": 0
}
# Program Counter
pc = 0
while pc < len(programa):
print()
print("==============================")
# =========================
# FETCH
# =========================
instrucao = programa[pc]
Fled = Pin(20, Pin.OUT)
Fled.value(1)
print("FETCH")
print("PC =", pc)
print("Instrucao:", instrucao)
time.sleep(1)
Fled.value(0)
# =========================
# DECODE
# =========================
partes = instrucao.split()
comando = partes[0]
dled = Pin(19, Pin.OUT)
dled.value(1)
print()
print("DECODE")
print("Comando:", comando)
time.sleep(1)
dled.value(0)
# =========================
# EXECUTE
# =========================
print()
print("EXECUTE")
eled = Pin(18, Pin.OUT)
eled.value(1)
if comando == "LOAD":
registrador = partes[1]
valor = int(partes[2])
registradores[registrador] = valor
print("Carregando", valor, "em", registrador)
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, "x", 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)
eled.value(0)
# Próxima instrução
pc += 1