MIPS addi-Anweisung array-Basis
Ich bin ein Neuling in MIPS und bin eine harte Zeit, herauszufinden, welche dieser Ausschnitt der code bedeutet...
Wobei $s6 ist der start in ein array Ein:
addi $t0,$s6,4
Ich bin mir nicht sicher, wenn dies bedeutet, $t0 = A[4]
-oder-
Wenn es bedeutet, $t0 = A[0] + 4 nehmen Sie den Wert in A[0] und fügen Sie vier, um es zu speichern zurück in A[0]
Jede Hilfe wäre wirklich zu schätzen.
Danke im vorraus!!!!!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Zeile:
wobei $s6 ist die Basis der Reihe, nimmt den Inhalt des Registers $s6, hinzufügen 4, um Sie und legt das Ergebnis in $t0. Also, wenn die Adresse in $s6 ist 0x00400000, nachdem die addi-Instruktion, $t0 enthält 0x00400004.
Den addi-Anweisung fügt einen unmittelbaren Wert, dh ein ganzzahliger Wert, der die source-register und speichert das Ergebnis im Ziel-register, in diesem Fall $t0.
Also, wenn $s6 A[0], dann ist $t0 wird[1], vorausgesetzt, Sie haben ein integer-array. Wenn Sie ein Zeichen-array, also ein string, dann ist $t0 wird[3]. $t0 nicht den Wert in diesen array-Indizes, hält es die Adresse dieser array-Indizes, weil das ist, was $s6 ursprünglich hielt.
Diese Anweisung bedeutet, dass Sie unter der gespeicherte Wert in $s6 und das hinzufügen von 4 und speichern den neuen Wert in $t0. Der Wert in $s6 bleibt die gleiche. $s6 ist eine gespeicherte temp-register so zu jeder Zeit die Sie benötigen, um den Wert zu ändern in $s_ müssen Sie es speichern, um den stack zuerst. Sie sind nicht zu einer änderung der Wert in $s6, so dass Sie nicht brauchen, um es zu speichern auf dem stack. Speichern Sie es in ein temporäres register, das Sie nicht haben, um sorgen über das, was Inhalte, die Sie haben über geschrieben. Auch $s6 ist tatsächlich Regester 22 oder $R22 und $t0 $r8....
Sind Sie im Grunde die Erhöhung der array durch eine 32-bit-Wort, um die nächste Instruktion/Daten-Wort.
Dies ist die Antwort auf Ihren Kommentar:
Indem Sie sagen: A[0] = 7, durch Konvention, die Sie sagen, dass die "memory Adresse" wird durch den Inhalt des Registers $s6, das 7 entspricht. $s6 nicht gleich 7 sondern was es Punkte, um im Hauptspeicher hat. s6 nur hält eine Zahl, die wir verstehen oder wissen, ist eine Adresse. Wir fügen 4 bis $s6, weil wir möchten, fügen Sie genug bytes für das nächste element des Arrays. Ein Wort ist 32 bit 4 bytes. Per Konvention wollen wir hinzufügen, 4 und es wird in bytes für das nächste Wort. Ein Wort wird im Allgemeinen 32 bits oder 4 bytes lang. Nach dem hinzufügen der 4 bytes, s6 wir nicht wissen, das Ergebnis, denn wir waren nicht gesagt, was s6 ursprünglich war, aber wir wissen, dass t0 nun Punkte im wesentlichen auf s6[1]. Ich würde nicht sagen, Sie sind das hinzufügen eines weiteren indice, um das array. Das array wäre bereits eingerichtet worden oder sind Sie gehen zu möglich Lesen Vergangenheit das Ende, sondern mips, da ich weiß, dass es nicht geben Ihnen ein Fehler. Es wird Ihnen nur sagen, was in der Stelle im Hauptspeicher referenziert die Adresse, die Sie ihm geben. Könnte leer sein , gültig, stail, oder einem anderen Teil Ihrer Programme Daten. Müssten wissen, mehr von dem Zusammenhang des Programms um mehr zu erfahren.
Meisten MIPS-Befehle sind:
Diese konkrete Anweisung, mit der Speicher-Adresse der Beginn des Arrays A[] auf $s6, speichert die position des 4. byte A[] auf $t0.
So wie ich das verstehe von dem, was Sie schrieb, $s6 haben Sie die Speicher-Adresse von A[0], nicht der Wert A[0]
Das heißt, wenn $s6 = @A[0] ist die Adresse mit dem Wert 0x00, dann ist $t0 = $s6+4 hat den Wert 0x04
Je nach Typ des Arrays A[] (short, int, long) dies könnte bedeuten, dass Sie zeigen verschiedene Positionen des Arrays in $t0.
Im Normalfall ein array von 4-byte lange Integer-zahlen, $t0 wäre, zeigt jetzt Ein[1]