Adressierung des MIPS-Assembly-Speichers "Pseudo Direct Addressing"

Könnte jemand erklären, wie die Pseudo-Direktadressierung in MIPS funktioniert?

Ich verstehe nicht wirklich, wie die Verwendung der letzten 4 Bits vom PC (Programmzähler) in das Bild passt?

Angenommen, ich möchte zur Adresse gehen

0000 0000 0000 0000 0000 0000 0000 0100

Und mein PC sieht aus wie0101 ...

Dann kann ich nicht? Weil ich die letzten 4 Bits brauche, um stattdessen wie 0101 auszusehen? Also wird es auch relativ zum PC sein?

Warum die Abstimmung zum Abschluss? Im Allgemeinen sind Fragen zur Programmierung von Mikrocontrollern in diesem Forum erlaubt. Beachten Sie unter RELATED in der rechten Seitenleiste die Anzahl der MIPS-Fragen.
@tcrosley und der enge Wähler - Bitte geben Sie Ihre Meinung zu dieser Meta-Diskussion ab

Antworten (1)

Die pseudodirekte Adressierung von MIPS verwendet die oberen vier Bits des Programmzählers, verkettet mit den 26 Bits der direkten Adresse aus dem Befehl, verkettet mit zwei Bits von 0 0:

PC31...PC28    IM25...IM00    0    0

wodurch eine vollständige 32-Bit-Adresse erstellt wird. Dieses Format wird von den J-Anweisungen j und jal verwendet. Da die oberen 4 Bits des PC verwendet werden, beschränkt dies das Sprungziel auf eine beliebige Stelle innerhalb des aktuellen 256-MB-Codeblocks (1/16 des gesamten 4-GB-Adressraums). Um irgendwo innerhalb des 4-GB-Raums zu springen, werden die R-Typ-Befehle jr und jalr verwendet, bei denen die vollständige 32-Bit-Zieladresse in einem Register angegeben ist.

Der Grund dafür, die unteren zwei Bits auf 0 zu setzen, ist, dass alle Befehlsadressen in MIPS 32-Bit-wortausgerichtet sind, sodass Sie niemals eine Zieladresse eines Sprungbefehls haben können, bei der die beiden Bits etwas anderes als 0 0 sind.

Ich nehme an, die 256 MB stammen von 2 ^ 28?
@jiewmeng, richtig. Die oberen 4 Bits, die vom Programmzähler kommen, wählen 1 von 16 "Bänken" mit 256 MB aus, und die unteren 28 Bits wählen ein Byte innerhalb dieser Bank aus. Aber wie bereits erwähnt, sind nur Bytes mit einer Adresse Modulo 4 == 0 erlaubt, da die unteren beiden Bits immer 0 0 sind.