Übungsblatt 5: Zeigerparameter und rekursive Prozeduren

Themen dieser Übung sind der Zugriff auf den Hauptspeicher aus einer Prozedur bzw. Funktion heraus mit Hilfe von Zeigerparametern und die Programmierung rekursiver Prozeduren, d. h. von Prozeduren, die sich selber aufrufen. Wir verwenden hierfür wieder Jasmin.

Aufgabe 1: Polynomauswertung mit Zeigerparameter

Implementieren Sie zunächst die in der Vorlesung beschriebene Polynomauswertung mit Zeigerparameter auf dem Stapel. Schreiben Sie also die Parameterwerte in den Speicher und übergeben Sie die Speicheradresse des ersten Parameters mittels des Stapels an die Prozedur. Liefern Sie das Ergebnis der Polynomberechnung in der Speicherstelle mit der kleinsten Adresse zurück. Prüfen Sie wieder, ob der richtige Wert berechnet wurde.

Aufgabe 2: Summe gerader und ungerader Zahlen mit Prozedur

Schreiben Sie eine Variante des Programms zum Aufsummieren gerader und ungerader Zahlen aus dem Hauptspeicher bei der:

  1. Die Verarbeitung der Zahlenliste 1, 12, 17, 25, 32, 41, 50 mit einer Prozedur Summe durchgeführt wird.

  2. In dieser Prozedur ein Kontextwechsel erfolgt. Beschreiben Sie zum Testen die Register AX bis DX vor Aufruf der Prozedur mit Testwerten, die nach Beendigung der Prozedur wiederhergestellt sein müssen.

  3. Übergeben Sie folgende Parameterwerte mit Hilfe des Stapels an Summe:

    1. Die Startadresse der Werte im Speicher (z. B. 100).

    2. Die Anzahl der zu verarbeitenden Zahlenwerte (hier: 7).

    3. Die Adresse der Speicherzelle, in der die Summe der geraden Zahlen gespeichert werden soll (z. B. 114).

    4. Die Adresse der Speicherzelle, in der die Summe der ungeraden Zahlen gespeichert werden soll (z. B. 116).

Aufgabe 3: Summe gerader und ungerader Zahlen mit mehreren Prozeduren

Erweitern Sie Ihre Lösung aus der vorherigen Aufgabe derart, dass die Zahlenwerte zur Berechnung der beiden Summen nun in der Prozedur Summe durch Aufruf der beiden parameterlosen (Hilfs-)Prozeduren GSumme und USumme erfolgt.

Aufgabe 4: Summe aufeinanderfolgender Zahlen mit Rekursion

Implementieren Sie schließlich das in der Vorlesung besprochene Beispiel zur Berechnung der Summe einer Folge von natürlichen Zahlen 1..n mittels rekursivem Unterprogrammaufruf. Führen Sie das Programm aus und studieren Sie die Technik Parameter und interne Variablen eines Unterprogramms (hier repräsentiert das Register AX eine derartige interne Variable) auf den Stapel zu retten. Dies wird bei der Übersetzung einer Hochsprache, wie z. B. C++ oder Java, in Maschinensprache vom Compiler automatisch erledigt. Das Retten lokaler Variablen, Parameter- und Registerwerte auf den Stapel verursacht einen zusätzlichen Verwaltungsaufwand. Dieser kann dazu führen, dass eine rekursive Problemlösung langsamer ist, als eine iterative.