X86 — Änderungen 6745 → 8224

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 quasi Standard 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 gleichgeblieben, alle neueren Prozessoren sind seitdem 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).
+
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 ersetzt werden.
+
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 fast jeden Zweck genutzt werden. Trotzdem gibt es einige gebräuchliche Nutzungen:
+
| 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 Indexe in Datenbereichen (va. bei den eingebauten Stringoperationen) verwendet. Dabei zeigt
+
| Die Indexregister werden oft als Indizes in Datenbereichen (v.&nbsp;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 Systemzuständen, beispielsweise, ob Interrupts gerade erlaubt sind oder ob ein Übertrag bei einer Addition stattfand.
+
| 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'''ata-'''S'''egment
+
* '''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) gibt die Position der [[GDT]] an
+
* 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) gibt die Position der [[LDT]] an
+
* 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) gibt die Position der [[IDT]] an
+
* 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]] zum [[Paging]] benutzt
+
* CR0, CR2, CR3 und CR4 (engl.: [[Control Register]]) werden im [[Protected Mode]] für erweiterte Einstellungen des Prozessorzustandes genutzt, z.&nbsp;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-TR5 gibt es beim 80386 nicht)
+
* 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]]