Um was geht s heute? Im Anfang

Um was geht‘s heute? Einführung in die Intel-Architektur Patrick Grawehr • Geschichtlicher Überblick der Intel Architektur • Unterschiede zwischen ei...
Author: Arnim Gärtner
0 downloads 4 Views 282KB Size
Um was geht‘s heute? Einführung in die Intel-Architektur Patrick Grawehr

• Geschichtlicher Überblick der Intel Architektur • Unterschiede zwischen einer CISC und einer RISC Architektur am Beispiel Intel und Sparc • Einführung in die Programmierung des Intel 8086 und seiner Nachfolger • Fragen sind jederzeit willkommen

Übersicht • Die Intel-Architektur ist die heutzutage meistverwendete Architektur bei Personalcomputern. CPUs Software • Die wichtigsten Firmen Akteure: 80x86

Hardware

MS-DOS

IBM

Intel Microsoft

1

2

3

Fachausdrücke

Im Anfang...

Die 4-Bit Generation

• Intel-Architektur: Alle Systeme, die auf dem Intel 8086 und seiner Nachfolger beruhen. Dazu gehören auch die Konkurrenzprodukte der Firmen IBM, AMD u.a. • Zur Architektur gehören neben der CPU auch das sogenannte Chipset und die Organisation der verschiedenen Busse.

• Im Gegensatz zur Sparc-Architektur, ist die IntelArchitektur gewachsen. • Viele Relikte aus den Anfängen sind heute noch zu sehen. Dazu gehört beispielsweise das Speichermanagement und die sehr begrenzte Anzahl Register. • Die Geschichte führt uns jetzt ins Jahr 1970 zurück, als Intel ihren ersten Microprozessor vorstellt, den 4004.

4

5

• Intels erster 4-Bit Mikroprozessor wurde im Jahr 1970 vorgestellt. • Hauptsächlich als Steuerungseinheit eingesetzt. • Schon damals war Andy Grove Präsident von Intel.

6

Die 8-Bit Generation I • Der erste 8-Bit Intel-Prozessor war der 8008. Er war jedoch kaum erfolgreich, da er sich als zu langsam erwies. Das Konzept war praktisch 1:1 vom 4-Bit Vorgänger übernommen worden. Der Adressraum betrug sagenhafte 16KB (nicht MB!), was auch damals für viele Anwendungen zu wenig war.

Die 8-Bit Generation II

Die 8-Bit Generation III • Der 8085 (1976) beinhaltete zusätzlich auch die bis anhin extern benötigten Einheiten für Buscontroller und den Taktgenerator. Dies vereinfachte und verbilligte das Rechnerdesign wesentlich. • Gleichzeitig wurde der Z80 von einem ehemaligen Intel-Entwicklungsteam auf dem Markt eingeführt. Er enthielt weitere Einheiten bereits auf dem Chip und war daher erfolgreicher. • Beide CPUs werden heute noch hergestellt.

• Der Nachfolger, der 8080 war der erste vollwertige 8-Bit Prozessor der Firma Intel. 64KB Adressraum, 2-3Mhz Takt, neuerdings Stackpointer und weitere entscheidende Verbesserungen machten ihn zum Marktführer bis 1976.

7

8

9

Der 8086

Die wichtigsten Merkmale des i8086

Aus Sicht des Programmierers

• Vorgestellt im Mai 1978 • Intels erster 16-Bit Prozessor • Ursprünglich nur als Zwischenlösung gedacht, um die Konkurrenz (hier Motorola) auszustechen.

• Taktfrequenz: 4.77 bis 12 Mhz. • 1 MB Adressraum, in 64KB Segmente unterteilt. Konkurrenzprodukte erlaubten bereits 16MB linear adressierbaren Speicher. • Das Design wurde angeblich in nur 3(!) Wochen erarbeitet.

• Komplexer CISC-Instruktionssatz mit über 100 verschiedenen Befehlen. • Nur 4 allgemeine Register • Viele Spezialregister • Viele externe Komponenten wie InterruptController, DMA-Controller u.a erforderlich, um die CPU am laufen zu halten. • Little Endian Architektur (Sparc ist Big Endian)

10

11

12

Das Konzept hinter dem langerwarteten IBM-PC • Es existiert keines. • IBM (Marktführer bei Grossrechnern) hatte den PC nur auf Drängen seiner Kundschaft eingeführt. „Für Personalcomputer gibt es einen Weltmarkt von maximal 5 Stück“ • Das Ergebnis war auch total IBM untypisch : Der IBM PC enthielt keinerlei IBM Bausteine, verwendete keine IBM Software, wurde nicht vom IBM Service gewartet. Stattdessen griff man auf handelsübliche Bausteine zurück.

IBM sucht nach einer CPU für seinen Personalcomputer

Microsoft betritt die Manege • William „Bill“ Gates (*1955) hatte bereits vorher zusammen mit Paul Allen auf 8008 Prozessoren von Intel sein BASIC entwickelt. Dieses – wie vieles andere auch – nicht von ihm entwickelte sondern nur adaptierte Programm verkaufte sich schon damals auf verschiedenen Platformen (etwa Altair 8800) sehr erfolgreich. • Microsoft wurde 1979 gegründet. 16

• Das führende Betriebssystem damals bei 8 wie auch 16 Bit Rechnern war jedoch CP/M. Als die IBM Manager bei Digital Research auftauchten, war der Firmengründer Gary Kildall jedoch nicht da und so kam es zu keinem Abschluss. Microsoft, damals führend bei Programmiersprachen, witterte ihre Chance und bot IBM an das Betriebssystem zu stellen. Nun war Eile geboten: Microsoft kaufte kurzerhand die Rechte an einem rudimentären Betriebssystem, das sein Entwickler schmerzhaft QDOS (für Quick and Dirty Operation System) getauft hatte für 50.000 Dollar auf. Die Berichte darüber sind allerdings widersprüchlich.

• Wieso IBM für ihren ersten PC den Intel 8088 (eine verbilligte Variante des 8086) wählte, ist bis heute unklar. Motorolas 68000 war deutlich schneller und konnte bereits 24MB RAM direkt adressieren. • Möglicher Grund 1: Intels CPU war die Günstigste. • Möglicher Grund 2: Man wollte sich nicht selber im „Mini“-Computermarkt konkurrenzieren.

13

Software, die für den 8086 geschrieben wurde, läuft auch heute noch auf modernen Systemen.

IBM braucht auch ein Betriebsystem für seinen PC

14

15

MS-DOS 1.0

MS-DOS 2.0

• Erscheint als erstes Microsoft-Betriebssystem zusammen mit den ersten IBM-PC‘s im Sommer 1980. • Die Kompatibilität mit älterer Soft- und Hardware wurde bereits damals als wichtig eingeschätzt. Diese Philosophie hat dem PC bis heute einen entscheidenden Vorteil auf dem Markt vermittelt. • Rudimentäre Hardwareunterstützung. • Liest einseitige 5 _“ Disketten à 160kB. 17

• Erstes vernünftiges Betriebssystem für 16-Bit Prozessoren. • Unterstützung der mit dem IBM-XT eingeführten Festplatte mit gewaltigen 10MB. • Einführung der hierarchischen Dateistruktur, damit Annäherung an UNIX. • Eingeführt 1983 18

Der Erfolg des PC spricht sich herum • Bald nach der Einführung des PC erschienen verschiedene Klone auf dem Markt, unter anderem von Compaq. • Da das BIOS des IBM-PC aber geschützt war, konnte man es nicht so einfach kopieren. • Findige Entwickler fanden jedoch einen Weg, die Funktionalität des BIOS zu kopieren, ohne den Code zu stehlen. Diese Erkenntnisse wurden publiziert und fortan konnte jeder ein BIOS schreiben.

Der erste graphische PC

Die Idee von Windows • Durch die Erfahrung beim Mac entscheidet sich Microsoft, eine graphische Oberfläche für den PC zu entwickeln. • Die Versionen 1 und 2 waren jedoch ziemliche Flops, da es kaum Software gab und niemand den Nutzen erkannte. • Konkurrenzprodukte waren erfolgreicher, da sie auch auf älteren Rechnern liefen. • Erst 1990, mit Windows 3.0 und 5 Jahre nach dem Mac kam der Durchbruch. • Damit begannen auch die rechtlichen Probleme von Microsoft, das das „Look and Feel“ des Mac einfach kopiert hatte.

• Der Macintosh (eine Apfelsorte) wurde von Steve Jobs (Gründer von Apple) auf Basis des 68000 entwickelt. • Nachteil: Kaum Software verfügbar, nicht ausbaufähig. • Microsoft entwickelte die Software für den Macintosh.

19

20

21

Der 80286 (1984)

Der 80386 (1986)

Die Nachfolger des 80386

• Vollwertiger 16-Bit Prozessor • 16 MB Adressraum • Protected Mode (sehr kompliziert in der Anwendung, daher kaum eingesetzt) • Rückwärtskompatibel zum 8086 • Teuer und wenig erfolgreich, da man unter DOS sowieso nur 1MB Arbeitsspeicher adressieren konnte. 22

• • • • • • •

Erster 32-Bit Prozessor von Intel 4 GB linearer Adressraum 16 MHz Takt bei Einführung Speicherschutzmechanismen Virtueller Speicher Virtuelle 8086 – Emulation Der erste Rechner kam von Compaq.

• Konkurrenten wie AMD und IBM fertigen kompatible CPU‘s. • Ein unüberschaubares Durcheinander mit 80386, 80486, DX, SX, SL, DX2,... entsteht • Die Preise fallen in den Keller • Seither hat sich am Instruktionssatz kaum mehr etwas geändert. 23

24

3D ist in! • Neuere Prozessoren verwenden klingende Namen wie „SSE, 3DNow, MMX“ für Erweiterungen im Befehlssatz. Diese werden jedoch von Software nur spärlich unterstützt. • Damit sind sie eigentliche Vektorrechner (SIMD – Single Instruction Multiple Data) geworden. • Seit dem 486DX ist in jeder CPU die Fliesskommaeinheit eingebaut, diese war früher separat zu haben und entsprechend teuer.

Windows 95

Die Register des i80386

• Lange erwartet, 1 _ Jahre nach Start der Werbekampagne erst geliefert • Grösste Werbekampagne in der Geschichte des PC • Enthält noch grosse Teile 16-Bit Code, weshalb es auf einem Pentium 130 schneller läuft als auf einem Pentium Pro 150... • Noch heute steckt viel 16-Bit Code in Windows. Diese Komponenten gelten jedoch als besonders stabil.

25

26

27

Die Register des i80x86 Die allgemeinen Register

Die Register des i80x86 Die Indexregister

Die Register des i80x86 Die Segmentregister

• • • • •

AX – Der Akkumulator BX – Der Basispointer CX – Das Count-Register DX – Datenregister und I/O Pointer Das Low-Byte jedes dieser Register kann auch als AL, BL, CL oder DL angesprochen werden. Das High-Byte entsprechend mit AH, BH, CH oder DH. Damit lassen sich sehr effektiv auch 8-Bit Operanden verarbeiten. • Ab dem 80386 sind diese Register 32Bit breit. Sie heissen dann EAX, EBX, ECX und EDX. Es gibt jedoch keine Möglichkeit, die High-Words dieser Register direkt anzusprechen. 28

• • • • • •

(E)SI – Source Index (E)DI – Destination Index (E)BP – Base oder Framepointer (E)SP – Stackpointer Diese Register haben keine 8-Bit Komponenten. Ob (bei impliziter Adressierung) 32 Bit oder 16 Bit verwendet werden, wird durch den Adressierungsmodus des aktuellen Segments bestimmt (siehe später). 29

• CS – Das aktuelle Codesegment • DS – Das aktuelle Datensegment • ES – Frei verwendbares Segmentregister, benötigt für Kopieroperationen. • SS – Das aktuelle Stacksegment • FS und GS – zusätzliche Segregs, ab i386 • Diese Register sind immer 16Bit breit. • Diese Register sollten nur verändert werden, wenn man genau weiss, was man tut! 30

Die Register des i80x86 Die Statusregister • • • •

Das Flagwort

(E)FLAGS – Das Flagwort (E)IP – Der Instruktionspointer CR0 bis CR3 Prozessorstatusregister DR0 bis DR7 Debugregister

Welcher Befehl welche Flags ändert, muss nachgeschlagen werden. Es gibt keine einheitliche Regel!

Was ihr vergebens suchen werdet • Es gibt keine Register-Windows • Es gibt keine synthetischen Instruktionen des Assemblers • Ein Register mit der Funktion von %g0 existiert nicht. • Weder CPU-Identifikation noch aktuelle Sicherheitsstufe stehen im Flagwort.

31

32

33

Speichermodelle Real Mode Adressen

Speichermodelle Intels Lösung des Dilemmas

Speichermodelle Segment und Offset

SEGMENT * 16 + OFFSET = 20 bit address

• Im Realmodus kann nach wie vor nur 1MB Speicher adressiert werden. • Mit 16Bit kann man nur 64 KB adressieren. • Wenn man 2 Register nimmt, kann man 32 Bit adressieren – Das war damals (1978) jedoch jenseits des vorstellbaren. • Ausserdem haben 2 Register nebeneinander gedacht einen entscheidenden Nachteil: 64KB Segmente können nur als ganzes vergeben werden.  Grosser Speicherplatzüberhang. • Hinweis: Es ist nicht möglich, alles mit relativen Adressen zu codieren. 34

|0010010000010000----| (0 to 65535) * 16 |----0100100000100010| (0 to 65535) |00101000100100100010| 0 to 1048575 (1 MEG)

35

• 20Bit Real-Mode Adressen werden in der Form 0xA000:0x0000 angegeben. Statt C-Syntax schreibt man im Assembler auch 0A000h. • Beziehen sich die Adressen auf Werte in Registern schreibt man Segmentregister:Offsetregister, also z.B. DS:BX. • Das erste Register ist dabei immer ein Segmentregister, das zweite ein anderes. • Dabei ist zu beachten, dass für den 8086 als Offsetregister nur BX, SI, DI, BP und SP verwendet werden können. • Die physische Adresse berechnet sich als: Segmentregister*16 + Offset (Viele Möglichkeiten!) 36

Das Codesegment • Das CS Register enthält das aktuelle Codesegment. Der nächste Befehl wird ab Adresse CS:IP geladen. CS kann nicht direkt verändert, wohl aber gelesen werden. Der IP ist überhaupt nie sichtbar – aber natürlich implizit bekannt. • Zur Änderung dieser Register ist ein JMP, CALL, INT, IRET oder RET Befehl nötig.

Das Datensegment • Register DS enthält das aktuelle Datensegment. Sämtliche Befehle die Daten direkt oder indirekt adressieren verwenden DS als Standardsegment. • Ausnahme 1: Die Adressierung erfolgt über SP oder BP, dann ist SS das Standardsegment • Ausnahme 2: Ein Segment wird explizit angegeben. Dies nennt sich ein Segment-Override.

Das Stacksegment • Das Register SS zeigt auf den Stack. Es ist häufig identisch mit DS. • Als Stackpointer wird SP, als Framepointer BP verwendet. BP kann jedoch auch für andere Zwecke missbraucht werden. • Der Stack wächst von oben nach unten.

37

38

39

Die 16-Bit Speichermodelle

Speichermodelle Das Flat-Speichermodell

Die Segmentregister im Flat-Modell

Model-bezeichnung

Codegrösse (max)

Datengrösse (max)

Bemerkungen

Tiny

64kb

64kb

COM-Dateien. Code+Daten0). Einige, selten gebrauchte, habe ich noch: XLAT; Load AL with DS:[BX+AL] NOP;No Operation - Häufig verwendet für Padding – ein 1-Byte Befehl. CPUID; Get Info on CPU. (ab Pentium!)  xor eax,eax cpuid;gibt „GenuineIntel“ in EBX:EDX:ECX zurück 94

• Der Befehlssatz der Intel-CPUs ist riesig. Als Programmierer ist es deshalb häufig nicht einfach, die beste Lösung für ein Problem zu finden. • Viele Lösungen führen jedoch zum Ziel. • Häufig kann man Code entweder nach Grösse oder nach Geschwindigkeit optimieren: Die einfachen (RISC-typischen) Befehle sind sehr schnell, brauchen aber oft viel Platz – bis zu 12(!) Bytes pro Instruktion – die komplexeren Befehle sind häufig kürzer, aber weniger optimiert. 95

• www.bernd-leitenberger.de/pchist.html • Intel Programmer‘s Reference Manuals Gibt’s online. Aber bitte NICHT ausdrucken, sie umfassen total ca. 2000 Seiten. • MASM Online-Handbücher • Einige Tutorials aus dem Web • Assembler-Workshop, P. Wollschlaeger, Markt und Technik-Verlag, 1991 96