Projet-Systemes-Informatiques/post-process.py
2023-05-12 15:57:55 +02:00

95 lines
2.5 KiB
Python

opToBinOP = {
"ADD": 1,
"MUL": 2,
"SUB": 3,
"DIV_INT": 4,
"COP": 5,
"AFC": 6,
"JMP": 7,
"JMF": 8,
"INF": 9,
"SUP": 10,
"EQ": 11,
"PRI": 12,
"AND": 13,
"OR": 14,
"NOT": 15
}
def convertToRegister(s):
l = []
match s[0]:
case "ADD":
l.append("LOAD R0 "+s[2])
l.append("LOAD R1 "+s[3])
l.append("ADD R0 R0 R1")
l.append("STORE "+s[1]+" R0")
case "MUL":
l.append("LOAD R0 "+s[2])
l.append("LOAD R1 "+s[3])
l.append("MUL R0 R0 R1")
l.append("STORE "+s[1]+" R0")
case "SUB":
l.append("LOAD R0 "+s[2])
l.append("LOAD R1 "+s[3])
l.append("SUB R0 R0 R1")
l.append("STORE "+s[1]+" R0")
case "DIV_INT":
l.append("LOAD R0 "+s[2])
l.append("LOAD R1 "+s[3])
l.append("DIV R0 R0 R1")
l.append("STORE "+s[1]+" R0")
case "COP":
l.append("LOAD R0 "+s[2])
l.append("STORE "+s[1]+" R0")
case "AFC":
l.append("AFC R0 "+s[2])
l.append("STORE "+s[1]+" R0")
case "JMP":
pass
case "JMF":
pass
case "INF":
l.append("LOAD R0 "+s[2+inc])
l.append("LOAD R1 "+s[3+inc])
l.append("INF R2 R0 R1")
case "SUP":
l.append("LOAD R0 "+s[2+inc])
l.append("LOAD R1 "+s[3+inc])
l.append("SUP R2 R1 R0")
case "EQ":
l.append("LOAD R0 "+s[2+inc])
l.append("LOAD R1 "+s[3+inc])
l.append("EQ R2 R1 R0")
case "PRI":
l.append("PRI "+s[2+inc])
case "AND":
l.append("LOAD R0 "+s[2+inc])
l.append("LOAD R1 "+s[3+inc])
l.append("AND R2 R0 R1")
case "OR":
l.append("LOAD R0 "+s[2+inc])
l.append("LOAD R1 "+s[3+inc])
l.append("OR R2 R0 R1")
case "NOT":
l.append("LOAD R0 "+s[2+inc])
l.append("NOT R2 R0")
''' R2 contiendra la valeur qui dit s'il faut sauter ou non'''
return l
fileInput = open("asm", "r")
ASMLines = list(map(lambda e: e.rstrip("\n"), fileInput.readlines()))
print(ASMLines)
finalCode = []
for i, l in enumerate(ASMLines):
items = l.split(" ")
finalCode.extend(convertToRegister(items))
# idée pour les jumps : quand on voit un jump à la ligne tant on peut ajouter un label là-bas
# - trucs en registre
# - décaler les Jumps
# - COP -> OPCode