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?
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?
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.
ich liebe mips ... so einfach – Polaris878
@ Polaris878, Yay für RISC! –