72 lines
1.8 KiB
Python
72 lines
1.8 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])
|
|
l.append("LOAD R1 "+s[3])
|
|
l.append("SUB R1 ")
|
|
|
|
|
|
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
|