Grundzüge der Informatik II - Technische Universität Darmstadt
Transcription
Grundzüge der Informatik II - Technische Universität Darmstadt
Kapitel 6 (1. Teil MIPS): MIPS Befehle Technische Grundlagen der Informatik 2 SS 2009 R. Hoffmann FG Rechnerarchitektur Technische Universität Darmstadt In Anlehnung an das Patterson/Hennessy: Computer Organization & Design, 2 nd Edition, Chapter 3, 5 Inhalt Befehlssatz allgemein RISC und CISC MIPS Speicherorganisation Befehle add load, store Unbedingter Sprung jump Bedingter Sprung beq Vergleich slt Register-indirekter Sprung Konstanten im Befehl Konstruktion einer ALU für MIPS ANHANG Weitere Befehle Zusammenfassung der Adressierungsarten Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD 6–2 Wiederholung Grundprinzipien des VonNeumann-Rechners: Programme und Daten werden in einem gemeinsamen Speicher abgelegt und können dort gelesen und geschrieben werden. Daten und Befehle werden als Binärwörter repräsentiert. Dies ist das Prinzip des speicherprogrammierbaren Rechners (Stored Program Computer). Stärken dieses Konzepts Daten und Programme können beliebig im Speicher angeordnet werden. Programmstart erfolgt einfach durch Angabe einer Speicheradresse Programme können auch als Daten interpretiert und sogar während der Laufzeit modifiziert werden! Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD 6–3 Sichtweise: Formale Sprache Die Maschine versteht (interpretiert) die Maschinenbefehle (in Form von Binärcodes) Die Maschinenbefehle definieren eine „Maschinensprache“ Die Assemblersprache ist eine symbolische Form der Maschinensprache, die im wesentlichen 1:1 auf die Maschinensprache durch den Assembler übersetzt wird. Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD Befehlssatz allgemein (1) 6–4 Entwurf von Befehlssätzen Entwurfsziele Unterstützung bestimmter Anwendungen/Programmiersprachen Spezialrechner oder möglichst vieler Anwendungen/Programmiersprachen Universalrechner maximiere Rechenleistung (performance) minimiere Kosten reduziere Entwurfszeit Nebenbedingungen geeignet für den Compilerbauer beschränkte Hardware-Ressourcen geringer Stromverbrauch Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD Befehlssatz allgemein (2) 6–5 RISC-Rechner RISC = Reduced Instruction Set Computer 1. (Load-Store-Architektur) Die Rechenoperationen finden nur auf Operanden statt, die sich in den Registern befinden. 2. (Einfache Befehle mit fester Wortlänge): Vereinfacht die Hardware-Implementierung und beschleunigt die Ausführung (Pipelining) Hauptspeicher load Registersatz operate store ALU Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD 6–6 6–7 CISC-Rechner Complex Instruction Set Computer Die Befehlssatz besteht aus einem Mix von einfachen und komplexen Befehlen. Die Wortlänge der Befehle variiert je nach Komplexität und unterzubringender Informationsmenge Operationen können neben Registeroperanden auch auf Speicheroperanden definiert sein. Beispiele für komplexe Befehle Direkte Operationen auf Speicherzellen m[adr1] := m[adr2] + m[adr3] Vektorbefehle können komplette Vektoren auf einmal verarbeiten, implementiert in so genannten Vektorrechnern Pentium MMX-Befehle (Multimedia-Erweiterung) zur Unterstützung der Verarbeitung von grafischen Pixel-Vektoren SSE-Befehle (Streaming SIMD Extensions) SIMD: Single-InstructionMultiple-Data, z.B. Operationen auf 4 * 32 bit Daten Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD Vergleich RISC CISC RISC CISC klein groß wenige viele fest variabel Sprache C auch andere, z. B. JAVA nein ja Aufwand für HardwareOptimierung klein .. groß groß HardwareImplementierungsaufwand klein .. groß groß Anzahl Befehle Adressierungsarten Befehlswortlänge Sprachorientierung der Maschinenbefehle komplexe Befehle Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD 6–8 Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD Register-Architekturen 6–9 © Verlag Morgan Kaufmann (Patterson/Hennessy) Wir haben den prinzipiellen Aufbau und die Arbeitsweise eines Rechners am Beispiel des DINATOS kennen gelernt. Beispiel für eine Akkumulatormaschine und Grundprinzip für CISCRechner Implementierung steht als Softcore zur Verfügung Im folgenden wollen wir die MIPS-Architektur kennenlernen Beispiel für einen RISCRechner ISA-Architektur: einfach, überschaubar, mit allen wichtigen Konzepten eingesetzt von Silicon Graphics, NEC, Nintendo, Sony u. a., Embedded Syst. entwickelt seit 1981 J. Hennessy – Stanford Univ. MIPS = Microprocessor without interlocked pipeline stages ISA = Instruction Set Architecture Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD Überleitung zur MIPS-Architektur 6–10 Addiere die Werte der beiden Variablen b und c und weise das Ergebnis der Variablen a zu add a, b, c // a b+c Alle Arithmetikbefehle haben genau 3 Variablen: Ergebnis, Operand1, Operand2 Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD MIPS-Befehle: Erstes Beispiel 6–11 Wirkung MIPS-Assembler a b + c; add a, b, c d a - e; sub d, a, e ... oder etwas komplizierter: f(g+h)–(i+j) t0 t1 temporäre Variable add t0, g, h add t1, i, j sub f, t0, t1 Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD Höhere Programmierspr. Assembler 6–12 Register, Speicherworte, Befehle sind 32 Bit breit Register allgemein dienen zum Zwischenspeichern der Operanden feste, identische Länge (Wortbreite, word): derzeit typischerweise 32 Bit (künftig 64 Bit) MIPS: 32 Register mit je 32 Bit Register mit spezieller Funktion: Register 0, 31 frei benutzbare Register: Register 1, 2, ..., 30 Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD 32-Bit-Maschine, Register 6–13 Symbolische Bezeichnung der Register entsprechend der Nutzung im GNU C Compiler (vgl. Patterson/Hennessy, Seite A-23, Figure A.10) Symbol. Name Nr. Funktion, typische Verwendung $zero $at $v0, $v1 $a0 ... $a3 $t0 ... $t7 $s0 ... $s7 $t8 ... $t9 $k0, $k1 $gp $sp $fp $ra 0 1 2, 3 4-7 8-15 16-23 24-25 26, 27 28 29 30 31 der konstante Wert 0 reserviert für Assembler Resultatwerte und Ausdrückeevaluierung (not saved) Argumente Zwischenwerte (temporär, not saved) gesicherte Werte (saved) weitere Zwischenwerte (not saved) Betriebssystem (OS kernel) globaler Zeiger (global pointer) Zeiger auf Kellerspeicher (stack pointer) Rahmenzeiger (frame pointer) Rücksprungadresse (return address) saved: sollen beim Procedure Call gerettet werden Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD MIPS GNU C Registerbenutzung 6–14 Programmiersprache C f =(g+h)–(i+j) add $t0, $s1, $s2 add $t1, $s3, $s4 sub $s0, $t0, $t1 Die Variablen der C-Anweisung wurden der Reihe nach den Registern $s0 - $s4 zugeordnet. Wie kommen die Variablenwerte in die Register? Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD Das „alte“ Beispiel mit Registern 6–15 Variablen, Felder und andere Datenstrukturen werden im Speicher gehalten. Zur Verarbeitung werden die Daten aus dem Datenspeicher gelesen und in die Register geladen (load). Die Ergebnisse werden anschließend zurück geschrieben (store). weiteres dazu später Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD Load und Store 6–16 Speicher-Organisation Speicher: Vektor von Speicherzellen, jede Speicherzelle wird durch eine Nummer (Speicheradresse) identifiziert Interpretation als Bytevektor 232 Bytes mit Byteadressen von 0 bis 232 –1 Der Speicher wird entweder als Bytevektor oder als Wortvektor interpretiert. Byteadresse Byteadresse dient zum Adressieren eines Bytes. Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD 6–17 230 Worte mit Wortadressen 0, 4, 8, ... 232 – 4 Wortadresse dient zum Adressieren eines Wortes. Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD Interpretation als Wortvektor 6–18 Ausgerichtet, Aligned words Die Wortadresse ist durch 4 ohne Rest teilbar. Dadurch effizientere Speicher-(RAM-)Zugriffe, 1 Zugriff/Wort 0, 4, 8, ... Worte müssen beim MIPS aligned sein. Weiterer Begriff Wortindex = AlignedWortadresse/4 Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD Alignment 6–19 Byte-, Wort-, Indexadressierung Byteadressierung Byteadressen N N+1 N+2 N+3 N+4 Der Speicher wird als Bytevektor gesehen Wortadressierung Indexadressierung Wortindex Wortadressen N i = N/4 N+ 4 i+1 = (N+4)/4 Der Speicher wird als Wortvektor gesehen Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD 6–20 Big-Endian: Der Speicheradresse N ist das Most Signficant Register Byte zugeordnet (beim LOAD/STORE). (MIPS, Motorola, PowerPC, ARM, AVR) Wortadressierung Speicherwort N Big-Endian Zuordnung Most Significant Byte Registerwort Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD Big-Endian Byte Ordering 6–21 Little-Endian Byte Ordering Little-Endian: Der Speicheradresse N ist das Least Significant Register Byte zugeordnet. (Intel-Prozessoren, VAX) Wortadressierung N N+3 Speicherwort Little-Endian Zuordnung Registerwort Least Signficant Byte Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD 6–22 N sei aligned LoadWord von der Speicheradresse N in das Register Big-Endian und Little-Endian liefert dasselbe Ergebnis aber bei der byteweisen Übertragung bei Big-Endian wird das Register von links aufgefüllt, während es bei Little-Endian von rechts aufgefüllt wird. Nach der Übertragung des ersten Bytes Little-Endian: Niederwertige Stellen können schon weiter verabeitet werden, z.B. Addition Big-Endian: Höherwertige Stellen können schon weiter verarbeitet werden, z.B. Vergleich Beachten beim Lesen/Schreiben von Binärformaten: BigEndian: JPEG, LittleEndian: BMP, GIF Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD Vergleich 6–23 Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD MIPS Befehle (teilweise) 6–24 op: rs: rt: rd: „opcode“ ; Grundtyp des Befehls (operation code) erster Registeroperand (Registernummer) zweiter Registeroperand (Registernummer) Zielregister (Registernummer) shamt: „shift amount“, für Schiebeoperationen verwendet funct: „Funktionscode“; Ergänzung zum op-Feld: weitere Spezifikation der durchzuführenden Operation op rs rt rd 6 Bit 5 Bit 5 Bit 5 Bit shamt funct 5 Bit 6 Bit Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD Arithmetisches Format, Register-Format, R-Format 6–25 Additionsbefehl (add) Beispiel: MIPS-Assembler: add $t0, $s1, $s2 Dezimaldarstellung: rs rt 0 17 18 rd 8 0 funct op-Erweiterung op = Addition (Quell-) Operandenregister Zielregister 32 hier unbenutzt Binärdarstellung: 000000 10001 10010 01000 00000 100000 6 Bit 5 Bit 5 Bit 5 Bit 5 Bit 6 Bit Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD 6–26 Registeradressierung: Operand ist Registerinhalt. Im Befehl stehen drei Registeradressen: rs : register source1 rt : register source2 rd: register destination Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD add: Verwendete Adressierungsart „R“ 6–27 Ladebefehl lw: load word Speicherbefehl sw: store word load Register store Speicher lw und sw sind die einzigen Befehlstypen, die auf Speicher zugreifen! LOAD-STORE-Architektur Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD Ladebefehl (lw) und Speicherbefehl (sw) 6–28 Datentransfer-Format „I“ op: opcode rs: Nummer des Basisadressregisters rt: Zielregister (Registernummer) offset-address: Konstante, die Offset bzgl. Basisregister angibt (s. nächste Folie) op rs rt 6 Bit 5 Bit 5 Bit offset-address 16 Bit lw, sw benötigen 2 Register und 1 Konstante als Array-Offset op-Kodierung von lw ist 35 (dezimal) bzw. 100011 (binär) op-Kodierung von sw ist 43 (dezimal) bzw. 101011 (binär) Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD load/store: Verwendetes Befehlsformat „I“ 6–29 Basisadressierung Effektive Speicheradresse ea (des Speicheroperanden) ist die Summe von Registerinhalt (Basisregister) und Offset-Address im Befehl: ea = (rs) + Address Offset Basisadresse EffektiveAdresse = Basisadresse + OffsetAdress Konstante (Offset-Adresse) Basisregister z. B. 32($s3) Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD load/store: Verwendete Adressierungsart 6–30 Beispiel C: A[8] = h + A[8] Anfangsadresse des Vektors A steht in s3, h steht in s2 32 = Byte-Offset = 8 * 4 MIPS: lw add sw $t0, 32($s3) $t0, $s2, $t0 $t0, 32($s3) // t0 m[32+s3] // t0 s2+t0 // t0 m[32+s3] bei sw steht die Zieladresse rechts Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD 6–31 Unbedingter Sprungbefehl j Label (jump to Label) PC Label<<2 Es erfolgt ein unbedingter Sprung zum Sprungziel (target address) Befehlsformat J (für Jump) 2 op 6 Bit 2 Label Sprungziel (Wortindex) 26 Bit 2500 Beispiel: j 10000 (Springe an die Befehlsadresse 10000=4*2500) (Wortadresse) Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD 6–32 6–33 jump: Verwendete Adressierungsart Pseudodirekte Adressierung: Sprungzieladresse setzt sich aus 26 Bit Label, verschoben nach links um 2 Bitpositionen und den oberen 4 Bits des PC (vorher inkrementiert um 4) zusammen. PC {(PC+4)[31:28] , (Label<<2)} Ergebnis: Der Sprung erfolgt absolut innerhalb der Seite, die durch die oberen 4 Bits von PC+4 vorgegeben sind. 5. Pseudodirect addressing op Sprungzielindex Label Memory 26 <<2 28 Word PC+4 32 [31:28] 4 Index des Folgebefehls Sprungzieladresse (Byteadresse) Befehl am Sprungziel Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD 5. 6–34 Bedingter Sprung beq rs, rt, Label (branch if equal) if (rs=rt) then goto (PC+4) + (Label<<2) Befehlsformat I (für Immediate) 4 op 6 Bit Beispiel 4 rs rt reg1 5 Bit reg2 5 Bit 17 18 genauer s. 6-35 Label Sprungziel (Wortindex) relativ zu PC 16 Bit 25 if (r17 = r18) then goto (PC+4) + 25*4 Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD beq: Verwendete Adressierungsart Wie kann man Sprungziele größer als 216-1 realisieren? Beobachtung: Verzweigungen in Schleifen und Fallunterscheidungen haben Sprungadressen „in der Nähe“ des aktuellen Befehls PC-relative Adressierung: Sprungzieladresse (branch target address) ist PC (PC + 4) + signExt(Label)<<2 4. PC-relative addressing op rs rt Sprungzielindex Label 16 sign ext. Memory 32 <<2 32 Word + PC+4 32 32 Byte-Adresse des Folgebefehls Sprungzieladresse (Byteadresse) Befehl am Spungziel Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD 6–35 bne rs, rt, Label (branch if not equal) Wenn die Registerinhalte ungleich sind, wird ein relativer Sprung, wie bei beq, durchgeführt. op = 5 Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD Bedingter Sprung 6–36 Compare slt rd, rs, rt (set on less than) if (rs < rt) then rd 1 else rd 0 Die Bedingung < wird berechnet und in rd gespeichert. Sie kann dann anschließend durch beq oder bne zum Verzweigen benutzt werden. Format R (für Register) 0 op 6 Bit 0 rs rt rd 0 rs 5 Bit rt 5 Bit rd shamt funct 5 Bit 5 Bit 6 Bit 18 19 17 0 Beispiel: slt $s1,$s2,$s3 42 42 Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD 6–37 Register-indirekter Sprung jr rs (jump register) Springe zu der Programmadresse, die in dem Register rs steht Anwendungen: case, Unterprogramm-Rücksprung Format R 0 OPC 6 Bit 0 rs rs 5 Bit 31 0 rt 5 Bit 0 Beispiel: jr $ra 0 0 8 rd shamt funct 5 Bit 5 Bit 6 Bit 0 0 8 // ra = Register 31 Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD 6–38 Schwächen der bisherigen Befehle: Die Verwendung von Konstanten ist unhandlich: Man muß entweder ein spezielles Register bereitstellen ($zero) oder man muss die Konstanten im Speicher an bekannten Stellen ablegen und erst in ein Register laden. Da Konstanten (z. B. für Inkrement/DekrementOperationen bei Datenzugriffen in Schleifen) häufig auftreten, ist ein verbesserter Zugriff auf (kleine) Konstanten wünschenswert. Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD Bisherige Adressierungsarten 6–39 I-Befehlsformat (I: immediate, unmittelbar, direkt): Beispiel: Dezimaldarstellung op rs rt 6 Bit 5 Bit 5 Bit MIPS: 8 addi $sp, $sp, 4 29 29 immediate 16 Bit // $sp = $sp + 4 4 Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD Konstanten als Direkt-Operanden im Befehl 6–40 maximal 32 Bits große Konstanten (d. h. 232-1 = 4,29... 109) Der Befehl lui (load upper half word immediate) lädt angegebene Konstante in die höherwertigen 16 Bits des Zielregisters. Beispiel: lui $t0, 255 Binärdarstellung ergibt Inhalt von $t0 001111 00000 01000 0000 0000 1111 1111 0000 0000 1111 1111 0000 0000 0000 0000 Danach Setzen der niederwertigen 16 Bits von $t0 z. B. mit addi $t0, $t0, 2304 Inhalt von $t0 0000 0000 1111 1111 0000 1001 0000 0000 Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD Behandlung großer Konstanten 6–41 Im folgenden wird der Entwurf einer ALU für MIPS beschrieben. Dabei wird die ALU schrittweise vervollständigt. Ziel Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD Konstruktion der ALU für MIPS 6–42 6–43 Ziel: ALU als Schalkette Operation a0 b0 CarryIn ALU0 Less CarryOut Result0 a1 b1 0 CarryIn ALU1 Less CarryOut Result1 a2 b2 0 CarryIn ALU2 Less CarryOut Result2 a31 b31 0 CarryIn ALU31 Less and, or, add, sub, slt Zero Result31 Set Overflow Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD Bnegate Konstruktion der ALU (1. Schritt) : 1-Bit-ALU Diese 1-Bit-ALU realisiert nur die Operationen AND, OR und Addition. Auswahl der Operation über einen Multiplexer Operation CarryIn a 0 1 2 b CarryOut Result Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD 6–44 (2. Schritt) Binvert Operation a - b = a + (-b) Subtraktion wird auf Addition und Komplementbildung zurück geführt. (-b): Zweier-Komplement bedeutet: bitweise Invertierung von b und Addition von 1 CarryIn a 0 1 b 0 2 Result Hardware-Erweiterungen: Jeder 1-Bit-Block wird an einem Eingang um eine Inverterschaltung und einen Multiplexer erweitert. Bei der Gesamtschaltung wird der CarryIn-Eingang der niederwertigsten Bit-Stufe bei einer Subtraktion auf „1“ gesetzt. 1 CarryOut Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD Erweiterung 1-Bit ALU für Subtraktion (a-b) 6–45 Zusätzlich wird die Subtraktion benötigt, die auch zum Vergleichen verwendet wird. Realisierung des set-on-less-than Befehls (slt) Zur Erinnerung: slt ist ein arithmetischer Befehl produziert 1, falls rs < rt, und 0 sonst verwende Subtraktion: (a – b) < 0 impliziert (a < b) Realisierung des Gleichheitstests: beq $t5, $t6, $t7 verwende Subtraktion: (a – b) = 0 impliziert (a=b) Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD Vergleich durch Subtraktion 6–46 Binvert Die Operation slt $t0, $s0, $s1 ist definiert als: if ($s0 < $s1) $t0 = 1; else $t0 = 0; Operation CarryIn a 0 1 b 0 Result Um dies zu realisieren, muß die ALU die 32-Bit Konstanten „0“ und „1“ erzeugen können. Dazu wird jede Bit-Stelle zunächst um einen „Less“Eingang erweitert, der für alle Bits (außer dem niederwertigsten) den Wert „0“ trägt. 2 1 Less 3 CarryOut 6–47 Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD (3. Schritt) Erweiterungen für slt (1) Erweiterungen für slt (2) Das niederwertigste Bit muß abhängig vom Vergleich von a und b auf „0“ oder „1“ gesetzt werden. Es gilt: a<b a-b < 0 a<b Result.bit31=1 Das Resultat von a-b (höchstwertige Stelle) wird also als Set-Ausgang herausgeführt und an den Less-Eingang des niederwertigsten Bits angelegt. Zusätzlich erhält das höchstwertige Bit eine OverflowDetektion. Operation CarryIn a 0 1 Result b 0 2 1 Less 3 Set Overflow detection Overflow Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD Binvert 6–48 6–49 Resultierende 32-Bit ALU Die vollständige 32-Bit Schaltung mit Hardware für die slt-Operation CarryIn a0 b0 CarryIn ALU0 Less CarryOut a1 b1 0 CarryIn ALU1 Less CarryOut a2 b2 0 CarryIn ALU2 Less CarryOut Operation Result0 Result1 Result2 CarryIn a31 b31 0 CarryIn ALU31 Less Set a-b < 0 Result31 Set Overflow Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD Binvert 6–50 (4. Schritt) Vollständige 32-Bit ALU Operation a0 b0 CarryIn ALU0 Less CarryOut Result0 a1 b1 0 CarryIn ALU1 Less CarryOut Result1 a2 b2 0 CarryIn ALU2 Less CarryOut Result2 a31 b31 0 CarryIn ALU31 Less Binvert und CarryIn werden zu Bnegate zusammengefaßt. Es wird eine einfache Schaltung zum Test auf „0“ mit dem Ausgang Zero hinzugefügt. Zero Steuereingänge: Die drei Leitungen Bnegate und Operation (2 Bit) codieren die ALU-Operationen: Result31 Set Overflow 0 0 0 1 1 00 01 10 10 11 = = = = = and or add subtract slt Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD Letzte Erweiterungen: Bnegate Eine 32-Bit ALU für MIPS-Befehlssatz lässt sich schrittweise entwerfen: Multiplexer zur Auswahl des gewünschten Resultates verwenden. Subtraktion kann durch Addition des Zweier-Komplements effizient realisiert werden. Durch mehrfache Verwendung einer 1-Bit ALU kann 32-Bit ALU realisiert werden. Heute: Verwendung von Synthese-Tools Eingabe: Hardware-Beschreibung Ausgabe: optimierte ALU Benutzer: Steuerung der Synthese über geeignete Beschreibungsformen, Modularisierungen, Verwendung von bestimmten Komponenten, Einstellung von Parametern. Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD Was haben wir bis jetzt erreicht ? 6–51 Weitere Befehle Ganzzahlarithmetik-Befehle Beispiel load und store Unterprogramm-Sprung Zeichen und byteweise Zugriffe Byte-Ladebefehl Signed Byte-Ladebefehl Unsigned Vergleichskonstante im Befehl slti Vergleichsbefehl Signed/Unsigned Logische Operationen Zusammenfassung der Adressierungsarten Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD ANHANG 6–52 2 neue Register Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD Ganzzahlarithmetik-Befehle 6–53 8+s1 lw $s0, 8($s1) // s0 m[8+s1] sw $s0, 16($s1) // s0 m[16+s1] Bemerkung: Die Konstante wird auch als Offset bezeichnet, eine konstante Distanz zu der Basisadresse. Die Basisadresse kann auch als Indexregister fungieren, d. h. durch Inkrementieren der Basisadresse können fortlaufende Elemente eines Vektors adressiert werden. Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD Beispiel load und store 6–54 jal Label (jump and link) Springe zu der Programmadresse Label<<2 (Anfang des Unterprogramms und rette Rücksprungadresse PC+4 in $ra) Anwendung: Sprung zu einem Unterprogramm Format J 3 op 6 Bit 3 Label Sprungziel (Wortindex) 26 Bit 2500 Beispiel: 256: jal 10000 (Springe an die Programmadresse 10000=2500*4) und merke 256+4 in $ra Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD Unterprogramm-Sprung 6–55 1. (Genaueres über die Programmierung von Prozeduren ist Stoff von GDI 3) Parameter bereit stellen, so dass Prozedur darauf zugreifen kann: 2. Ablaufsteuerung (control) der Prozedur übergeben: 3. 4. 5. jal Prozeduradresse (jump and link) Sonderbefehl für Prozedurausführung: springt zur angegebenen Adresse und speichert die Adresse des folgenden Befehls in $ra Benötigten Speicherbereich für Prozedur bereitstellen Prozedur ausführen Ergebniswert so bereitstellen, dass aufrufendes Programm darauf zugreifen kann: 6. Argumentregister $a0, $a1, $a2, $a3 Eingangsparameter bleiben durch Prozedur unverändert Ergebniswertregister $v0,$v1 Ablaufsteuerung an Aufrufstelle zurückgeben: durch Sprung zurück zum Ausgangspunkt: jr $ra (jr: jump register, ra: return address) Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD Schritte bei der Ausführung einer Prozedur 6–56 „Daten“ sind nicht immer nur Zahlen, häufig auch Texte, d. h. Zeichenketten (strings). Einzelne Zeichen (character) werden durch einzelne Bytes repräsentiert. Befehlssätze verfügen daher über Byte-Lade- und ByteSpeicher-Operationen zur Zeichenverarbeitung. Ladeoperation: lb $t0, 0($sp) (load byte) Lädt ein Byte aus dem Speicher (vom Stack markiert durch sp) und platziert es in die rechts gelegenen (niederwertigen) acht Bits eines Registers. Speicheroperation: sb $t0, 0($a1) (store byte) Speichert die niederwertigen acht Bits eines Registers in die bezeichnete Speicherposition Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD Zeichen und byteweise Zugriffe 6–57 Byte-Ladebefehl Signed lb (load byte) interpretiert das zu ladende Byte als vorzeichenbehaftete Zahl, d. h. wenn das vorderste Bit des Bytes „0“ ist, müssen die vorderen 24 Bit des Zielregisters ebenfalls „0“ sein, wenn das vorderste Bit „1“ ist, müssen die vorderen 24 Bit des Zielregisters ebenfalls „1“ sein. Die Operation, die das durchführt, heißt „sign extension“. mit lb zu ladendes Byte: Zielregister 00000000 00000000 00000000 00001101 mit lb zu ladendes Byte: Zielregister 00001101 10001101 11111111 11111111 11111111 10001101 Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD 6–58 Byte-Ladebefehl Unsigned lbu (load byte unsigned) interpretiert das zu ladende Byte als vorzeichenlose Zahl, d. h. unabhängig vom Wert des zu ladenden Bytes werden die oberen 24 Bits des Zielregisters auf „0“ gesetzt. mit lbu zu ladendes Byte: Zielregister 00000000 00000000 00000000 00001101 mit lbu zu ladendes Byte: Zielregister 00001101 10001101 00000000 00000000 00000000 10001101 Da ein Zeichen (character) in der Regel durch ein Byte dargestellt wird (und Zahlen durch mehr als ein Byte), wird lbu fast ausschließlich verwendet. Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD 6–59 Weiteres Beispiel: bisher Immediate Adressierung slt $t0, $s1, $s2 slti $t0, $s1, 10 # falls $s1 < 10: $t0=1, sonst $t0=0 Dezimaldarstellung 10 8 17 Binärdarstellung 001010 01000 10001 # falls $s1 < $s2: $t0=1, sonst $t0=0 10 0000 0000 0000 1010 Vorteil der direkten Adressierung: Die Verwendung häufig vorkommender, kleiner Konstanten wird effizient (schnell) ausgeführt ! Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD Vergleichskonstante im Befehl slti 6–60 Vergleichsbefehl Signed/Unsigned slt und slti (set on less than [immediate]) interpretieren die zu vergleichenden Bitfolgen als vorzeichenbehaftet, sltu und sltiu (set on less than [immediate] unsigned) interpretieren die zu vergleichenden Bitfolgen als vorzeichenlos, d. h. Zahlen mit einer „1“ im vordersten Bit sind kleiner als Zahlen mit einer „0“ ganz vorne. d. h. Zahlen mit einer „1“ im vordersten Bit sind größer als Zahlen mit einer „0“ ganz vorne. Beispiel: $s0 = 11111111 11111111 11111111 11111111 $s1 = 00000000 00000000 00000000 00000001 slt $t0, $s0, $s1 $t0 = 1 signed: kleiner sltu $t0, $s0, $s1 $t0 = 0 unsigned: größer Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD 6–61 Bitweises logisches UND (and): Setzt alle Bit-Positionen des Zielregisters auf „1“, die sowohl im ersten als auch im zweiten Quellregister auf „1“ stehen. Beispiel: and $t0, $t1, $t2 $t2 = 00110000 00000111 00111100 11111111 $t1 = 01111000 00011100 11000011 11110000 $t0 = 00110000 00000100 00000000 11110000 Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD Logische Operationen 6–62 Bitweises logisches ODER (or): Setzt alle Bit-Positionen des Zielregisters auf „1“, die entweder im ersten oder im zweiten Quellregister auf „1“ stehen. Beispiel: or $t0, $t1, $t2 $t2 = 00110000 00000111 00111100 11111111 $t1 = 01111000 00011100 11000011 11110000 $t0 = 01111000 00011111 11111111 11111111 Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD Logische Operationen 6–63 1. Immediate-Adressierung (Konstantendressierung): Operand ist Konstante im Befehl selbst. Format I: addi rs,rt, IMMEDIATE 2. Registeradressierung: Operand ist Registerinhalt Format R 3. Basisadressierung: Operandenadresse ist Summe von Basisregisterinhalt und Offset-Address im Befehl Format I, load ,store Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD Zusammenfassung der Adressierungsarten 6–64 4. PC-relative Adressierung: Sprungzieladresse (branch target address) ist (PC + 4) plus relativer Sprungzielindex (Label) im Befehl, verschoben nach links um 2 Bitpositionen 4. PC-relative addressing op rs rt Format I: beq rs,rt, Label Label 16 sign ext. Memory 32 <<2 32 Word + PC+4 32 32 5. Pseudodirekte Adressierung: Sprungzieladresse setzt sich aus 26 Bits im Befehl (Label), verschoben nach links um 2 Bitpositionen und den oberen 4 Bits des PC (inkrementiert um 4) zusammen. 5. Pseudodirect addressing op Format J: j Label Label Memory 26 <<2 28 Word PC+4 [31:28] 32 4 Technische Grundlagen der Informatik 2, SS 09, R. Hoffmann, TUD Zusammenfassung der Adressierungsarten 6–65