Erzeugung von Komfort-Assembler-Code
Übersetzungsschablonen
Bei der Erzeugung von Assembler-Code hat es sich bewährt, für immer wiederkehrende Verarbeitungsaufgaben Übersetzungsschablonen in Form von Code-Schnipseln zu erzeugen, die dann modular als Bausteine beim Übersetzen von MiniPython-Programmen verwendet werden könn. Diese Vorgehensweise soll an einem Beispiel erläutert werden.
Beispiel: Zuweisungen vom Typ a = a + b
Wir setzen hier voraus, dass a und b verschiedene Variablen sind.
Die Idee zur Umsetzung solcher Zuweisungen lässt sich informell so beschreiben:
{a: III; b: IIII} eine Hilfsvariable h erzeugen {a: III; b: IIII; h: } transportiere den Inhalt von Register b in Register a und das Hilfsregister h {a: IIIIIII; b: ; h: IIII} transportiere den Inhalt von Register h zurück in Register b {a: IIIIIII; b: IIII; h: }
In Kurzform läst sich das so beschreiben:
# c_zuw_a_gleich_a_plus_b # Parameter: a, b # Hilfsvariable: h b -> a, h h -> b
Der zugehörige Komfort-Assembler-Code sieht dann so aus.
Dieses Code-Schnipsel lässt sich jetzt immer in Zuweisungssituationen vom Typ a = a + b
verwenden, z.B. bei der Zuweisung p = p + x
.
Aufgabe 1
Teste den Komfort-Assembler-Code für Zuweisungen vom Typ a = a + b
.
Aufgabe 2
Entwickle (ggf. arbeitsteilig im Team) weitere Übersetzungsschablonen. Ideen hierzu werden in den Unterabschnitten vorgestellt.
Aufgabe 3
Verwende Übersetzungsschablonen bzw. passende Code-Schnipsel, um ein Komfort-Assemblerprogramm zu folgenden MiniPython-Programmen systematisch zu erzeugen.
Programm 1 (einfach)
Programm 2 (schwierig)