-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathspotmap.py
54 lines (45 loc) · 1.05 KB
/
spotmap.py
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
class MemSpot:
"""
Represents memory spot
Absolute for variables in .data section
Relative from base pointer for local function variables
"""
def __init__(self, base, offset=None):
self._base = base
self._offset = offset
@property
def asm_str(self):
if type(self._base) == RegSpot:
return f'{bp.name}, #{self._offset}'
else:
return f'{self._base}'
class RegSpot:
"""Register spot"""
def __init__(self, name):
self._name = name
def __repr__(self):
return f'Reg: {self._name}'
@property
def asm_str(self):
return self._name
@property
def reg(self):
return self._name
@property
def name(self):
return self._name
r0 = RegSpot('r0')
r1 = RegSpot('r1')
r2 = RegSpot('r2')
r3 = RegSpot('r3')
r4 = RegSpot('r4')
r5 = RegSpot('r5')
r6 = RegSpot('r6')
r7 = RegSpot('r7')
r8 = RegSpot('r8')
r9 = RegSpot('r9')
r10 = RegSpot('r10')
r11 = RegSpot('r11')
bp = RegSpot('r12')
sp = RegSpot('sp')
lr = RegSpot('lr')