- DLX
-
Der DLX-Mikroprozessor ist eine hypothetische Prozessorarchitektur die von John L. Hennessy und David A. Patterson (den ursprünglichen Designern der MIPS und Berkeley RISC-Architektur) entwickelt wurde. Er wurde in dem - von beiden gemeinsam verfassten - Buch 'Computer Architecture: A Quantitative Approach' vorgestellt. Der DLX-Prozessor wird mit einem RISC-Befehlssatz (Reduced Instruction Set Computing) angesteuert und besitzt 32 Register, wobei R0 immer fest verdrahtet mit 0 ist. Der Hauptspeicherzugriff erfolgt byteweise. Weiterhin erfolgt der Speicherzugriff aligned und im Big Endian-Modus. Die Befehlswortlänge beim DLX beträgt 32 Bit; es gibt drei Befehlsformate (I-, R- und J-Format).
Inhaltsverzeichnis
Die Bezeichnung DLX
Für die Herkunft der Bezeichnung "DLX "gibt es mehrere mögliche historische Erklärungen:
- DLX wie deluxe
- DLX als römische Zahl: 560 (Mittelwert aus den damals üblichen Prozessor-Architekturen: AMD 29K, DECstation 3100, HP 850, IBM 801, Intel i860, MIPS M/120A, MIPS m/1000, Motorola 88000, RISC 1, SGI 4D/60, SPARCstation-1, Sun-4/110, Sun-4/260)
Registerbedeutungen
- R0 null; unveränderlich
- R1 reserviert für den Assembler
- R2-R3 Funktionsrückgabewerte
- R4-R7 Funktionsparameter
- R8-R15 beliebig
- R16-R23 Registervariablen
- R24-R25 beliebig
- R26-R27 reserviert für das Betriebssystem
- R28 Globaler Pointer
- R29 Stackpointer
- R30 Registervariable
- R31 Rücksprungadresse
DLX Befehlsformate
Die Befehlsformate definieren die Aufteilung des 32-Bit-Befehls in Felder. Bei allen drei Formaten sind die ersten 6 Bit immer der Opcode.
I-Format
Befehle dieses Formates sind Load/Store Instruktionen, arithmetische Befehle oder bedingte/unbedingte Sprünge. Die Instruktion besteht aus einem Quellregister rs1 und einem Zielregister rd, zusätzlich sind 16 Bit für den Immediate-Wert vorgesehen, die je nach Befehlstyp benutzt werden.
0 5 6 10 11 15 16 31 ========================================== | opcode | rs1 | rd | immediate | ==========================================
Beispielbefehle: LW, SW, JALR
R-Format
Dieses Format wird benutzt um Operationen auf Registern durchzuführen, dabei werden die Quellregister rs1 und rs2 mit der Register-ALU Operation func ausgeführt, und das Ergebnis auf das rd–Register abgelegt.
0 5 6 10 11 15 16 20 21 31 ========================================== | opcode | rs1 | rs2 | rd | func | ==========================================
Beispielbefehl: SLT, ADD, SUB
J-Format
Befehle dieses Formates sind Sprungbefehle. Die (dist)anz wird einfach auf den Befehlszähler hinzuaddiert.
0 5 6 31 ========================================== | opcode | dist | ==========================================
Beispielbefehle: J, JAL
DLX Befehlssatz
Dies ist ein Auszug aus dem DLX-Befehlssatz ohne Floating-Point-Befehle.
Instruction Instruction meaning LB / LH / LW R1,val(R2) Load byte / load half word / load word LBU / LHU R1,val(R2) Load byte unsigned / load half word unsigned SB / SH / SW val(R2),R1 Store byte / store half word / store word LHI R1,#val Load high immediate ADD / SUB R1,R2,R3 Add / subtract ADDU / SUBU R1,R2,R3 Add unsigned / subtract unsigned ADDI / SUBI R1,R2,#val Add immediate / subtract immediate ADDUI / SUBUI R1,R2,#val Add immediate unsigned / subtract immediate unsigned AND / OR / XOR R1,R2,R3 And / or / exclusive or ANDI / ORI / XORI R1,R2,#val And immediate / or immediate / exclusive or immediate SLL / SRL / SRA R1,R2,R3 Shift left logical / shift right logical / shift right arithmetic SLLI / SRLI / SRAI R1,R2,#val Shift- left log. / right log. / right arithmetic -immediate SLT / SLE / SEQ R1,R2,R3 Set- less than / less or equal than / equal SLTI / SLEI / SEQI R1,R2,#val Set- less than / less or equal than / equal -immediate SGT / SGE / SNE R1,R2,R3 Set- greater than / greater equal than / not equal SGTI / SGEI / SNEI R1,R2,#val Set- greater than / greater equal / not equal -immediate BEQZ / BNEZ R4,name Branch equal zero / branch not equal zero J name Jump JR R5 Jump register JAL name Jump and link (save return address in R31) JALR R5 Jump and link register (save return address in R31) val: 16 Bit Wert als Adress-Offset oder Immediate-Wert name: 16 oder 26 Bit Adress-Distanz
Siehe auch
Weblinks
Wikimedia Foundation.