Assembler erweitert
This commit is contained in:
38
asm/asm02.py
38
asm/asm02.py
@@ -7,7 +7,7 @@
|
||||
d. HACK-Code erzeugen
|
||||
'''
|
||||
|
||||
import sys
|
||||
import sys, os
|
||||
from pathlib import Path
|
||||
import re
|
||||
from icecream import ic
|
||||
@@ -90,26 +90,48 @@ def searchSymbols(asm):
|
||||
ist Variable @x ein int, dann ohne @ in die Symboltable übernehmen
|
||||
'''
|
||||
#ic(asm)
|
||||
i = 0
|
||||
i = 16
|
||||
for line in asm:
|
||||
if line.startswith('@'):
|
||||
ic (i, " ",line[1:])
|
||||
#ic (i, " ",line[1:])
|
||||
if line[1:].isdigit():
|
||||
ic(line[1:], " ist ein int")
|
||||
|
||||
|
||||
if line not in symboltable:
|
||||
addtoSymboltable(line, int(line[1:]))
|
||||
elif line not in symboltable:
|
||||
#ic("Symbol nicht in Table")
|
||||
addtoSymboltable(line, i)
|
||||
i = i+1
|
||||
|
||||
def ciinstruction():
|
||||
|
||||
|
||||
|
||||
def addtoSymboltable(key,value):
|
||||
ic(key, value)
|
||||
symboltable[key]=value
|
||||
|
||||
|
||||
def createAsmFile():
|
||||
datename = os.path.splitext(os.path.basename(filename))[0]+".hack"
|
||||
ic(datename)
|
||||
f = open(datename,"w")
|
||||
for line in asm:
|
||||
if line in symboltable:
|
||||
f.write('{0:016b}'.format(symboltable[line]) + "\n")
|
||||
else:
|
||||
#M=D
|
||||
f.write('1111111111111111\n')
|
||||
f.close()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
#filename = sys.argv[1]
|
||||
filename = "Rect.asm"
|
||||
filename = sys.argv[1]
|
||||
#filename = "Pong.asm"
|
||||
symboltable = createSymboltable()
|
||||
asm = load_asm_file(filename)
|
||||
label_to_symboltable(asm)
|
||||
searchSymbols(asm)
|
||||
createAsmFile()
|
||||
|
||||
#print("Symtable = ",symboltable)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user