2017-11-19 7 views
0

Gibt es trotzdem eine Variable als Offset-Nummer für ein Array? Zum Beispiel weiß, dass ich die normalen Offset und Array funktioniert wie folgt:MIPS Assembly, das auf ein Array zugreift, während eine Variable als Offset verwendet wird

ARRAY: .word 0,1,2,3,4,5,6,7,8,9 
lw $t6, ARRAY 
lw $t7, 0($t6) 

Wo der Index bei Null wäre in t7 geladen werden, aber was soll ich tun, um, ist dies:

ARRAY: .word 0,1,2,3,4,5,6,7,8,9 
lw $t6, ARRAY 
li $t7, 0 
lw $t8, $t7($t6) 

Auf diese Weise Ich könnte die Variable t7 so erhöhen, wie ich es im Code tun wollte, ohne den Offset fest codieren zu müssen. Ich bekomme immer einen Syntaxfehler, also denke ich, was ich versuche, ist falsch. Gibt es denn irgendwie so etwas, damit ich den Index des Arrays inkrementieren kann?

+1

Dies wird nicht unterstützt. Aber da MIPS viele allgemeine Register hat, können Sie einfach $ t6 und $ t7 in ein freies Register summieren und das weiter erhöhen. Und Sie müssen nicht raten, ob etwas, das Sie tun, unterstützt wird; _MIPS32 ™ Architektur für Programmierer Band II: Der MIPS32 ™ Befehlssatz_ listet alle verfügbaren Befehle und ihre erwarteten Operanden auf. – Michael

Antwort

0

Um durch ein Array mit einer Variablen zu erhöhen, müssen Sie diese Einstellung verwenden:

ARRAY: .word 1,2,3,4,5,6,7,8,9 
li $t2, 0 
lw $t3, ARRAY($t2) 
addi $t2, $t2, 1 
+1

Beachten Sie, dass, wenn die Adresse von 'ARRAY' nicht irgendwo im Bereich von 0xFFFF8000-0x00007FFF liegt, dieser' lw'-Befehl nicht direkt als MIPS-Befehl codiert werden kann. Der Assembler akzeptiert es möglicherweise immer noch als _pseudo-Anweisung_, die in 2 oder mehr aktuelle MIPS-Anweisungen übersetzt wird. Sie können dies leicht in einem Simulator wie SPIM oder MARS sehen. – Michael