SPIM Programmierung

Neue Frage »

Auf diesen Beitrag antworten »
neuling96 SPIM Programmierung

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
 
Auf diesen Beitrag antworten »
Karlito

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
Auf diesen Beitrag antworten »
neuling96

zur der Übung 3
muss es dann so aussehen?
lw $t3, 4+var ($t2) #$t2 enthält die 7
Auf diesen Beitrag antworten »
Karlito

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
 
Auf diesen Beitrag antworten »
neuling96

'Noch ein versuch:

lw $t4, 16+var
Auf diesen Beitrag antworten »
Karlito

Passt! smile Daumen hoch
Auf diesen Beitrag antworten »
neuling96

dankesehr Wink
Auf diesen Beitrag antworten »
neuling96

Was bedeutet 8($t1) ??
wenn var(t1)=var+t1 ist was ist dann 8($t1)
Auf diesen Beitrag antworten »
Karlito

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

Gruß,

Karlito
Auf diesen Beitrag antworten »
neuling96

vielen dank
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »