Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Ablaufsteuerung (Microcode)

Ähnliche Präsentationen


Präsentation zum Thema: "Ablaufsteuerung (Microcode)"—  Präsentation transkript:

1 Ablaufsteuerung (Microcode)
Toy-Model aus Stunde 7 Rechenwerk Steuerwerk Speicher Akkumulator Register X Befehl Argument(e) Befehle, Argumente, Daten ALU Dekoder PC Arithmetisch-Logische Einheit Ablaufsteuerung (Microcode) C Z Adressbus Datenbus Technische Informatik I (SS 2006)

2 Zusammenfassung Toy-Model Stunde 7
1. Fetch Befehl wird aus Speicher geholt 2. Decode Befehl wird dekodiert und Anzahl der Argument bestimmt 3. Argumente für Befehl holen 4. Operation ausführen 5. Evtl. melde „ich bin fertig“ (z.B. über einen Interrupt) Technische Informatik I (SS 2006)

3 Teil 4: Prozessoren 4d: Technische Informatik I (SS 2006)

4 Als Beispiel: Intel 8086 Designer : Intel
Hersteller: Intel, aber auch (!) AMD, OKI, Siemens Einführungsdatum: Juni 1978 Geschwindigkeit: Mhz Cache: nein Anzahl der Transistoren: 29,000 Herstellungsprozeß: 3 m                                                                                                    Technische Informatik I (SS 2006)

5 Rechenzelle der CPU Was ist ein Register ?
Data Register speichern üblicherweise Integer Zahlen. In einigen CPUs ist der Akkumulator ein spezielles Data Register, implizit genutzt für viele Operationen. Address Register speichern Memory Adressen. In einigen CPUs ist das Index Register ein spezielles Adress Register, welches aber meistens dazu benutzt wird, Zahlen zur Modifizierung von Adressen zu speichern (statt die Adressen selbst). General Purpose Register (GPRs) können beides Daten und Adressen speichern. Floating Point registers (FPRs) sind Data Register für Floating Point Zahlen. Constant Registers speichern read-only Werte (z.B. null, eins, pi, ...). Technische Informatik I (SS 2006)

6 Was ist ein Register ? Vector Register speichern Daten für Vektor Prozessing von SIMD (Single Instruction, Multiple Data) Instruktionen. Special Purpose Register speichern den augenblicklichen Zustand des Programms. stack pointer register flags register control register ( control flags werden vom Programm gesetzt) status register ( status flags werden vom Prozessor gesetzt) Instruction Register speichern die Instruction, die derzeit gerade ausgeführt wird. Technische Informatik I (SS 2006)

7 Register eines 80x86 Technische Informatik I (SS 2006)

8 8086, generelle Register im 8086 nur 16-bit „general“ registers
data registers AX accumulator = Teil der ALU (siehe Toy Model) = Ziel von Rechenoperationen BX base register = Anfangsadresse einer Datenstruktur CX counter register = für Schleifenprogrammierung DX data register = Datenregister für einen Operanden address registers SI source register DI destination register SP stack pointer register BP stack base pointer register aufgeteilt in 2x8 bit (Bsp. AH = high, AL = low) Technische Informatik I (SS 2006)

9 8086, zusätzliche Register segment registers CS code segment register DS data segment register ES extra segment register SS stack segment register andere Register IP instruction pointer register FLAGS flag register Das IP Register zeigt an, wo das Programm im Prozessor in diesem Augenblick (= in diesem clock cycle) Code ausführt. Das IP Register kann vom Programmierer nicht direkt angesprochen werden (damit man das Program nicht modifiziert, während es bereits läuft). Technische Informatik I (SS 2006)

10 Flags Register zeigt den derzeitigen Zustand des Prozessors an
Jedes Bit in diesem Register ist ein flag. Jeder Flag kann 0 oder 1 sein. Beispiele: - overflow flag - interrupt flag - virtual mode flag - trap flag (für Einzelschrittverarbeitung) Technische Informatik I (SS 2006)

11 Programmierung eines 80x86 in Assembler
Technische Informatik I (SS 2006)

12 Was sind Op-Codes ? Vordefinierte Sequenz von Instruktionen, die mit einem einzigen Assembler Befehl aufgerufen werden können. für 8086 Assembler 117 Op-Codes: aaa, aad, aam, aas, adc, add, and, call, cbw, clc, cld, cli, cmc, cmp, cmpsb, cmpsw, cwd, daa, das, dec, div, esc, hlt, idiv, imul, in, inc, int, into, iret, ja, jae, jb, jbe, jc, jcxz, je, jg, jge, jl, jle, jmp, jna, jnae, jnb, jnbe, jnc, jne, jng, jnge, jnl, jnle, jno, jnp, jns, jnz, jo, jp, jpe, jpo, js, jz, lahf, lds, lea, les, lock, lodsb, lodsw, loop, loope, loopne, loopnz, loopz, mov, movsb, movsw, mul, neg, nop, not, or, out, pop, popf, push, push, puchf, rcl, rcr, rep, repe, repne, repnz, repz, ret, rol, ror, sahf, sal, sar, sbb, scasb, scasw, shl, shr, stc, std, sti, stosb, stosw, sub, test, wait, xchg, xlat, xor Technische Informatik I (SS 2006)

13 Op-Code Beispiel #1: MOV
move den Inhalt von Register bx nach Register ax MOV ax, bx (Achtung: Reihenfolge ist 1. Ziel, 2. Quelle) move den Inhalt des Registers ax in das (externe) Memory MOV [address], ax Anmerkung: [...] steht für eine Hex-Zahl Eine Kombination, die nicht möglich ist, ist move von Memory zu Memory, z.B. MOV [address1], [address2] um dies zu erreichen, müssen zwei MOV benutzt werden MOV ax, [address2] MOV [address1], ax Technische Informatik I (SS 2006)

14 Op-Code Beispiel #2: JMP
ändert den Fluß des ausgeführten Codes durch Überschreiben des instruction pointer Register JMP 0x89AB ; (ohne Angabe eines Registers) lädt das IP Register mit dem neuen Wert 0x89AB dies ist der indirekte Weg, einen Befehl auszuführen (weil sich IP Register nicht direkt ansprechen läßt) JMP 0xACDC:0x5578 ; lädt das CS Register mit 0xACDC und das IP Register mit 0x5578 (das sind quasi 2 Operationen in einem Takt-Zyklus) JMP AX ; springt zu dem Wert, der in Register AX gespeichert ist Technische Informatik I (SS 2006)

15 Wozu wird das FLAGS Register genutzt ?
flags werden benötigt z.B. für vergleichende Operationen zwischen 2 Registern (z.B. wenn falls ungleich  wird ein flag=1 gesetzt). Eine jump Operation kann dann das entsprechende flag prüfen und springen, falls das flag gesetzt. Beispiel: cmp ax, bx ; jne do_something ; vergleicht die AX and BX register, und – falls ungleich (jne = jump not equal) – springt zur Marke do_something Technische Informatik I (SS 2006)

16 Einige weitere Op-Codes
ROL = rotate left, ROR = rotate right wichtig für bit-by-bit Datentransfer (z.B. über serielle Schnittstelle) 8 x (sende bit  rotate) = sende 1 byte IRET = return from interrupt DIV = divide = relativ komplexe Rechenoperation xor cx, cx ; wird benutzt um ein Register zu „nullen“ SQRT=x war nicht Op-Code auf 8086, jedoch auf DEC ALPHA Architektur Floating Point Operationen ursprünglich auf separater CPU Intel 8087 (z.B. als PCI Einsteckkarte) Technische Informatik I (SS 2006)

17 Beispiel für 8086 Assembler = Maschinensprache
summe = a + b + c + d; ist für einen Assembler zu kompliziert und muß daher in mehrere Anweisungen aufgeteilt werden. Der 80x86 Assembler kann immer nur zwei Zahlen addieren und das Ergebnis in einer der beiden verwendeten "Variablen" (Akkumulatorregister) speichern. summe = a; summe = summe + b; summe = summe + c; summe = summe + d; und würde beim 80x86 Assembler so aussehen: mov eax,[a] add eax,[b] add eax,[c] add eax,[d] Technische Informatik I (SS 2006)

18 Assembler = Maschinensprache
Einfache if-then-else Konstrukte sind für Assembler auch bereits zu schwierig: if (a==4711) { ... } else { ... } und müssen daher mit Hilfe von gotos ausgedrückt werden: if (a!=4711) goto ungleich ; gleich: goto weiter: ungleich: weiter: Im 80x86 Assembler sieht das dann so aus: cmp eax, jne ungleich gleich: jmp weiter ungleich: weiter: ... Technische Informatik I (SS 2006)

19 Assembler = Maschinensprache
Einfache Zählschleifen werden vom 80x86 Prozessor schon besser unterstützt. Das folgende C Programm for (i=0; i<100; i++) { summe = summe + a; } sieht im 80x86 Assembler etwa so aus: mov cx,100 ; counter register schleife: add ax,[a] ; accumulator register loop schleife Der Loop-Befehl dekrementiert implizit (!) das cx Register (d.h. der Assembler ist bereits etwas „clever“) und führt den Sprung nur aus, wenn der Inhalt des cx Registers anschließend nicht 0 ist. Technische Informatik I (SS 2006)

20 Code Control ohne direkten Zugriff auf das IP Register
Wenn ich das IP Register nicht direkt ansprechen kann, wie weiß ich dann, was gerade im IP Register passiert ?  über Tricks Bsp. lesen d.h. ich will wissen an welcher Adresse im code segment die Start-Adresse von „mach_was“ steht: call mach_was ; mach_was: pop ax dann steht im ax danach die gewünschte Adresse Bsp. schreiben d.h. wie kann ich dann einen bestimmten Op-Code ausführen lassen ? das ist einfach: mov ax, 0x90 ; das ist der op-code für „mach nix“ ;(NOP = no operation) jmp ax Aber: es gibt eine Prefetch-Queue (!) eine bestimmte Anzahl von Befehlen sind bereits beim 80x86 „in der Pipe“ und können von User nicht mehr nachträglich (d.h. nach Laden des Programms) verändert werden Technische Informatik I (SS 2006)

21 Wie adressiert man Speicher ?
Technische Informatik I (SS 2006)

22 Was ist ein Segment ? Es gibt zwei verschiedene Modelle zur Adressierung von Speicher („Memory Access an einer ganz bestimmten Adresse“) lineare Addressierung z.B. Macintosh, VAX, Motorola 68000 segmentierte Addressing z.B. alle 80x86 Prozessoren im REAL modus (Ausnahme: WinNT) 80x86 hat zwei Modi: real mode Speicher-Block 64k SEGMENT ist Inhalt des Segment-Registers OFFSET ist der Offset in diesem segment. insgesamt konnte im Falle des MB Speicher adressiert werden jedoch nur immer 64k zu einem Zeitpunkt protected mode Technische Informatik I (SS 2006)

23 Was ist ein Segment ? nach dem BOOT ist der Prozessor per default im real mode, um in eine lineare Adresse zurück zu übersetzen, wird die Segment Address um 4 bits nach links geshiftet. Die Formel ist: segment*0x10+offset (0x10 = dezimal 16 = binär 10000) 2 Register werden benutzt für eine Speicher-Adresse: 1 Register für Segment, 1 Register für Offset. Beispiel für real mode (nur für real mode) DS hat hexadecimale Zahl 0xDEAD DX hat hexadezimale Zahl 0xCAFE dann würde der Memory-Block starten bei der Adresse 0xDEAD * 0x10 + 0xCAFE = 0xEB5CE 0xEB5CE ist dann eine lineare Adresse Technische Informatik I (SS 2006)

24 Segmentierte Adressierung
Notation segment:offset in dem Beispiel kann die lineare Adrese 0xEB5CE geschrieben werden als 0xDEAD:0xCAFE oder DS:DX. Es gibt einige spezielle Kombinationen von Segment Registern und generellen Registern, die zu wichtigen Adressen zeigen: CS:IP zeigt auf die Adresse, wo der Prozessor sein nächstes byte von dem Code holt (aber: der Benutzer kann hier nicht direkt zugreifen) SS:SP zeigt auf den Ort der Hex-Zahl, die zuletzt auf den Stack gelegt wurde DS:SI wird oft genutzt, um auf die Hex-Zahl zu zeigen, die dann nach ES:DI kopiert wird (Trick, um data segment und extra segment zu verbinden) Technische Informatik I (SS 2006)

25 Adressierung im Protected Mode
80286 hat protected mode Intel Prozessoren ab dem befinden sich nach einem Reset standardmäßig im bekannten Realmode. Der Protected Mode muß erst durch das Setzen eines bits im Steuerregister CR0 aktiviert werden. Dabei ist zu beachten, daß auf das CR0-Register nur über MOV-Befehle zugegriffen werden kann, d.h. eine direkte Manipulation des CR0-Registers ist nicht möglich. ; aktivieren des Protected Mode mov eax,cr0 or eax,1 ; setzt protected mode Bit (Bit 0) mov cr0,eax 4 GB adressierbarer Speicher ! über virtuelle Adresse Technische Informatik I (SS 2006)

26 Adressierung im Protected Mode
Unter einer virtuellen Adresse ist dabei ein 16 Bit Wert (der sogenannte Selektor) und eine 32 Bit-Offsetadresse zu verstehen Wie im Realmode muß der 16 Bit Wert (Selektor) zunächst in eines der Segmentregister (CS, DS, ES, FS oder GS) geladen werden, damit mit der Offsetadresse linear vom Segmentbeginn aus auf den Arbeitsspeicher zugegriffen werden kann. Der Selektor enthält dabei jedoch nicht die Adresse des Segmentes im Arbeitsspeicher (wie es im Realmode der Fall ist), sondern die Nummer eines Segmentbeschreibers (Deskriptor). Ein Deskriptor hält dabei den physischen Segmentstart und die Länge des Segmentes fest. Technische Informatik I (SS 2006)

27 Adressierung im Protected Mode
Technische Informatik I (SS 2006)

28 Intel: Weiterentwicklungen des 8086
80286: Läuft nach Einschalten wie 8086 (real mode) Jedes Programm kann gesamten Speicher verändern (keine Schutzfunktionen !) Protected Mode: Segmente bekommen Rechte "kooperatives" Multitasking: bis Windows 3.11 und bis MAC OS 9 Dabei geben die einzelnen Tasks "von sich aus" die Kontrolle an das Betriebssystem zurück "pre-emptives" Multitasking: heute Standard Das Betriebssystem entscheidet darüber, ob der aktuelle Task fortgesetzt oder gestoppt wird Bis 80386: Externer Coprozessor für Fließkommaberechnungen Ab 486 integriert Technische Informatik I (SS 2006)

29 Was ist ein Interrupt ? kurzfristige Unterbrechung des Programms
im FLAGS Register wird dann bit #9 gesetzt CPU arbeitet dann eine spezielle Befehlssequenz ab, die „interrupt service routine“ (z.B. schreibe ZERO in das counter register) danach wird das Programm an der gleichen Stelle fortgesetzt was macht man dann ?  Op-Code IRET (return from interrupt) pre-emptives Multitasking geht nur mit Interrupts (= halte einen bestimmten Task sofort an) Was ist „Echtzeit“ ? definiert über Reaktionszeit auf Interrupts z.B. reagiere auf Interrupt innerhalb von ~8 us wichtig: ETHERNET Datentransfer nach jedem Datenpaket von 1.5kB Größe wird ein Interrupt ausgelöst (d.h. hohe CPU Belastung durch Abarbeitung der Interrupts) Technische Informatik I (SS 2006)

30 Was ist ein Stack ? Wenn man den Inhalt eines Register kurz einmal speichern möchte (weil man ihn danach noch benötigt, aber auch genau dieses Register in diesem Moment benötigt), muß man in einem asm Programm immer ein Label definieren (für „goto“) Was man will: einen „Schmierzettel“.  STACK. Der Stack ist eigentlich nichts weiter als ein Stück des Hauptspeichers, nur daß dort nicht mit festen Adressen gearbeitet wird, sondern die zu sichernden Daten einfach immer oben drauf geschrieben (push) bzw. von oben heruntergeholt werden (pop). Der Zugriff ist also ganz einfach, vorausgesetzt man erinnert sich daran, in welcher Reihenfolge die Daten auf den Stapel gelegt wurden. Ein spezielles Register, der stack pointer esp zeigt stets auf das oberste Element des Stacks. Technische Informatik I (SS 2006)

31 Was ist ein Stack ? esp = stackpointer
Technische Informatik I (SS 2006)

32 Exkurs: Selbst-Modifizierende Programmierung
gibt es das ?  ja (!) Assembler Code kann sich selbst modifizieren (obwohl der Benutzer auf CS:IP nicht direkt zugreifen kann) Warum ? op-codes sind nichts anderes als „hex Zahlen“ increase ist ein op-Code decrease ist ein op-Code Bsp. analog zum vorherigen Bsp.: mov cx,100 ; counter register ; ax wird 100x automatisch ausgeführt schleife_1: mov ax,0x40 ; 0x40 ist Op-code für „inc ax“ cmp cx, 50 je schleife_2 ; loop schleife_1 ; schleife_2: mov ax,0x48 ; 0x48 ist Op-code für „dec ax“ loop schleife_2 ; ; jetzt ist alles wieder wie vorher ; weil op-code „überladen“ wurde ; und 50x inc und 50x dec ausgeführt wurde Technische Informatik I (SS 2006)

33 Kommazahlen Arbeiten mit Komma
Beispiel: Zerlege 8 Bit in 4 Vor- und 4 Nachkommabits: = * * * * = das ist eine Festkommazahl, d.h. Wertebereich stark eingeschränkt (z.B. was soll man mit  machen ?) der Compiler übersetzt dann in Rechenoperationen mit ganzen Zahlen Alternative: wir könnten einen „Exponenten“ definieren 9.1875 = * 100 = * 102 = * 10-2 das sind Fließkommazahlen Technische Informatik I (SS 2006)

34 Fließkommazahlen benötigen noch 2. Zahl, den Exponenten
nicht neu: Prinzip bereits von Konrad Zuse in Z1 benutzt 8 Bit mit „Bias“ von 127, d.h. 127 ist gleich 0. wozu ? a.) 127=7F=111111, d.h. 1 bit eingespart, kann als Vorzeichenbit genutzt werden b.) Vermeidung von negativen Exponenten Basis ist nicht 10, sondern 2 (Anmerkung: im Prinzip könnte jede Zahl Basis sein, nur 2 hat sich durchgesetzt) Vorteil: Exponent sagt einfach aus, um wie viele Stellen das Komma verschoben ist (Bsp. für Basis 16: IBM/360, 1964, benutzt für NASA Apollo) Prinzip: suche eine Normaldarstellung (d,h, die Darstellung, in der genau eine Eins vor dem Komma steht) = * Oder: = * Oder: = * Technische Informatik I (SS 2006)

35 IEEE-Standard 754 Sign Exponent Fraction Bias 32 Bit Single Precision
1 [31] 8 [30-23] 23 [22-00] 127 64 Bit Double Precision 1 [63] 11 [62-52] 52 [51-00] 1023 Technische Informatik I (SS 2006)

36 8087 Intel Floating Point Co-Prozessor
5 MHz 40-pin Keramik DIP Technische Informatik I (SS 2006)

37 Berechnung einer IEEE 32-bit Gleitkommazahl
Umwandlung einer Dezimalzahl in eine binäre Gleitkommazahl vom Typ Single nach IEEE 754 Vorzeichen v (1 bit), Mantisse m und Exponent e müssen berechnet werden, aus denen sich dann die Zahl x zusammensetzt: Anmerkung: die Basis ist hier „2“ wie bei fast allen FPU heute, aber prinzipiell muß sie nicht „2“ sein. Vorzeichen Je nachdem, ob die Zahl positiv oder negativ ist, ist das Vorzeichen v +1 oder −1. Ein positives Vorzeichen wird mit einem Vorzeichenbit 0 gespeichert, negative Zahlen mit 1. Technische Informatik I (SS 2006)

38 Berechnung einer IEEE 32-bit Gleitkommazahl
Exponent Beim IEEE single-Datentyp sind dafür 8 Bit vorgesehen. Regel: der Exponent muß so gewählt werden, daß die Mantisse/223 einen Wert zwischen 1 und 2 erhält: Wenn hierbei ein Wert für den Exponenten heraus kommt, der kleiner als −126 oder größer 127 ist, kann die Zahl mit diesem Datentyp (wegen 8-bit Beschränkung) nicht gespeichert werden. Statt dessen wird die Zahl als 0 (Null) oder als „unendlich“ abgespeichert. Mantisse wird nun in den verbleibenden 23 Bit abgespeichert: Technische Informatik I (SS 2006)

39 Berechnung einer IEEE 32-bit Gleitkommazahl
Der Wert für den Exponenten wird jedoch nicht direkt gespeichert, sondern um einen Bias-Wert erhöht (um negative Werte zu vermeiden). Bei IEEE single ist der Bias-Wert Somit werden die Exponentenwerte − als so genannte „Charakteristik“ zwischen gespeichert. Die Werte 0 und 255 als Charakteristik sind reserviert für die speziellen Zahlenwerte Null, wenn Exponent=0...0 und Fraction=0…0 (Anmerkung: Vorzeichenbit ist gültig !, d.h. es gibt +0 und -0) Unendlich, wenn Exponent=1…1 und Fraction=0…0 (Anmerkung: Vorzeichenbit ist gültig !, d.h. es gibt +∞ und -∞) Not a Number (NaN), z.B. nach Teilung durch Null wenn Exponent=1…1 und Fraction ungleich Null Technische Informatik I (SS 2006)

40 Berechnung einer IEEE 32-bit Gleitkommazahl
BIAS 1 bit Vorzeichen + 8 bit Exponent + 23 bit Mantisse Umkehrung: Technische Informatik I (SS 2006)

41 Pentium-FPU (Floating Point Unit)
kann nicht mit normalen Prozessorregistern arbeiten 8 eigene Register, aber als Stack (ST0-ST7, ST0=Top of Stack=TOS) nur TOS kann geladen oder gespeichert werden Operationen immer mit TOS + anderes Register (oder Speicherstelle) Technische Informatik I (SS 2006)

42 Pentium-FPU (Floating Point Unit)
Status-Register Control-Register Technische Informatik I (SS 2006)

43 FPUs anderer Architekturen (nicht 80x86)
Technische Informatik I (SS 2006)


Herunterladen ppt "Ablaufsteuerung (Microcode)"

Ähnliche Präsentationen


Google-Anzeigen