Ich verstehe, dass für MIPS-32 die ersten 4 Bits der Adresse, zu der gesprungen werden soll, von den ersten 4 Bits der Adresse des j-Befehls genommen werden, was bedeutet, dass wir eine Grenze von 2 ^ 28 Bits um die Adresse des j haben Anweisung, zu der wir springen können. Online heißt es, dass diese Grenze 256 MB beträgt, aber 2 ^ 28 Bits sind 32 MB und nicht 256 MB. Kann jemand erklären, warum es 256 MB ist?
Die Adressierung in den meisten CPU-Kernen, die ich kenne, funktioniert pro Byte. Sie adressieren keine einzelnen Bits.
Das MIPS erfordert, dass seine Anweisungen 4-Byte (Wort) ausgerichtet sind – dh die beiden LSBs sind immer Null. Auf diese Weise sind sie nicht in den Anweisungen codiert.
Die Antwort von @sherrelbc erklärt es ziemlich ausführlich, obwohl ich die Semantik von "word-aligned" mehr mag als "word-addressed" .
Der Link, den @valcroft gegeben hat, hat auch die Antwort auf der Mitte der Seite:
Pseudo-direkte Adressierung
Direkte Adressierung bedeutet die Angabe einer vollständigen 32-Bit-Adresse in der Anweisung selbst. Da MIPS-Anweisungen jedoch 32 Bit sind, können wir das nicht tun. Theoretisch benötigen Sie nur 30 Bits, um die Adresse einer Anweisung im Speicher anzugeben. MIPS verwendet jedoch 6 Bits für den Opcode, sodass immer noch nicht genügend Bits für eine echte direkte Adressierung vorhanden sind. Stattdessen können wir eine pseudodirekte Adressierung durchführen. Dies geschieht in j-Befehlen.
| Opcode | Target |
|---------|----------------------------------|
| B31-26 | B25-0 |
| oooo oo | tt tttt tttt tttt tttt tttt tttt |
Für das Ziel werden 26 Bit verwendet. So wird die Adresse für die pseudodirekte Adressierung berechnet.
PC <- PC31-28::IR25-0::00
Nehmen Sie die oberen 4 Bits des PC, verketten Sie diese mit den 26 Bits, aus denen das Ziel besteht, und verketten Sie diese mit 00. Dies erzeugt eine 32-Bit-Adresse. Dies ist die neue Adresse des PCs.
26 Bits um zwei nach links verschoben ergeben also eine relative Adressgrenze von
Ist , oder .
Tatsächlich sind die ersten 6 Bits der Anweisung der Opcode . Diese Bits werden von dem Steuermodul im Datenpfad verwendet, um zu bestimmen, welche Steuersignale geltend zu machen sind, um die Ausführung des Befehls zu erleichtern.
Der Opcode ist in den Bits 31 bis 26 enthalten, die in das Steuermodul eingespeist werden. Wie Sie im obigen Bild sehen können, werden die unteren 26 Bits der Anweisung zweimal nach links verschoben und mit den oberen 4 Bits verkettet , die bereits im Programmzähler (PC) enthalten sind. Dies ist ein direktes Ergebnis davon, dass MIPS wortadressiert ist (32 Bits = 4 Bytes = 1 MIPS-Wort) und nicht byteadressiert ist , sodass die doppelte Linksverschiebung es uns ermöglicht, 2^28 oder 268.435.456 (256 MiB) Befehlswörter innerhalb der zu adressieren Bereich der 4 höchstwertigen Bits des PC. Wenn der Opcode so ist, dass ein Sprung ausgeführt werden soll, dann wählt der obere rechte Mux diesen neuen verketteten PC-Wert aus, und die nächste abzurufende Anweisung befindet sich an der neuen Adresse.
Tatsächlich wird der PC bereits um 4 oder eine Anweisung inkrementiert, bevor er verkettet wird.
sherrelbc
Dzarda