Gegeben sei eine Mips-Maschine mit 26-Bit-Adressen und 32-Bit-Datenpfaden, wobei die Ladeanweisung wie folgt lautet
|OPT-Code|rs|rd|sofort|
|6 Bits |5 Bits|5 Bits|16 Bits|
Der OPT-Code ist der Befehlstyp (lw), rd ist, wohin der Wert geladen wird, rs ist das Basisregister und unmittelbar ist der Offset. Mips unterstützt nur den Verschiebungsmodus, was bedeutet:
lw $t9, ($t7)60
ist das gleiche wie
Reg[$t9]<-M[Reg[$t7]+60]
Dies ist eine typische Mips-Ladung, aber was wäre, wenn ich eine indirekte Adressladung in der Steuereinheit implementieren wollte, indem ich die Fehlkonstruktionen für den indirekten Adressmodus ähnlich einem einfachen Cisc-Computer schreibe. Wo sich die Adresse des Werts im Speicher befindet. ist dies in einer Anweisung möglich?
Bearbeiten:
Das ist, was ich in einer Anweisung suche:
Reg[$t9]<-M[Addrs]
oder noch besser
Reg[$t9]<-M[M[Addrs]]
Nicht als eine einzige Anweisung, nein. Grundsätzlich, weil MIPS als 32-Bit-Befehl keinen Platz hat, um sowohl einen Opcode, ein Zielregister als auch eine 32-Bit-Adresse zu speichern.
Auch wenn Ihr spezielles System nur 26 physische Adresszeilen hat, ist es intern immer noch ein 32-Bit-Adressierungsschema. Diese 26 Adresszeilen können die niedrigsten 26 Bit einer 32-Bit-Adresse darstellen, oder sie können durch eine MMU in irgendeiner Form in verschiedene Bereiche des 4-GiB-Adressraums abgebildet werden.
Um einen Wert von einer Adresse in ein Register zu laden, müssen Sie zuerst die Stelle in ein Register laden und dann den Wert relativ zu diesem Register aus dem Speicher laden.
Wenn der gewünschte Wert zufällig innerhalb der ersten 32768 Bytes des Adressraums liegt, können Sie relativ zum Nullregister darauf zugreifen (ein Offset ist vorzeichenbehaftet, sodass nur 15 Bit davon für den niedrigsten Teil des Speichers gültig sind). . Ein negativer Offset von Null würde Ihnen Zugriff auf die oberen 32767 Bytes des (32-Bit-) Speicherplatzes geben.
Der springende Punkt bei RISC im Gegensatz zu CISC ist, dass Sie ein paar sehr grundlegende Anweisungen haben, die Sie aneinander reihen, um zu tun, was Sie wollen, und nicht eine einzelne Anweisung, die das Ganze für Sie erledigt. In RISC gibt es sehr, sehr wenige Befehle, die mehr als einen Taktzyklus benötigen, um ausgeführt zu werden (nur die Verzweigungsbefehle sind wirklich länger), wohingegen in CISC-Befehlen viel mehr Zyklen zur Ausführung benötigt werden. In RISC verwenden Sie nur die Taktzyklen, die Sie für diese eine bestimmte Aufgabe benötigen, und Sie verschwenden keine Taktzyklen für Anweisungen mit erweiterter Länge, die das tun, was Sie wollen, und andere Dinge, die in anderen Situationen nützlich sein könnten.
Außerdem sorgt RISC für besseres Multitasking, da jede Anweisung im Allgemeinen nur einen Zyklus umfasst, sodass Interrupts schneller auftreten können. Wenn bei CISC eine Anweisung beispielsweise 20 Zyklen zur Ausführung benötigt, kann das System keinen Interrupt ausführen, bis es diese Anweisung beendet hat.
Majenko
Reg[$t9]<-M[addr]
das, wonach Sie suchen?PIRATEN FIFI