-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathasm.py
60 lines (50 loc) · 1.5 KB
/
asm.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
#!/usr/bin/env python3
def runLittleMan(mem):
# Initialiser
ac = 0
pc = 0
running = True
# Kjør instruksjonssyklus
while running:
# Fetch
instr = mem[pc]
pc += 1
# Execute
if instr // 100 == 1: # ADD
ac += mem[instr % 100]
elif instr // 100 == 2: # SUB
ac -= mem[instr % 100]
elif instr // 100 == 3: # STA
mem[instr % 100] = ac
elif instr // 100 == 5: # LDA
ac = mem[instr % 100]
elif instr // 100 == 6: # BRA
pc = instr % 100
elif instr // 100 == 7: # BRZ
if ac == 0:
pc = instr % 100
elif instr // 100 == 8: # BRP
if ac > 0:
pc = instr % 100
elif instr == 901: # INP
ac = int(input('Input: '))
elif instr == 902: # OUT
print(ac)
elif instr == 000: # HLT
running = False
else: # ERROR
print('Error')
running = False
# Les inn et tall og skriv det ut igjen
demo1 = [ 901, 902, 0 ]
# Les inn to tall og skriv ut summen
demo2 = [ 901, 306, 901, 106, 902, 0, 0 ]
# Demo ... hva er dette?
demo3 = [ 505, 902, 105, 305, 601, 1 ]
# Les inn maxverdi og skriv ut Fibonaccitallene mindre eller lik maxverdi
demo4 = [ 901, 321, 518, 902, 519,
902, 118, 320, 221, 817,
520, 902, 519, 318, 520,
319, 606, 0, 1, 1,
0, 0]
runLittleMan(demo1)