-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsymbol_manager.py
More file actions
31 lines (27 loc) · 897 Bytes
/
symbol_manager.py
File metadata and controls
31 lines (27 loc) · 897 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class SymbolManager:
symbols: dict[str, int]
def __init__(self):
self.symbols = {
'SP': 0,
'LCL': 1,
'ARG': 2,
'THIS': 3,
'THAT': 4,
'SCREEN': 0x4000,
'KBD': 0x6000
}
for i in range(0, 16):
self.symbols[f'R{i}'] = i
def register_symbol(self, symbol: str, address: int = -1):
if (symbol not in self.symbols) or (self.symbols[symbol] is -1):
# never overwrite label(instruction) address
self.symbols[symbol] = address
def address_resolution(self):
address = 16
for symbol in self.symbols:
if self.symbols[symbol] != -1:
continue
self.symbols[symbol] = address
address += 1
def get_int_address(self, symbol: str) -> int:
return self.symbols[symbol]