lb, lbu: laden eines bytes lh, lhu: Laden eines Halbwortes lw: Laden eines Wortes ld*: Laden eines Doppelwortes la*: Laden einer Addresse li*: Laden eines Immidiate Wertes sb: Speichern eines Bytes sh: Speichern eines Halbwortes sw: Speichern eines Wortes sd*: Speichern eines Doppelwortes addi, addu, addiu sub mult, multu div, divu rem*, abs*, neg*, not* and, andi or, ori xor, xori Datenbewegungsbefehle arithmetisch logische Befehle Schiebe und Rotationsbefehle Gleitkommabefehle Multimediabefehle Programmsteuerbefehle Systemsteuerbefehle Synchronisationsbefehle Nulladdressformat Einaddressformat Zweiaddressformat Dreiaddressformat Little-Endian Big-Endian Einzelbit Ganzzahl Gleitkomma Multimedia Byte Halbwort Wort Doppelwort singned unsigned packed unpacked bcd ascii ieee-754-std f=(-1)\^s * 1.m * 2\^(e-b) 32: Einfache Genauigkeit 64: Doppelte Genauigkeit 80: Erweitertete Lade- und Speicherarchitektur Register- Speicherarchitektur Speicher-Speicher-Architektur Stack- und Kellerarchitektur Akkumulatorarchitektur Intel 8087 - ATAM 862 Atmel Registeraddressierung Unmittelbare Addressierung Direktwertaddressierung Direkte Addressierung Register Indirekte Addressierung Registerindirekte Addressierung mit Autoinkrement/Dekrement Registerindirekte Addressierung mit Verschiebung Indizierte Addressierung Indizierte Addressierung mit Verschiebung Steuereinheit 1.) Befehlsdekodierer 2.) Funktionsdekodierer OpCode RegDst RegWrite Branch ALU-Src ALU-Op Mem-ToReg MemWrite MemToReg MemWrite Branch ALU-Src ALU-Op RegDst RegWrite Funktionsdekodierer Befehlsdekodierer ALU Datenspeicher Befehlsspeicher Befehlsz"ahler Registersatz Vorzeichenerweiterungseinheit 4 x MUX 1 x AND 2 x Addierer 1 x Bit Shifter Funktionsdekodierer 1.) ALU-Op 2.) Func 3.) ALU-Operanden Datenspeicher: - Lesedaten - Schreibedaten - Addresse - WE Registersatz: - Lesedaten-1 - Lesedaten-2 - Schreibedaten - Lese-Register-1 - Lese-Register-2 - Schreiberegister - WE ALU: - ALU-Ergebnis - Null AND: - PCSrc Befehlsdekodierer - Lesedaten - Addresse Befehlsz"ahler - PC (t) - PC (t+1) ALU-Op Func ALU-Operanden 00 x 010 - add x1 x 110 - sub 1x 100000 010 - add OpCode RegDst RegWrite Branch ALU-Src MemToReg MemWrite ALU-Operanden r-type 000 000 1 1 0 0 0 0 10 Verzweigungsbefehle 1.) Bedingt 2.) Unbedingt - eq: equal - ne: not equal - lt: less than - le: less than equal - ge: greater then equal - gt: greater than Absolut: Branch Befehlsz"ahlerrelativ: Jump Befehlsz"ahlerindirekt: Jump Register JAL: Jump and Link: Speichern zus"atzlich die Addresse des Befehls die dem Sprungbefehl folgt j, b*, jr jal jalr beqz*, bnez* beq, bne bgtz, bgez bltz, blez bgtz, bgez blt, ble bgt, bge PC_neu = PC_alt + (i << 2) PC_neu = PC_alt \& (0xf000 0000) | (i << 2) Pipeline Prinzip Pipeline Stufe Pipeline Register 1.) Befehl holen 2.) Befehl dekodieren 3.) Operanden der ALU bereitstellen 4.) Operation in der ALU ausf"uhren 5.) Operanden in Architekturregister zur"uckschreiben IF - Instruction Fetch ID - Instruction Decode/Register Fetch EX - Execute Address, address calculation MEM - Memory Access WB - Write Back 1.) Datenkonflikte 2.) Steuerflusskonflikte 3.) Struktur und Ressourcenkonflikte 1.) In Order Issue in Order Completion 2.) Out Of Order Issue Out Of Order Completion VLIW - Very Long Instruction Word 1.) Statische Sprungvorhersage 1.1.) Predict Always Taken 1.2.) Predict Always Not Taken 1.3.) Predict Backward Taken forward not Taken 2.) Dynamisch 2.1.) Ein Bit Pr"adiktor: Taken, Not Taken 2.2.) Zwei Bit: Predict Strongly Taken, weakly Taken, Strongly Not Taken, weakly not taken