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 (+(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.

X

Fehler melden

X

Suche