DLX-Mikroprozessor
aus Wikipedia, der freien Enzyklopädie
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 |
[Bearbeiten] 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)
[Bearbeiten] 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
[Bearbeiten] 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.
[Bearbeiten] 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
[Bearbeiten] 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
[Bearbeiten] 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
[Bearbeiten] 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
[Bearbeiten] Siehe auch
[Bearbeiten] Weblinks
- DLX-Architektur, Entwicklung und Funktionsweise (PDF-Datei; 250 kB)
- WinDLX

