-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmemoryaccess1.py
71 lines (67 loc) · 2.89 KB
/
memoryaccess1.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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import globalss
def memoryaccess(reg):
# global memory_array
# global PC_execution
# global register
# reg[rd,rs1,rs2,imm,type,oriname,execute_result]
if reg[4] == 'R' or reg[4] == 'I_1' or reg[4] == 'SB' or reg[4] == 'U_lui' or reg[4] == 'U_auipc' or reg[4] == 'UJ':
reg.append(-1)
return reg
elif reg[4] == 'I_2':
print(reg[6])
if reg[1] == 2:
reg.append(globalss.stack_array[reg[6]])
else:
reg.append(globalss.memory_array[reg[6]])
return reg
elif reg[4] == 'I_3':
reg.append(-1)
# globalss.PC_execution=globalss.PC_execution+reg[6]
elif reg[4] == 'S':
reg.append(-1)
if reg[1] == 2:
pos = reg[6]
if reg[5] == 'sb':
globalss.stack_array[pos] = globalss.register[reg[2]]
elif reg[5] == 'sw':
globalss.stack_array[pos] = globalss.register[reg[2]]
globalss.stack_array[pos + 1] = 0
globalss.stack_array[pos + 2] = 0
globalss.stack_array[pos + 3] = 0
elif reg[5] == 'sd':
globalss.stack_array[pos] = globalss.register[reg[2]]
globalss.stack_array[pos + 1] = 0
globalss.stack_array[pos + 2] = 0
globalss.stack_array[pos + 3] = 0
globalss.stack_array[pos + 4] = 0
globalss.stack_array[pos + 5] = 0
globalss.stack_array[pos + 6] = 0
globalss.stack_array[pos + 7] = 0
elif reg[5] == 'sh':
globalss.stack_array[pos] = globalss.register[reg[2]]
globalss.stack_array[pos + 1] = 0
else:
pos = int(reg[6]) - 65536
if reg[5] == 'sb':
globalss.memory_array[pos] = globalss.register[reg[2]]
elif reg[5] == 'sw':
globalss.memory_array[pos] = globalss.register[reg[2]]
globalss.memory_array[pos + 1] = 0
globalss.memory_array[pos + 2] = 0
globalss.memory_array[pos + 3] = 0
elif reg[5] == 'sd':
globalss.memory_array[pos] = globalss.register[reg[2]]
globalss.memory_array[pos + 1] = 0
globalss.memory_array[pos + 2] = 0
globalss.memory_array[pos + 3] = 0
globalss.memory_array[pos + 4] = 0
globalss.memory_array[pos + 5] = 0
globalss.memory_array[pos + 6] = 0
globalss.memory_array[pos + 7] = 0
elif reg[5] == 'sh':
globalss.memory_array[pos] = globalss.register[reg[2]]
globalss.memory_array[pos + 1] = 0
# elif reg[4]=='jal':
# store the return address in ra register i.e store PC_execution+4
# then PC_execution=PC_execution+ imm
return reg