MIPS holt Adresse nicht an Wortgrenze ausgerichtet, verwendet .align 4, immer noch nicht

8

irgendwelche Ideen? Warum ich bekomme: Runtime-Ausnahme bei 0x00400020: Abrufadresse nicht an der Wortgrenze 0x00000007 ausgerichtet Die Problemzeile lautet: lw $ s1,0 ($ a1) #copy arg2 = Größe des Arrays

%Vor%     
bep 26.02.2010, 04:23
quelle

1 Antwort

7

Das Problem mit dem Code ist, dass Sie nicht die Adresse verwenden, wo die Größe gespeichert ist, sondern die Größe selbst:

Hier laden Sie die Adresse in A0 und die Größe (7) in A1:

%Vor%

Hier laden Sie das erste Wort, das in Ihrem Array gespeichert ist (das lädt eine 10). Das ist nicht das, was Sie beabsichtigt haben.

%Vor%

Hier laden Sie das erste Wort, das an der Stelle 0x000007 gespeichert ist. (deine Größe). Dies ist wahrscheinlich auch nicht beabsichtigt und wird eine Ausnahme verursachen, weil die Adresse nicht ausgerichtet ist:

%Vor%

und so weiter.

Es scheint mir, dass Sie ein Missverständnis haben, was die LW-Anweisung macht. Es liest einen Speicherort in ein Register. Im Prolog Ihrer Schleife wollen Sie Kopien eines Registers erstellen.

Um dies zu tun, können Sie die move-Pseudo-Anweisung verwenden, wenn Ihr Assembler dies unterstützt. Andernfalls verwenden Sie den OR-Befehl, um Register wie folgt zu kopieren:

%Vor%

für ein vollständiges Beispiel einer linearen Suchschleife versuchen Sie dies (ungetestet und erwartet, dass der Assembler sich um die Verzögerungsschlitze kümmert)

%Vor%     
Nils Pipenbrinck 26.02.2010, 04:37
quelle

Tags und Links