Erzeugung von BonsaiAssembler-Code

Vorgehensweise am Beispiel

Die Vorgehensweise soll an folgendem Beispielprogramm verdeutlicht werden.

# x = 2
inc x
inc x
# y = 3
inc y
inc y
inc y
# p = 0
# while ...
# y != 0?
tst y
jmp (+2)
jmp (+16)
# p = p + x
# x -> p, _h0
tst x
jmp (+2)
jmp (+5)
dec x
inc p
inc _h0
jmp (-6)
# _h0 -> x
tst _h0
jmp (+2)
jmp (+4)
dec _h0
inc x
jmp (-5)
# y = y - 1
dec y
# ... while
jmp (-17)
hlt
###
[x=0]
[y=0]
[p=0]
[_h0=0]

Schritt 1: Registeradressen statt Variablen

Die Variablen werden Registern mit festen Adressen zugeordnet. Es bietet sich an, die Variablen der Reihe nach den Registern 0, 1, 2 usw. zuzuordnen.

0: x
1: y
2: p
3: _h0

Die symbolischen Registeradressen können jetzt durch reale Adressen ersetzt werden

# x = 2
inc 0
inc 0
# y = 3
inc 1
inc 1
inc 1
# p = 0
# while ...
# y != 0?
tst 1
jmp (+2)
jmp (+16)
# p = p + x
# x -> p, _h0
tst 0
jmp (+2)
jmp (+5)
dec 0
inc 2
inc 3
jmp (-6)
# _h0 -> x
tst 3
jmp (+2)
jmp (+4)
dec 3
inc 0
jmp (-5)
# y = y - 1
dec 1
# ... while
jmp (-17)
hlt
#0
#0
#0
#0

Schritt 2: Von relativen zu absoluten Sprungadressen

Die Befehle des Assemblerprogramms werden jetzt durchnummeriert. Alle Kommentare (außer den Beschreibungen der Registerinhalte) werden hierzu weggelassen.

Die relativen Sprungadressen können jetzt durch alsolute Sprungadressen ersetzt werden. Man erhält das folgendem Programm.

0: inc 0
1: inc 0
2: inc 1
3: inc 1
4: inc 1
5: tst 1
6: jmp 8   # (+2)
7: jmp 23  # (+16)
8: tst 0
9: jmp 11  # (+2)
10: jmp 15 # (+5)
11: dec 0
12: inc 2
13: inc 3
14: jmp 8  # (-6)
15: tst 3
16: jmp 18 # (+2)
17: jmp 21 # (+4)
18: dec 3
19: inc 0
20: jmp 15 # (-5)
21: dec 1
22: jmp 5  # (-17)
23: hlt
#0
#0
#0
#0

Jetzt müssen nur noch die erklärenden Kommentare weggelassen werden, um das fertige BonsaiAssembler-Programm zu erhalten.

0: inc 0
1: inc 0
2: inc 1
3: inc 1
4: inc 1
5: tst 1
6: jmp 8
7: jmp 23
8: tst 0
9: jmp 11
10: jmp 15
11: dec 0
12: inc 2
13: inc 3
14: jmp 8
15: tst 3
16: jmp 18
17: jmp 21
18: dec 3
19: inc 0
20: jmp 15
21: dec 1
22: jmp 5
23: hlt
#0
#0
#0
#0

Aufgabe 1

Benutze das Simulationsprogramm, um BonsaiAssembler-Programme zu erzeugen.

Demoprogramm[1]

Quellen

X

Fehler melden

X

Suche