Seite 1 von 1

P4 - sw/lw offset-Register nur $sp?

Verfasst: 25. Jan 2010 14:00
von bier
Hallo,

der Befehl lw is in der Beschreibung des Praktikums wie folgt angegeben:
lw r1,offset($sp)
(oBdA für sw)
Können wir durch die explizite Angabe von $sp hier annehmen, dass an dieser Stelle ausschließlich das Stack-pointer-Register erlaubt ist, oder dürfen dort auch andere Register stehen?

Re: P4 - sw/lw offset-Register nur $sp?

Verfasst: 25. Jan 2010 17:47
von VersuchEs
Nein.
Sonst wäre der Befehl lw r1,offset(r2).

Re: P4 - sw/lw offset-Register nur $sp?

Verfasst: 25. Jan 2010 18:40
von AlexPi11
"Nein, nur $sp" oder "Nein, alles erlaubt" ?

Also bei uns geht es mit jedem Register. In der Aufgabenstellung steht:
Schreiben Sie einen Interpreter für die Sprache MIPS*, eine vereinfachte Untermenge von MIPS.
Und dem MIPS-Simulator ist es egal welches Register du als Adresse angibst.

Re: P4 - sw/lw offset-Register nur $sp?

Verfasst: 26. Jan 2010 01:15
von VersuchEs
Also, meiner Meinung nach ist nur lw/sw offset($sp) erlaubt.

Re: P4 - sw/lw offset-Register nur $sp?

Verfasst: 26. Jan 2010 09:23
von Gnomix
Es gibt auch Befehle die LABEL+OFFSET (z.b. feld+4), LABEL, $REGISTER oder $REGISTER+OFFSET verstehen.
Dies hängt vom Interpreter/Compiler ab.

Re: P4 - sw/lw offset-Register nur $sp?

Verfasst: 26. Jan 2010 11:35
von bier
AlexPi11 hat geschrieben:"Nein, nur $sp" oder "Nein, alles erlaubt" ?

Also bei uns geht es mit jedem Register. In der Aufgabenstellung steht:
Schreiben Sie einen Interpreter für die Sprache MIPS*, eine vereinfachte Untermenge von MIPS.
Und dem MIPS-Simulator ist es egal welches Register du als Adresse angibst.
Gnomix hat geschrieben:Es gibt auch Befehle die LABEL+OFFSET (z.b. feld+4), LABEL, $REGISTER oder $REGISTER+OFFSET verstehen.
Dies hängt vom Interpreter/Compiler ab.
Nunja, es ist halt die Frage wie genau diese Untermenge definiert ist. Wir sollen ja den MIPS*-Simulator schreiben und nicht den MIPS-Simulator...
Wir werden jetzt auch erstmal davon ausgehen das nur $sp erlaubt ist, vielleicht klärt sich das ganze ja noch...

Re: P4 - sw/lw offset-Register nur $sp?

Verfasst: 26. Jan 2010 11:51
von robert.n
Nur $sp!

Widerspricht mMn. auch nicht der Aufgabenstellung. Auch das ist eine Art von Untermenge...

Re: P4 - sw/lw offset-Register nur $sp?

Verfasst: 26. Jan 2010 14:01
von Tapion
Ich sehe das so: Die Beschränkung auf offset($sp) sollte der Vereinfachung der Aufgabenstellung dienen. Wenn du zusätzliche Funktionalität implementierst, dann wirst du deshalb beim Testat ganz sicher nicht durchfallen. (Nur weniger als in der Aufgabenstellung sollte es nicht sein ;-))

Re: P4 - sw/lw offset-Register nur $sp?

Verfasst: 27. Jan 2010 21:04
von fetzer
VersuchEs hat geschrieben:Also, meiner Meinung nach ist nur lw/sw offset($sp) erlaubt.
Warum wird dann $sp überhaupt explizit angegeben? Wenn es sich nur um $sp handeln würde müsste man diesen Parameter ja nicht angeben.
$sp entspricht ja letztendlich auch nur einem Zahlenwert, der eben als Stackpointer so deklariert ist. Wer mit $t5 als $sp arbeitet verstößt dann zwar gegen Konventionen, aber das Programm kann trotzdem funktionieren.
Hat das jemand mal in Mars getestet?

Re: P4 - sw/lw offset-Register nur $sp?

Verfasst: 28. Jan 2010 22:36
von hi01ebub
Hey,

ich hab zu dem Thema noch eine andere Frage: Soll der Speicher eigentlich wortweise oder byteweise addressiert werden?

PS: Ich habs jetzt so gemacht, dass sw/lw nicht nur mit $sp gehen. Find ich so sinnvoller. Hab erst gedacht, dass mit dem $sp wäre dazu gedacht, dass man nicht aus dem Speicher ausbrechen kann. Aber mit dem Offset ist das auch so möglich. Außerdem ist $sp auch nicht geschützt.
Fazit: Für mich macht es keinen Sinn lw/sw nur mit $sp zu implementieren.

Re: P4 - sw/lw offset-Register nur $sp?

Verfasst: 30. Jan 2010 01:27
von Schildy
Wie hast du es denn geschafft das so zu implementieren das alle Register gehen? Wir stehen da irgendwie auf dem Schlauch. nur mit $sp is einfach aber bei den anderne Registern weis ich einfach nich wie ich das machen soll.

Re: P4 - sw/lw offset-Register nur $sp?

Verfasst: 30. Jan 2010 09:41
von m_stoica
Wo soll denn da das Problem sein? Du bekommst das Register übergeben, liest den Wert aus, addierst den Offset drauf und speicherst/liest die entsprechende Stelle im Speicher.

Re: P4 - sw/lw offset-Register nur $sp?

Verfasst: 30. Jan 2010 13:45
von Schildy
super wie es theortisch läuft weis ich auch. Aber was Speichert ihr zb initial im Steckpointer?
ich greife aktuell noch auf den stack selbst zu. Da ich $sp hat somit inital 256. wenn ich aber jetzt mit anderen Resitern arbeite dann kann ich wohl schlecht sagen das das nur im Stack abläuft.

Re: P4 - sw/lw offset-Register nur $sp?

Verfasst: 30. Jan 2010 14:36
von fetzer
Der Stackpointer ist ein ganz normales Register, wie jedes andere auch. Es enthält eine Zahl zwischen 0 und der Größe deines Stacks-1 (Array-Adressierung von 0 bis 255 bei Größe 256!), mit der du die Stelle in deinem Stack bestimmen kannst. Diese Zahl kann aber auch jedes andere Register entahlten.

Beispielsweise:

Code: Alles auswählen

$sp = 252
schreibe int an stelle stack[252..255], d.h. stack[$sp..$sp+3];
aber auch

Code: Alles auswählen

$t0 = 252
schreibe int an stelle stack[252..255], d.h. stack[$t0..$t0+3]
Der Stackpointer "vereinfacht" dieses Procedere für den ASM-Programmierer einfach nur, da er von Anfang an auf den oberen Teil des Stack zeigt und man nicht erst die Größe des Stacks herausfinden und dann eine der kostbaren anderen Register dafür verwenden muss.

Re: P4 - sw/lw offset-Register nur $sp?

Verfasst: 30. Jan 2010 14:47
von Schildy
ach oke ich hab gedacht des müsste so laufen, dass man auch aus dem code oder so laden soll. dann hab ich ja shcon was ich wollte :) Danke