Umsetzen von Kontrollstrukturen
Umsetzen von Struktogrammen in ein PAP
Die If-Anweisungen
Ein
if
und
if-else
Konstrukt wie in
Abbildung 1 und
Abbildung 2 dargestellt
bedeutet, dass der If-Teil nur ausgeführt wird, wenn die Bedingung wahr ist. Ist die Bedingung nicht erfüllt, so wird der Else-Teils ausgeführt,
falls er vorhanden ist. Danach ist die If-Anweisung zu ende und es wird mit der nächsten Anweisung fortgefahren. In einem PAP benötigt man für
die Verzweigung eine Raute, welche abhängig von der Bedingung zum If-Teil (bei Erfüllung) bzw. zum Else-Teil (bei Nichterfüllung) verzweigt.
Nach Durchlauf der beiden Teile wird der getrennte Ausführungspfad wieder vereint.
 |
|
 |
Abb. 1: if |
|
Abb. 2: if-else |
Die Do-While-Schleife
Eine
do-while
-Schleife wird mindestens einmal durchlaufen. Am Ende der Schleife wird überprüft, ob ein weiterer Druchlauf erfolgt.
In einem PAP werden somit erst die Anweisungen im Schleifenrumpf durchlaufen und am Ende mit einer Verzweigung überprüft ob nochmal zum Anfang
der Schleife gesprungen wird oder ob die Schleife beendet ist.

Abb. 3: do-while Schleife
Die While-Schleife
Eine
while
-Schleife wird evtl. gar nicht druchlaufen. Dies liegt daran, dass hier zu Beginn der Schleife überprüft wird ob ein
weiterer Schleifendurchlauf erfolgt. Ist die Bedingung beim ersten Mal nicht erfüllt, wird die Schleife nie durchlaufen. Die maximale Anzahl an
Durchläufen ist unendlich (z.B. wenn die Bedingung
true
ist).
In einem PAP erreicht man das gleiche Verhalten, wenn man mit einer Verzweigung beginnt, welche bei nicht erfüllter Bedingung den Schleifenrumpf
überspringt. Nach jedem Durchlauf des Rumpfes springt die Schleife wieder an den Anfang der Schleife, also vor den Test eines weiteren Druchlaufs.

Abb. 4: while Schleife
Die For-Schleife
Da eine
for
-Schleife nichts anderes ist als eine
while
-Schleife, welche vor der Schleife einen Initialisierungsblock hat
und am Schleifenende einen zusätzlichen Anweisungsblock aufweist ist die Umsetzung einer solchen Schleife analog zu
while
-Schleife.
Abbildung 5 zeigt ein Struktogramm einer for-Schleife, so wie eine äquivalente while-Schleife als Struktogramm. Der zugehörige
PAP ist im Prinzip eine Umsetzung dieser

Abb. 5: for Schleife
Umsetzung von zusammengesetzten Bedingugen
In vielen Fällen ist die Bedingung anhand derer verzweigt wird komplexer. So müssen z.B. zwei Teilbedingugen erfüllt sein, d.h. ein Codeteil
wird nur dann ausgeführt, wenn Bedingung 1 und Bedingung 2 erfüllt sind. Ist eine der beiden nicht erfüllt, so wird das Programm an anderer Stelle
fortgesetzt.
Abbildung 6 zeigt auf der rechten Seite einen PAP mit einer zusammengesetzen Bedingung. Um diese in Assembler
umsetzten zu können ist es nötig diesen PAP so umzusetzten, dass eine Verzeweigung immer nur eine Bedingung beinhaltet. Bei einer Und-Verknüpfung
geschieht dies, indem man zuerst den ersten Teil überprüft. Ist diese Teilbedingung erfüllt, testet man die zweite Teilbedingung. Sind beide
Tests erfolgreich so wird der entsprechende Codeblock angesprungen. Schlägt einer der beiden Test fehl, so wird zum alternativen Codeblock gesprungen.

Abb. 6: Und-Verknüpfung
Eine Oder-Verknüpfung zwischen zwei Bedingungen wird ähnlich umgesetzt. Dies zeigt
Abbildung 7.
Hier wird die erste Teilbedingung überprüft, ist diese wahr, so wird sofort
der entsprechende Codeblock angesprungen. Schlägt der Test fehl, so wird die zweite Teilbedingung überprüft. Ist diese wahr so wird
ebenfalls der erste Codeblock angesprungen. Nur wenn beide Bedingungen nicht erfüllt sind wird der Alternative Codeblock angesprungen.

Abb. 7: Oder-Verknüpfung
Viele Bedingungen sind Kombinationen aus Und- und Oder-Verknüpfungen, wie z.B. in
Abbildung 8a. Um diese in einen PAP mit
atomaren Verzweigungen umzuwandeln geht man schrittweise vor. Zuerst wird in dem Beispiel von
Abbildung 8 die innere
Oder-Verknüpfung umgesetzt. Dies geschieht nach dem oben beschriebenen Schema und führt zu
Abbildung 8b. Hier sind die
verbliebenen Und-Verknüpfungen hell- und dunkel-blau dargestellt.
Für jede dieser Und-Verknüpfungen wird nun das oben dargestellte Schema zur Zerlegung von Und-Verknüpfungen verwendet. Das Resultat ist in
Abbildung 8c zu sehen.
Große zusammengesetzte Terme lassen sich mit diesen Schemata Stück für Stück in atomare Verzweigungen umsetzen. Die entstehenden PAP sind dann
viel einfacher in Assemblerprogramme überführbar.

Abb. 8: Kombination von Und und Oder