Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Technische Informatik » SPIM Programmierung » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen SPIM Programmierung
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
neuling96
unregistriert
SPIM Programmierung Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo,
ich versuche momentan im Selbststudium ein wenig SPIM Programmierung beizubringen für das kommende Fach Rechenarchitektur und habe deutliche Schwierigkeiten, die Sache richtig zu verstehen

lw $t1, 4+var $t1 enthaelt "4" (direkte Adr.)

Wieso die enthält es die vier?

Im Skript:
label oder label+Konstante: Der gesuchte Wert steht im Hauptspeicher
an der Adresse der angegebenen Marke, die ggf. zuvor um die Konstante
direkt erhöht oder verringert wird (direkt).

das heißt 4+var muss 2 ergeben, da 4 an der 2te Stelle steht

neuling96 hat dieses Bild (verkleinerte Version) angehängt:
Unbenannt.jpg

15.03.2015 13:34
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo neuling96,

ich gehe davon aus, dass es sich bei words immer um 32-Bit-Zahlen handelt. var ist damit die Anfangsadresse eines word-arrays. Welchen genauen Wert die Adresse, welche von var repräsentiert, hat, ist irrelevant. sagen wir einfach 1000.
mit lw $t1, var sagen wir also, lade ein Word = 32 Bit ab Adresse "var" in $t1.
Wollen wir die nächste Zahl des Arrays auslesen, so reicht es nicht die Adresse um 1 Byte zu verschieben, sondern wir müssen um 32Bit, d.h. 4 Byte verschieben. 4 + var sagt nichts anderes. Demzufolge besagt
lw $t1, 4 + var nur, dass wir nun statt von der Adresse 1000 von der Adresse 4 + var = 1004 lesen, was die Anfangsadresse des zweiten Wortes im Array ist.

4+var ergbit also nicht 2 sondern die Adresse des zweiten Wortes im Array, welches genau um 4 Byte vom Anfang des Arrays verschoben ist.

Klar?

Gruß,

Karlito
15.03.2015 14:34 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
neuling96
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

zur der Übung 3
muss es dann so aussehen?
lw $t3, 4+var ($t2) #$t2 enthält die 7
15.03.2015 14:59
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Nein.
var($t2) heißt nichts anderes wie: (wert vom $t2) + var. Bei dem Zugriff auf eine direkte Adresse wie z.B. 4 + var muss immer ein festern Wert gegeben sein. Es ist auf diese Weise nicht möglich, den Wert eines Registers als Offset für ein Array zu verwenden. lw $t3. $t2 + var geht also nicht.
lw $3, 4 + var($t2) würde, nachdem der letzte Wert in $t2 25 war also heißen: lese 32 Bit ab der Adresse var + 25 + 4 = var + 29.

Versuche es bitte noch einmal.

Gruß,

Karlito
15.03.2015 15:36 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
neuling96
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

'Noch ein versuch:

lw $t4, 16+var
15.03.2015 16:07
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Passt! smile Daumen hoch
15.03.2015 16:12 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
neuling96
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

dankesehr Wink
15.03.2015 16:42
neuling96
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Was bedeutet 8($t1) ??
wenn var(t1)=var+t1 ist was ist dann 8($t1)
18.03.2015 16:03
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

lt. diesem Foliensatz 8 + inhalt des registers (8 ist ein immediate wert)

Gruß,

Karlito
18.03.2015 16:28 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
neuling96
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

vielen dank
18.03.2015 21:12
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Technische Informatik » SPIM Programmierung