2010-02-22 6 views
12

Wenn ich einen Wert aus einem Speicher geladen werden soll, die Adressbasis bei $ a0 und off set $ t2 ist, warum kann ich nicht folgende Möglichkeiten:MIPS Last Wortsyntax

lw $s2, $a1($t2) 

so, was das ist Äquivalent des obigen Ausdrucks?

Antwort

14

Sie können das nicht tun, weil es keine MIPS-Befehlscodierung gibt, die so etwas unterstützt. Sie müssen den Zusatz selbst tun:

add $a2, $a1, $t2 
lw $s2, 0($a2) 

Die lw Befehlscodierung wie folgt aussieht:

1000 11ss ssst tttt iiii iiii iiii iiii 

Wo sssss ist die Quellenregisternummer, ttttt ist das Zielregister-Nummer, und iiiiiiiiiiiiiiii ist die unmittelbare . Es gibt keinen Platz in dieser Kodierung (und keine alternativen Befehlskodierungen), die zwei Register verwenden, um die Speicheradresse zu erzeugen. Der spezifische Maschinenbefehl, der oben vom Beispiel codiert bekommen würde, ist:

1000 1100 1101 0010 0000 0000 0000 0000 

Da die unmittelbaren 0 ist, $s2 ist registrieren 18 und $a2 ist 6 registrieren.

+2

ich liebe mips ... so einfach – Polaris878

+1

@ Polaris878, Yay für RISC! –