FB18 - Das Forum für Informatik

fb18.de / Bachelorstudieng / PM Technische Informatik

RS Praktikum (Türme von Hanoi)

RS Praktikum (Türme von Hanoi) 2008-12-16 18:18
Anonymer User
Hey. Hat es einer von euch gebacken bekommen, den Türme von Hanoi Algo für das RS Praktikum in Assembler umzuwandeln? Mir will die Rekursion (schon in Java) ums verrecken nicht gänzlich klar werden, eine Umsetzung in Assembler (mit stack) schon garnicht. :/


Hilfe jeglicher Art wäre ganz nett.

RE: RS Praktikum (Türme von Hanoi) 2008-12-16 18:47
Fred
Mir will die Rekursion (schon in Java) ums verrecken nicht gänzlich klar werden
Schritt 0: Befrage Google nach "Rekursion".

Schritt 1: Mache Dir klar, wie eine Methode a eine Methode b aufrufen kann, welche wiederrum eine Methode c aufruft. Wie merkt sich der Computer, an welcher Stelle a unterbrochen wurde, damit beim Beenden von b an der Stelle nach dem Aufruf von b weitergemacht werden kann? Analog für die Unterbrechung von b durch c.
Da diese Verschachtelung im Prinzip beliebig tief sein kann, kann man den Unterbrechungsort nicht irgendwo in einer festen Adresse speichern, sondern man braucht dazu einen Stack.

Schritt 2: Mache Dir klar, dass die formalen Parameter ebenso nicht feste Adressen zugewiesen bekommen können, weil ein rekursiver Aufruf sonst die eigenen formalen Parameter überschreiben würde. Auch diese müssen also auf einem Stack landen - warum also nicht den gleichen verwenden, den man schon in Schritt 1 herbeigesehnt hat?

Schritt 3: Analog für lokale Variablen - formale Parameter sind ja nichts anderes als von außen initialisierte lokale Variablen. Diese drei Elemente (Rücksprungadresse, formale Parameter, lokale Variablen) werden in einer Strutkur namens "Stack Frame" auf dem Stack abgelegt.

Schritt 4: Schreibe eine einfache rekursive Funktion, setze einen Haltepunkt im Funktionsrumpf und starte den Debugger von BlueJ. Das sollte die letzten Zweifel beseitigen.

In der Assembleraufgabe gibt es mit Sicherheit ebenfalls einen Stack. Wie dieser genau aussieht, weiß ich aber nicht, dafür ist das T3 Praktikum einfach schon zu lange her. Wenn Du konkrete Fragen hast, poste sie.

RE: RS Praktikum (Türme von Hanoi) 2008-12-16 22:05
T
also wenn das immer noch die sparc ist:
am anfang der eigenen prozedur:
        save %sp, -104, %spum die rücksprungadresse zu sichern. (man kriegt glaub ich auch noch 104 [speichereinheit] speicher, weiss ich nicht mehr genau.) die parameter liegen in den registern %i0, %i1, …

dann kann man beliebig unterprozeduren - auch sich selbst natürlich - aufrufen: (mit den parametern in %o0, %o1, …)
        call prozedur         nop
wenn man fertig ist muss man die rücksprungadresse wiederholen und dahin springen:
        restore         jmp %o7+8         nop(die rückgabewerte liegen hierbei wieder in den registern %i0, %i1, …)

RE: RS Praktikum (Türme von Hanoi) 2008-12-17 00:05
UncleOwen
also wenn das immer noch die sparc ist:

Praktikum. Das war nie Sparc und wird auch nie Sparc werden. DCore ruled [10]

RE: RS Praktikum (Türme von Hanoi) 2008-12-17 11:29
T
Praktikum.
achja. hm, dann muss man das halt selber machen.

RE: RS Praktikum (Türme von Hanoi) 2008-12-18 18:09
Anonymer User
Ach ja, hab das Problem gelöst :D. Danke für euere Antworten.