Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Technische Informatik I (SS 2006) 1 AkkumulatorRegister X ALU Dekoder Adressbus C Rechenwerk BefehlArgument(e) Ablaufsteuerung (Microcode) PC SteuerwerkSpeicher.

Ähnliche Präsentationen


Präsentation zum Thema: "Technische Informatik I (SS 2006) 1 AkkumulatorRegister X ALU Dekoder Adressbus C Rechenwerk BefehlArgument(e) Ablaufsteuerung (Microcode) PC SteuerwerkSpeicher."—  Präsentation transkript:

1 Technische Informatik I (SS 2006) 1 AkkumulatorRegister X ALU Dekoder Adressbus C Rechenwerk BefehlArgument(e) Ablaufsteuerung (Microcode) PC SteuerwerkSpeicher Befehle, Argumente, Daten Datenbus Toy-Model aus Stunde 7 Z Arithmetisch-Logische Einheit

2 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)

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

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

5 Technische Informatik I (SS 2006) 5 Was ist ein Register ? Rechenzelle der CPU 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,...).

6 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.

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

8 Technische Informatik I (SS 2006) , generelle Register im 8086 nur 16-bit general registers data registers AXaccumulator = Teil der ALU (siehe Toy Model) = Ziel von Rechenoperationen BXbase register = Anfangsadresse einer Datenstruktur CXcounter register = für Schleifenprogrammierung DXdata register = Datenregister für einen Operanden address registers SIsource register DIdestination register SPstack pointer register BPstack base pointer register aufgeteilt in 2x8 bit (Bsp. AH = high, AL = low)

9 Technische Informatik I (SS 2006) , zusätzliche Register segment registers CScodesegment register DSdatasegment register ESextrasegment register SSstacksegment register andere Register IP instruction pointer register FLAGSflag 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).

10 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)

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

12 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

13 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

14 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

15 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

16 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)

17 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]

18 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,4711 jne ungleich gleich:... jmp weiter ungleich:... weiter:...

19 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.

20 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

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

22 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 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

23 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

24 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)

25 Technische Informatik I (SS 2006) 25 Adressierung im Protected Mode 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

26 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 verstehenSelektor 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).Deskriptor Ein Deskriptor h ä lt dabei den physischen Segmentstart und die L ä nge des Segmentes fest.

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

28 Technische Informatik I (SS 2006) 28 Intel: Weiterentwicklungen des : 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

29 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)

30 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.

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

32 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

33 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 = * 10 0 = * 10 2 = * das sind Fließkommazahlen

34 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: = *

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

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

37 Technische Informatik I (SS 2006) 37 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. VorzeichenMantisseExponent 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. Berechnung einer IEEE 32-bit Gleitkommazahl

38 Technische Informatik I (SS 2006) 38 Exponent Beim IEEE single-Datentyp sind dafür 8 Bit vorgesehen. Regel: der Exponent muß so gewählt werden, daß die Mantisse/2 23 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: Berechnung einer IEEE 32-bit Gleitkommazahl

39 Technische Informatik I (SS 2006) 39 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 127. Somit werden die Exponentenwerte als so genannte Charakteristik zwischen gespeichert. Die Werte 0 und 255 als Charakteristik sind reserviert für die speziellen ZahlenwerteBias 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 Berechnung einer IEEE 32-bit Gleitkommazahl

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

41 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)

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

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


Herunterladen ppt "Technische Informatik I (SS 2006) 1 AkkumulatorRegister X ALU Dekoder Adressbus C Rechenwerk BefehlArgument(e) Ablaufsteuerung (Microcode) PC SteuerwerkSpeicher."

Ähnliche Präsentationen


Google-Anzeigen