Wiederholungen
Einbettung von Bedingung und Anweisungsfolge
Wir betrachten Wiederholungen der Form:
while [bed]:
[anw]
end#
Mit bed wird hier die Bedingung beschrieben, mit anw die Anweisungssequenz des Schleifenkörpers.
Wir setzen voraus, dass bereits Assembler-Code für die Bedingung und für die Anweisungssequenz vorliegen. Mit c_bed wird der Assembler-Code für die Bedingung beschrieben, mit c_anw der Assembler-Code für die Anweisungssequenz.
Bei der Übersetzung einer Wiederholung werden jetzt die bereits existierenden Code-Schnipsel benutzt, um das Code-Schnipsel für die gesamte Wiederholungsanweisung zu erzeigen.
# c_while
# benutzt: c_bed, c_anw
# Hilfsvariable: h
# Code für die Bedingung; Ergebnis in Hilfsvariable h
c_bed
# Ergebnis testen
tst h
jmp (+2)
jmp (+(Länge(c_anw)+2)) # über den anw-Code
c_anw
jmp (-(Länge(c_anw)+Länge(c_bed)+3)) # zurück zum bed-Code
# h = 0
tst h
jmp (+2)
jmp (+3)
dec h
jmp (-4)
Teste das Code-Schnipsel.