Fallunterscheidungen
Einbettung von Bedingung und Anweisungsfolgen
Wir betrachten Fallunterscheidungen der Form:
if [bed]:
[anw_true]
else:
[anw_false]
end#
Mit bed wird hier die Bedingung beschrieben. Mit anw_true bzw. anw_false werden die Anweisungssequenzen für die beiden Fälle bezeichnet.
Wir setzen voraus, dass bereits Assembler-Code für die Bedingung und für die beiden Anweisungssequenzen vorliegen. Mit c_bed wird der Assembler-Code für die Bedingung beschrieben, mit c_anw_true bzw. c_anw_false der Assembler-Code für die Anweisungssequenzen.
Bei der Übersetzung einer Fallunterscheidung werden jetzt die bereits existierenden Code-Schnipsel benutzt, um das Code-Schnipsel für die gesamte Fallunterscheidungsanweisung zu erzeigen.
# c_if
# benutzt: c_bed, c_anw_true, c_anw_false
# Hilfsvariable: h
# Code für die Bedingung; Ergebnis in Hilfsvariable h
c_bed
# Ergebnis testen
tst h
jmp (+2)
jmp (+(Länge(c_anw_true)+2)) # zum false-Code
c_anw_true
jmp (+(Länge(c_anw_false)+1)) # über den false-Code
c_anw_false
# h = 0
tst h
jmp (+2)
jmp (+3)
dec h
jmp (-4)
Teste das Code-Schnipsel.