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

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

Embed Size (px)

Citation preview

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

Technische Informatik I (SS 2006) 1

Akkumulator Register X

ALU

Dekoder

Adressbus

C

Rechenwerk

Befehl Argument(e)

Ablaufsteuerung(Microcode)

PC

Steuerwerk Speicher

Befehle,Argumente,

Daten

Datenbus

Toy-Model aus Stunde 7

Z

Arithmetisch-Logische Einheit

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

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)

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

Technische Informatik I (SS 2006) 3

Teil 4: Prozessoren

4d: .

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

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

                                                                                                  

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

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, ...).

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

Technische Informatik I (SS 2006) 6

Was ist ein Register ?

Vector Register speichern Daten für Vektor Prozessingvon SIMD (Single Instruction, Multiple Data) Instruktionen.

Special Purpose Register speichern den augenblicklichen Zustand des Programms.

stack pointer registerflags registercontrol register ( control flags werden vom Programm gesetzt)status register ( status flags werden vom Prozessor gesetzt)

Instruction Registerspeichern die Instruction, die derzeit gerade ausgeführt wird.

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

Technische Informatik I (SS 2006) 7

Register eines 80x86

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

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

DIdestination register

SP stack pointer register

BP stack base pointer register aufgeteilt in 2x8 bit

(Bsp. AH = high, AL = low)

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

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

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

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)

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

Technische Informatik I (SS 2006) 11

Programmierung eines 80x86 in Assembler

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

Technische Informatik I (SS 2006) 12

Was sind Op-Codes ?

• Vordefinierte Sequenz von Instruktionen,die mit einem einzigen Assembler Befehlaufgerufen 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

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

Technische Informatik I (SS 2006) 13

Op-Code Beispiel #1: MOV

move den Inhalt von Register bx nach Register axMOV ax, bx(Achtung: Reihenfolge ist 1. Ziel, 2. Quelle)

move den Inhalt des Registers ax in das (externe) Memory MOV [address], axAnmerkung: [...] 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

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

Technische Informatik I (SS 2006) 14

Op-Code Beispiel #2: JMP

ändert den Fluß des ausgeführten Codesdurch Überschreiben des instruction pointer Register

JMP 0x89AB ;(ohne Angabe eines Registers) lädt das IP Register mit dem neuen Wert 0x89ABdies 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

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

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

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

Technische Informatik I (SS 2006) 16

Einige weitere Op-Codes

ROL = rotate left, ROR = rotate rightwichtig 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)

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

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]

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

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

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

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.

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

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 axdann steht im ax danach die gewünschte Adresse

Bsp. schreibend.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

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

Technische Informatik I (SS 2006) 21

Wie adressiert man Speicher ?

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

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 8086

1 MB Speicher adressiert werden jedoch nur immer 64k zu einem Zeitpunkt

protected mode

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

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 0xDEADDX hat hexadezimale Zahl 0xCAFE dann würde der Memory-Block starten bei der Adresse 0xDEAD * 0x10 + 0xCAFE = 0xEB5CE

0xEB5CE ist dann eine lineare Adresse

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

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

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

Technische Informatik I (SS 2006) 25

Adressierung im Protected Mode

• 80286 hat protected mode• Intel Prozessoren ab dem 80286 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

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

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.

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

Technische Informatik I (SS 2006) 27

Adressierung im Protected Mode

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

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 9Dabei geben die einzelnen Tasks "von sich aus" die Kontrolle an das Betriebssystem zurück

"pre-emptives" Multitasking: heute StandardDas Betriebssystem entscheidet darüber, ob der aktuelle Task fortgesetzt oder gestoppt wird

Bis 80386: Externer Coprozessor für Fließkommaberechnungen Ab 486 integriert

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

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 Interruptsz.B. reagiere auf Interrupt innerhalb von ~8 us

wichtig: ETHERNET Datentransfernach jedem Datenpaket von 1.5kB Größe wird ein Interrupt ausgelöst(d.h. hohe CPU Belastung durch Abarbeitung der Interrupts)

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

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.

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

Technische Informatik I (SS 2006) 31

Was ist ein Stack ?

esp = stackpointer

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

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-Codedecrease 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, 50je 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

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

Technische Informatik I (SS 2006) 33

Kommazahlen

Arbeiten mit Komma Beispiel:

Zerlege 8 Bit in 4 Vor- und 4 Nachkommabits: 1001.0011 = 9.0 + 0*0.5 + 0*0.25 + 1*0.125 + 1*0.0625 = 9.1875 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 =9.1875 * 100 =0.091875 * 102 =918.75 * 10-2

das sind Fließkommazahlen

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

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 werdenb.) 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) 9.1875 =1001.0011 * 201111111 Oder: =100.10011 * 210000000 Oder: =1.0010011 * 210000010

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

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

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

Technische Informatik I (SS 2006) 36

8087 Intel Floating Point Co-Prozessor

5 MHz40-pin Keramik DIP

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

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.

VorzeichenJe 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

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

Technische Informatik I (SS 2006) 38

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

Mantissewird nun in den verbleibenden 23 Bit abgespeichert:

Berechnung einer IEEE 32-bit Gleitkommazahl

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

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 −126...+127 als so genannte „Charakteristik“ zwischen 1...254 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 Nullwenn Exponent=1…1 und Fraction ungleich Null

Berechnung einer IEEE 32-bit Gleitkommazahl

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

Technische Informatik I (SS 2006) 40

Umkehrung:

Berechnung einer IEEE 32-bit Gleitkommazahl

BIAS

1 bit Vorzeichen + 8 bit Exponent + 23 bit Mantisse

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

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)

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

Technische Informatik I (SS 2006) 42

Pentium-FPU (Floating Point Unit)

Control-Register Status-Register

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

Technische Informatik I (SS 2006) 43

FPUs anderer Architekturen (nicht 80x86)