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?
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.
trosley
Kevin Vermeer