2017-09-30 5 views
-1

Ich versuche, eine einfache C-Funktion (die Ihnen sagt, ob ein Wort von einem char-Array ein Palindrom ist) in MIPS 32 zu übersetzen, aber ich habe Probleme, nicht-multiple zu laden -von-4 Positionen des Arrays.MIPS32 word array

Offenbar

`li t0,0(a0)` 

lädt den ersten Buchstaben (Zeichen) und

`li t0,4(a0)` 

Lasten der fünfte Buchstabe des Arrays (ich dachte, es wäre die zweite gewesen). Versuchen, die zweite zu laden, wie in:

`li t0,1(a0)` 

Ruft mich einen Segmentierungsfehler. Dies gilt auch für die Verwendung der logischen Verschiebung vor dem Laden von 0 (a0). Wie löse ich das?

Antwort

0

Nevermind, hier ist, wie ich es an die Arbeit:

addu a0,a0,t0 #t0 = i, a0 <- a0+i 
lb t2,0(a0) #store array[i] in t2 
subu a0,a0,t0 #returns a0 to original value 

Wenn ich auf den zweiten Brief erhalten möchten, I 1 in t0 laden, zum Beispiel.

0

Es ist eine 32-Bit-Plattform und erfordert ausgerichteten Zugriff. Wenn also a0 auf 4 Bytes ausgerichtet ist, lädt li t0,0(a0) den ersten 32-Bit-Wert von a0 in t0. Aber li t0,1(a0) wird versuchen (und fehlschlagen), einen falsch ausgerichteten 32-Bit-Wert zu laden.

Versuchen Sie also nicht, jeweils ein Zeichen zu laden. Umarmen Sie die Tatsache, dass MIPS 32 4 Zeichen (32 Bits) gleichzeitig lädt. Mit shift und bitweise-and können Sie auf einzelne Zeichen innerhalb eines Wortes zugreifen.

+0

Danke für die Antwort, können Sie mir ein Beispiel geben, wie Sie das zweite Zeichen innerhalb des Wortes abrufen würden? – martincito