SPIM Programmierung |
15.03.2015, 13:34 | 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 |
|
|
15.03.2015, 14:34 | 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 |
15.03.2015, 14:59 | Auf diesen Beitrag antworten » |
neuling96 | zur der Übung 3 muss es dann so aussehen? lw $t3, 4+var ($t2) #$t2 enthält die 7 |
15.03.2015, 15:36 | 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 |
Anzeige | |
|
|
15.03.2015, 16:07 | Auf diesen Beitrag antworten » |
neuling96 | 'Noch ein versuch: lw $t4, 16+var |
15.03.2015, 16:12 | Auf diesen Beitrag antworten » |
Karlito | Passt! |
15.03.2015, 16:42 | Auf diesen Beitrag antworten » |
neuling96 | dankesehr |
18.03.2015, 16:03 | Auf diesen Beitrag antworten » |
neuling96 | Was bedeutet 8($t1) ?? wenn var(t1)=var+t1 ist was ist dann 8($t1) |
18.03.2015, 16:28 | Auf diesen Beitrag antworten » |
Karlito | lt. diesem Foliensatz 8 + inhalt des registers (8 ist ein immediate wert) Gruß, Karlito |
18.03.2015, 21:12 | Auf diesen Beitrag antworten » |
neuling96 | vielen dank |
|
Verwandte Themen
Die Beliebtesten » |
|
Die Größten » |
|
Die Neuesten » |
|