| Zeile 3: | Zeile 3: | ||
* Ergänzungen zur Handhabung von Interrupts<br> | * Ergänzungen zur Handhabung von Interrupts<br> | ||
* Eingehen auf verschiedene Befehlssätze}} | * Eingehen auf verschiedene Befehlssätze}} | ||
| − | Die '''x86'''-Architektur galt lange Zeit als | + | Die '''x86'''-Architektur galt lange Zeit als Quasistandard für so gut wie alle Prozessoren. Sie wurde von Intel ins Leben gerufen und nach den Prozessoren der Baureihe 8086/8088 benannt. Der wirkliche Durchbruch begann allerdings erst mit dem ersten 32-Bit-Prozessor, dem 80386, oder auch kurz 386 genannt. Der grundlegende Prozessoraufbau ist seitdem gleich geblieben, alle neueren Prozessoren sind abwärtskompatibel zum 386 bzw 486. Intel selbst nennt diese Architektur heute IA-32 (<b>I</b>ntel <b>A</b>rchitecture with <b>32</b> Bit). |
| − | In absehbarer Zukunft wird der x86 Standard aber wohl durch den [[x64]]-Standard | + | In absehbarer Zukunft wird der x86-Standard aber wohl durch den [[x64]]-Standard abgelöst werden. |
| Zeile 48: | Zeile 48: | ||
|} | |} | ||
| − | | Die Allzweckregister können, wie ihr Name schon andeutet eigentlich für | + | | Die Allzweckregister können, wie ihr Name schon andeutet, eigentlich für jeden Zweck genutzt werden. Trotzdem gibt es einige gebräuchliche Nutzungen: |
* '''EAX''' (engl.: '''A'''ccumulator Register): für Rechenoperatioen, als Rückgabewert in [[C]] | * '''EAX''' (engl.: '''A'''ccumulator Register): für Rechenoperatioen, als Rückgabewert in [[C]] | ||
* '''EBX''' (engl.: '''B'''ase Register): als Basisadresse für indizierte Adressierung | * '''EBX''' (engl.: '''B'''ase Register): als Basisadresse für indizierte Adressierung | ||
| Zeile 76: | Zeile 76: | ||
|} | |} | ||
| − | | Die Indexregister werden oft als | + | | Die Indexregister werden oft als Indizes in Datenbereichen (v. a. bei den eingebauten Stringoperationen) verwendet. Dabei zeigt |
* '''ESI''' (engl.: '''S'''ource '''I'''ndex) auf die Quelle | * '''ESI''' (engl.: '''S'''ource '''I'''ndex) auf die Quelle | ||
* '''EDI''' (engl.: '''D'''estination '''I'''ndex) auf das Ziel | * '''EDI''' (engl.: '''D'''estination '''I'''ndex) auf das Ziel | ||
| Zeile 125: | Zeile 125: | ||
|} | |} | ||
| − | | Das Instruktionsregister '''EIP''' (engl.: '''I'''nstruction '''P'''ointer) zeigt ''immer'' auf den nächsten auszuführenden Befehl. Es kann nicht direkt geändert werden, sondern nur über Instruktionen wie ''jmp'', ''call'' oder ''ret'' | + | | Das Instruktionsregister '''EIP''' (engl.: '''I'''nstruction '''P'''ointer) zeigt ''immer'' auf den nächsten auszuführenden Befehl. Es kann nicht direkt geändert oder ausgelesen werden, sondern nur über Instruktionen wie ''jmp'', ''call'' oder ''ret''. |
|} | |} | ||
| Zeile 144: | Zeile 144: | ||
|} | |} | ||
| − | | Das Flagregister '''EFLAGS''' speichert einige Konfigurationsmöglichkeiten und | + | | Das Flagregister '''EFLAGS''' speichert einige Konfigurationsmöglichkeiten und Systemzustände, beispielsweise, ob Interrupts gerade erlaubt sind oder ob ein Übertrag bei einer Addition stattfand. |
|} | |} | ||
| Zeile 165: | Zeile 165: | ||
| Die Segmentregister geben die Basisadresse des aktuellen Segments an. Dabei steht | | Die Segmentregister geben die Basisadresse des aktuellen Segments an. Dabei steht | ||
* '''CS''' für das '''C'''ode-'''S'''egment | * '''CS''' für das '''C'''ode-'''S'''egment | ||
| − | * '''DS''' für das '''D''' | + | * '''DS''' für das '''D'''aten-'''S'''egment |
* '''SS''' für das '''S'''tack-'''S'''egment | * '''SS''' für das '''S'''tack-'''S'''egment | ||
* '''ES''' für das '''E'''xtra-'''S'''egment | * '''ES''' für das '''E'''xtra-'''S'''egment | ||
| − | '''FS''' und '''GS''' sind zusätzliche Daten-Segmente. | + | '''FS''' und '''GS''' sind zusätzliche Daten-Segmente (wie '''ES'''). |
|} | |} | ||
| Zeile 175: | Zeile 175: | ||
==== Zusätzliche Spezialregister ==== | ==== Zusätzliche Spezialregister ==== | ||
| − | * GDTR (engl.: <b>G</b>lobal <b>D</b>escriptor <b>T</b>able <b>R</b>egister) | + | * GDTR (engl.: <b>G</b>lobal <b>D</b>escriptor <b>T</b>able <b>R</b>egister) enthält Position und Größe der [[GDT]] |
| − | * LDTR (engl.: <b>L</b>ocal <b>D</b>escriptor <b>T</b>able <b>R</b>egister) | + | * LDTR (engl.: <b>L</b>ocal <b>D</b>escriptor <b>T</b>able <b>R</b>egister) enthält den Selektor der [[LDT]] |
| − | * IDTR (engl.: <b>I</b>nterrupt <b>D</b>escriptor <b>T</b>able <b>R</b>egister) | + | * IDTR (engl.: <b>I</b>nterrupt <b>D</b>escriptor <b>T</b>able <b>R</b>egister) enthält Position und Größe der [[IDT]] |
| − | * CR0, CR2, CR3 und CR4 (engl.: [[Control Register]]) werden im [[Protected Mode]] | + | * CR0, CR2, CR3 und CR4 (engl.: [[Control Register]]) werden im [[Protected Mode]] für erweiterte Einstellungen des Prozessorzustandes genutzt, z. B. für [[Paging]] (hier insbesondere CR2 und CR3) |
| − | * TR6 – TR7 (engl.: <b>T</b>est <b>R</b>egister) zum Überprüfen des [[Paging#Translation_Lookaside_Buffer|Translation Lookaside Buffers]] (TR0 | + | * TR6 – TR7 (engl.: <b>T</b>est <b>R</b>egister) zum Überprüfen des [[Paging#Translation_Lookaside_Buffer|Translation Lookaside Buffers]] (TR0 – TR5 gibt es beim 80386 nicht) |
* DR0 – DR7 (engl.: [[Debug Register|<b>D</b>ebug <b>R</b>egister]]) zum Setzen von [[Breakpoint]]s | * DR0 – DR7 (engl.: [[Debug Register|<b>D</b>ebug <b>R</b>egister]]) zum Setzen von [[Breakpoint]]s | ||
* TR (engl.: <b>T</b>ask <b>R</b>egister) Segment-Selektor des [[TSS]] | * TR (engl.: <b>T</b>ask <b>R</b>egister) Segment-Selektor des [[TSS]] | ||