i

Zuweisungen

a = n

Hier muss zunächst dafür gesorgt werden, dass der Inhalt von Register a geleert wird. Anschließend wird n mal (n eine natürliche Zahl) Register a inkrementiert.

# c_zuw_a_gleich_n
# Parameter: a
# Hilfsvariable: 
# a = 0
tst a
jmp (+2)
jmp (+3)
dec a
jmp (-4)
# n mal inc a
inc a
...
inc a

Teste das Code-Schnipsel.

a = b

Die Übersetzung solcher Zuweisungen könnte nach folgendem Verfahren ablaufen.

{a: III; b: IIII}
eine Hilfsvariable h erzeugen
{a: III; b: IIII; h: }
Register a leeren
{a:  ; b: IIII; h: }
transportiere den Inhalt von Register b in Register a und das Hilfsregister h
{a: IIII; b: ; h: IIII}
transportiere den Inhalt von Register h zurück in Register b
{a: IIII; b: IIII; h: }

Erzeuge das zugehörige Code-Schnipsel und teste es.

a = b + n

Ergänze die Verfahrensbeschreibung und erzeuge das zugehörige Code-Schnipsel.

{a: III; b: IIII}
eine Hilfsvariable h erzeugen
{a: III; b: IIII; h: }
Register a leeren
{a:  ; b: IIII; h: }
transportiere den Inhalt von Register b in Register a und das Hilfsregister h
{a: IIII; b: ; h: IIII}
transportiere den Inhalt von Register h zurück in Register b
{a: IIII; b: IIII; h: }
inkrementiere Register a n-mal
{a: IIIII...I; b: IIII; h: }

a = b - n

Gehe analog zum Fall a = b + n vor.

a = b + c

Dieser Fall soll ganz allgemein gelöst werden. Es soll also auch zulässig sein, dass alle vorkommenden Variablen gleich sind: a = a + a.

Benutze folgende Idee: Erzeuge Hilfsvariablen h_b für b und h_c für c. Kopiere b nach h_b und c nach h_c. Leere den Inhalt von a. Transportiere den Inhalt von h_b und von h_c nach a.

Entwickle ein passendes Code-Schnipsel und teste es gründlich.

a = b - c

Gehe analog zum Fall a = b + c vor.

Suche

v
7.4.2.3.4.1
www.inf-schule.de/rechner/compiler/uebersetzung/erzeugung_code/schablonen/zuweisungen
www.inf-schule.de/7.4.2.3.4.1

Rückmeldung geben