Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Technische Informatik (http://www.informatikerboard.de/board/board.php?boardid=7)
--- SPIM Programmierung (http://www.informatikerboard.de/board/thread.php?threadid=2166)
Geschrieben von neuling96 am 15.03.2015 um 13:34:
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
Geschrieben von Karlito am 15.03.2015 um 14:34:
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
Geschrieben von neuling96 am 15.03.2015 um 14:59:
zur der Übung 3
muss es dann so aussehen?
lw $t3, 4+var ($t2) #$t2 enthält die 7
Geschrieben von Karlito am 15.03.2015 um 15:36:
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
Geschrieben von neuling96 am 15.03.2015 um 16:07:
'Noch ein versuch:
lw $t4, 16+var
Geschrieben von Karlito am 15.03.2015 um 16:12:
Passt!
Geschrieben von neuling96 am 15.03.2015 um 16:42:
dankesehr
Geschrieben von neuling96 am 18.03.2015 um 16:03:
Was bedeutet 8($t1) ??
wenn var(t1)=var+t1 ist was ist dann 8($t1)
Geschrieben von Karlito am 18.03.2015 um 16:28:
lt.
diesem Foliensatz 8 + inhalt des registers (8 ist ein immediate wert)
Gruß,
Karlito
Geschrieben von neuling96 am 18.03.2015 um 21:12:
vielen dank
Forensoftware: Burning Board, entwickelt von WoltLab GmbH