-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAssembler_emulator.py
136 lines (124 loc) · 4.12 KB
/
Assembler_emulator.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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
file = str(input("Unesite ime file-a: "))
file += ".txt"
redovi = []
with open(file, "r") as f:
for red in f:
redovi.append(red)
for i in range(len(redovi) - 1):
redovi[i] = redovi[i][:-1]
varijable = {}
varijabla = ""
broj_varijabli = int(input("Unesite broj varijabli u programu: "))
print()
for i in range(broj_varijabli):
ime_varijable = str(input("Unesite ime varijable: "))
vrijednost_varijable = int(input("Unesite vrijednost varijable: "))
varijable[ime_varijable] = vrijednost_varijable
print()
komande = ["LOAD", "LC", "STORE", "ADD", "BNEG", "SUB", "MUL", "DIV"]
linija_koda = 0
oznaka = ""
akumulator = 0
znak = 0
while True:
string = ""
if oznaka != "":
linija_koda = 0
while True:
while znak < len(redovi[linija_koda]) and redovi[linija_koda][znak] != " ":
string += redovi[linija_koda][znak]
znak += 1
if string == oznaka:
znak += 1
break
else:
znak = 0
string = ""
linija_koda += 1
if oznaka == "KRAJ":
break
oznaka = ""
string = ""
while znak < len(redovi[linija_koda]) and redovi[linija_koda][znak] != " ":
string += redovi[linija_koda][znak]
znak += 1
if string == "KRAJ" or oznaka == "KRAJ":
break
if string in komande:
znak += 1
if string == komande[0]:
akumulator = varijable[redovi[linija_koda][znak:]]
elif string == komande[1]:
akumulator = int(redovi[linija_koda][znak:])
elif string == komande[2]:
varijable[redovi[linija_koda][znak:]] = akumulator
elif string == komande[3]:
akumulator += varijable[redovi[linija_koda][znak:]]
elif string == komande[5]:
akumulator -= varijable[redovi[linija_koda][znak:]]
elif string == komande[6]:
akumulator *= varijable[redovi[linija_koda][znak:]]
elif string == komande[7]:
akumulator /= varijable[redovi[linija_koda][znak:]]
else:
if akumulator < 0:
oznaka = redovi[linija_koda][znak:]
znak = 0
else:
znak += 1
continue
if oznaka != "":
continue
linija_koda += 1
# try:
# string = ""
# if oznaka != "":
# while True:
# while znak != len(redovi[linija_koda]) and redovi[linija_koda][znak] != " ":
# string += redovi[linija_koda][znak]
# znak += 1
# if string == oznaka:
# znak += 1
# break
# else:
# znak = 0
# string = ""
# linija_koda += 1
#
# if oznaka == "KRAJ":
# break
#
# string = ""
# while redovi[linija_koda][znak] != " ":
# string += redovi[linija_koda][znak]
# znak += 1
#
# if string in komande:
# znak += 1
# if string == komande[0]:
# akumulator = varijable[redovi[linija_koda][znak:]]
# elif string == komande[1]:
# akumulator = int(redovi[linija_koda][znak:])
# elif string == komande[2]:
# varijable[redovi[linija_koda][znak:]] = akumulator
# elif string == komande[3]:
# akumulator += varijable[redovi[linija_koda][znak:]]
# else:
# if akumulator < 0:
# oznaka = redovi[linija_koda][znak:]
# znak = 0
# else:
# znak += 1
# continue
# if oznaka != "":
# continue
#
# linija_koda += 1
# finally:
# print("Kod nije ispravno napisan.")
# exit(1)
print("Akumulator:", akumulator)
print(varijable)
# for key, value in varijable:
# print(key, value, sep=": ")
izlaz = input('Pritisnite bilo koju tipku za izlaz.')