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

Benutzeravatar
bier
Windoof-User
Windoof-User
Beiträge: 39
Registriert: 4. Sep 2009 16:58

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

Beitrag 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?

VersuchEs
Windoof-User
Windoof-User
Beiträge: 30
Registriert: 25. Mai 2008 11:21

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

Beitrag von VersuchEs »

Nein.
Sonst wäre der Befehl lw r1,offset(r2).

Benutzeravatar
AlexPi11
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 154
Registriert: 18. Apr 2009 15:32

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

Beitrag 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.

VersuchEs
Windoof-User
Windoof-User
Beiträge: 30
Registriert: 25. Mai 2008 11:21

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

Beitrag von VersuchEs »

Also, meiner Meinung nach ist nur lw/sw offset($sp) erlaubt.

Benutzeravatar
Gnomix
Computerversteher
Computerversteher
Beiträge: 306
Registriert: 31. Okt 2005 08:44

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

Beitrag 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.

Benutzeravatar
bier
Windoof-User
Windoof-User
Beiträge: 39
Registriert: 4. Sep 2009 16:58

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

Beitrag 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...

robert.n
Nerd
Nerd
Beiträge: 673
Registriert: 29. Sep 2008 19:17

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

Beitrag von robert.n »

Nur $sp!

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

Benutzeravatar
Tapion
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 220
Registriert: 14. Okt 2006 19:16
Wohnort: Darmstadt

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

Beitrag 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 ;-))
WS 2010/11 - Tutor GDI 1
SS 2010 - Tutor FGI 1+2

fetzer
Kernelcompilierer
Kernelcompilierer
Beiträge: 522
Registriert: 1. Okt 2008 17:18

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

Beitrag 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?

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

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

Beitrag 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.

Schildy
Windoof-User
Windoof-User
Beiträge: 27
Registriert: 21. Mai 2007 18:54
Wohnort: Darmstadt
Kontaktdaten:

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

Beitrag 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.

Benutzeravatar
m_stoica
Kernelcompilierer
Kernelcompilierer
Beiträge: 473
Registriert: 5. Dez 2008 20:19
Wohnort: Zuhause

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

Beitrag 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.

Schildy
Windoof-User
Windoof-User
Beiträge: 27
Registriert: 21. Mai 2007 18:54
Wohnort: Darmstadt
Kontaktdaten:

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

Beitrag 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.

fetzer
Kernelcompilierer
Kernelcompilierer
Beiträge: 522
Registriert: 1. Okt 2008 17:18

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

Beitrag 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.

Schildy
Windoof-User
Windoof-User
Beiträge: 27
Registriert: 21. Mai 2007 18:54
Wohnort: Darmstadt
Kontaktdaten:

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

Beitrag 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

Antworten

Zurück zu „Archiv“