2. Hausübung - Benutzung von Stack

hi01ebub
Mausschubser
Mausschubser
Beiträge: 66
Registriert: 14. Dez 2008 17:37

2. Hausübung - Benutzung von Stack

Beitrag von hi01ebub »

Hi,

in der Aufgabe a) steht, dass wir den Stack nicht benutzden dürfen, weil wir iterativ und nicht rekursiv programmieren sollen.
Wenn wir aber nun iterativ programmieren, dürfen wir den Stack dann trotzdem nicht benutzen um Daten, die nicht in die Register passen zu speichern?
Oder sollen wir direkt über $gp auf den Hauptspeicher schreiben?
Oder gibt es noch eine andere Möglichkeit???

Bin sehr dankbar für Antworten ;-)

ivoch
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 199
Registriert: 3. Mär 2004 10:51

Re: 2. Hausübung - Benutzung von Stack

Beitrag von ivoch »

Was für Daten würdest du in den Stack speichern wollen?

Wenn du ein Array erstellen willst, brauchst du den Stack nicht dafür. Schau dir doch mal die Präsenzübung 1.2.2 vom 2. Übungsblatt an.

hi01ebub
Mausschubser
Mausschubser
Beiträge: 66
Registriert: 14. Dez 2008 17:37

Re: 2. Hausübung - Benutzung von Stack

Beitrag von hi01ebub »

Ich bräuchte eigentlich eine Liste.
Ich schreibe im Moment einfach alle 'Soldaten' hintereinander in den Speicher. Dann gehe ich von Vorne durch und speichere die 'Soldaten', die nicht getötet wurden einfach immer wieder hinter den letzten Soldaten. Dadurch verbrauche ich zwar viel Speicher, aber es reicht locker für n=256.
Dadurch laufe ich natürlich gefahr, dass ich andere Sachen, die im Speicher waren einfach überschreibe.

Außerdem bräuchte ich den Stack, wenn ich die geschützten Register sichern und nachher wieder herstellen will.

ivoch
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 199
Registriert: 3. Mär 2004 10:51

Re: 2. Hausübung - Benutzung von Stack

Beitrag von ivoch »

Du kannst aber doch Speicher im Datenbereich reservieren, oder (.space direktive)? Und wenn du die Anzahl von Soldaten kennst (max 256 in deinem Fall), dann kannst du ausrechnen oder durch Ausprobieren herausfinden, wie lange deine Liste höchstens sein kann und dementsprechend viel Speicher reservieren.

Was den Stack angeht... Wenn du iterativ programmierst, dann kannst du ja nur mit Schleifen arbeiten. Die einzige Möglichkeit, die ich sehe, dass du wirklich Register irgendwo sichern musst, weil die zwischendurch überschrieben werden und später wieder im Originalzustand wiederhergestellt werden müssen, ist wenn du ein wirklich langes Programm schreibst, mit mehreren Schleifen und if-Abfragen usw, so dass du wirklich alle s- und t- und a- und v- Register mehrfach belegen musst. Bei allen anderen Programmen solltest du eigentlich genug Register haben, ohne auf den Stack ausweichen zu müssen.


Ich kann dir noch einen Tipp geben - lies dir die Aufgabenstellung nochmal genauestens durch. Versuch mal davon einen Pseudocode oder ein Java Programm zu basteln und diese dann in Assembler umzuwandeln. Und noch etwas - die Aufgabe wurde absichtlich so gestaltet, dass ihr den Stack nicht benutzen dürft. Das Problem ist nämlich sehr einfach auch nur mit den vorhandenen paar-und-zwanzig Register lösbar, ohne dass man diese auf den Stack oder sonst wo im Arbeitsspeicher ausladen muss.

Antworten

Zurück zu „Archiv“