i

Ein Beispiel

Betrachte als Beispiel das folgende MiniPython-Programm:

x=2
y=3
z=x+y

Zu diesem Programm soll ein entsprechendes Bonsai-Assemblerprogramm erzeugt werden, das z.B. so aussehen könnte:

0: tst 0
1: jmp 3
2: jmp 5
3: dec 0
4: jmp 0
5: inc 0
6: inc 0
7: tst 1
8: jmp 10
9: jmp 12
10: dec 1
11: jmp 7
12: inc 1
13: inc 1
14: inc 1
15: tst 0
16: jmp 18
17: jmp 22
18: dec 0
19: inc 3
20: inc 4
21: jmp 15
22: tst 4
23: jmp 25
24: jmp 28
25: dec 4
26: inc 0
27: jmp 22
28: tst 1
29: jmp 31
30: jmp 35
31: dec 1
32: inc 3
33: inc 4
34: jmp 28
35: tst 4
36: jmp 38
37: jmp 41
38: dec 4
39: inc 1
40: jmp 35
41: tst 2
42: jmp 44
43: jmp 46
44: dec 2
45: jmp 41
46: tst 3
47: jmp 49
48: jmp 52
49: dec 3
50: inc 2
51: jmp 46
52: hlt

Vielleicht wirkt es schockierend, wie viele Zeilen Bonsai-Assembler aus drei Zeilen MiniPython-Code geworden sind. Dabei muss man allerdings zwei Dinge beachten:
  • Der Bonsai-Rechner macht seinem Namen alle Ehre und lässt wirklich nur minimalste Rechenoperationen (Erhöhen/Erniedrigen um 1) zu. Damit werden selbst Additionen und Subtraktionen komplexere Rechnungen. Wenn man dann noch will, dass die Werte der Variablen x und y bei der Rechnung erhalten bleiben (wie in Standard-Python), so funktioniert dies nur mit Hilfe von "Sicherheitskopien" der Variablen.
  • Das hier gezeigte Programm geht bei jeder einzelnen Zuweisungen "auf Nummer sicher" und setzt den Wert der Variable vor dem eigentlichen Zuweisen garantiert auf 0, selbst wenn man nach ein bisschen Nachdenken davon ausgehen kann, dass die Variable bereits vorher den Wert 0 hat. Aber "Nachdenken" ist nichts, was man gut automatisieren kann ...

Aufgabe 1

Versuche, das Bonsai-Assemblerprogramm so in Abschnitte zu zerlegen, dass jeder Abschnitt einer Zeile des MiniPython-Programms entspricht.

Aufgabe 2

Beschreibe für jeden der MiniPython-Befehle, wie sie in Bonsai umgesetzt sind. Falls dir das nicht leicht fällt oder sogar gar nicht funktioniert, beschreibe möglichst genau, wo die Schwierigkeiten liegen.

Suche

v
7.4.2.3.2
www.inf-schule.de/rechner/compiler/uebersetzung/erzeugung_code/beispiel

Rückmeldung geben