2017-09-08 3 views
0

Hallo Stack-Überlauf Gemeinschaft AdressierungBiss/Byte in MIPS

Ich bin derzeit ein Intro zu Computerarchitektur/Organisation Kurs zu nehmen und das Lehrbuch wir werden verwenden Rechnerorganisation und Design by David Patterson und John Hennessey genannt (5. Ausgabe) und sie zeigen ein Beispiel für den Zugriff auf Elemente in einem Array mit MIPS. Das Beispiel, das sie auflisten, lautet etwa so:

Gegeben die C-Code-Zuweisung: g = h + A [8]; wandle folgendes in MIPS um. Wobei g = $ s1, h = $ s2 und die Objektadresse A = $ s3.

sie gehen zu sagen, dass die MIPS Anweisungen, die die gleiche Anweisung in C-Code darstellen, sind wie folgt:

(1) lw $t0, 8($s3) # Temporary register $t0 gets A[8] 
(2) add $s1,$s2,$t0 # g = h +A[8] 

Dann auf einer anderen Seite, erwähnen die Autoren, dass die Leitung (1) auch geschrieben worden sein könnte wie:

Meine Frage ist, was ist der Unterschied zwischen Zeilen (1) und (3) und warum ist das wichtig?

Danke !!!

+0

Welche Seiten haben diese Ausnahmen? Ich habe die gleiche Ausgabe. Das klingt nicht korrekt. Wenn Sie das 8. Wort in einem Array von Wörtern haben wollen, müssen Sie den Offset als Index * Wortgröße angeben, was 8 * 4 = 32 wäre. – ktb

+0

Ich weiß nicht, warum der Autor sagte, dass diese 2 Zeilen äquivalent waren, 32 ($ s3) 'lädt das achte Wort aus dem Register' $ s3' während '8 ($ s3)' nur das 2. Wort lädt, so dass auf das achte Element im Array zugegriffen wird auf ** 32 + die Basisadresse, die $ s3 ist 32 ($ s3) **. In einem Wort, diese 2 Zeilen sind ** nicht ** äquivalent – Dummy

+0

Seiten 69,71 und 72 – avenger12

Antwort

0

Die einzige Möglichkeit, wie Sie Zeile 3 anstelle von Zeile 1 geschrieben haben könnten, ist, dass die Adresse in Register $s3 anders ist. Meine Vermutung ist das, was fehlt: Vielleicht gab es bereits eine Adresse in $s3, und es ist bekannt, 24 Bytes weniger als die Adresse A, und anstatt die Adresse A in $s3 zu laden, nur um dann laden 8($s3), laden statt die Adresse von A in $s3 und laden Sie stattdessen nur 32($s3), Speichern einer Anweisung. Das ist meine Vermutung.