X86

Aus Lowlevel
Wechseln zu:Navigation, Suche
Diese Seite oder Abschnitt ist zwar komplett, es wird aber folgende Verbesserungen gewünscht:

  • Ein Diagramm zur Registerarchitektur hinzufügen
  • Ergänzungen zur Handhabung von Interrupts
  • Eingehen auf verschiedene Befehlssätze

Hilf Lowlevel, den Artikel zu verbessern.

Die x86-Architektur wurde von Intel entwickelt und nach den Prozessoren der Baureihe 8086 benannt. Alle neueren Prozessoren sind abwärtskompatibel zum 386 bzw 486. Intel selbst nennt diese Architektur heute IA-32. In absehbarer Zukunft wird der x86-Standard aber wohl durch den x64-Standard abgelöst werden.


CPU

Register

Übersicht

Bits Register
8 AL, BL, CL, DL, AH, BH, CH, DH
16 AX, BX, CX, DX, DI, SI, BP, SP, CS, DS, ES, FS, GS, SS
32 EAX, EBX, ECX, EDX, EDI, ESI, EBP, ESP, EIP, EFLAGS
128 XMM0, XMM1, XMM2, XMM3, XMM4, XMM5, XMM6, XMM7


Allzweckregister

Bytes
3 2 1 0
E?X
?X
?H ?L
? = A, B, C, D
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.: Accumulator Register): für Rechenoperatioen, als Rückgabewert in C
  • EBX (engl.: Base Register): als Basisadresse für indizierte Adressierung
  • ECX (engl.: Counter Register): als Zähler
  • EDX (engl.: Data Register)


Indexregister

Bytes
3 2 1 0
E?I
?I
? = D, S
Die Indexregister werden oft als Indizes in Datenbereichen (v. a. bei den eingebauten Stringoperationen) verwendet. Dabei zeigt
  • ESI (engl.: Source Index) auf die Quelle
  • EDI (engl.: Destination Index) auf das Ziel


Zeigerregister

Bytes
3 2 1 0
E?P
?P
? = B, S
Die Zeigerregister werden genutzt, um auf Stellen im Speicher zu zeigen.
  • ESP (engl.: Stack Pointer): Zeigt immer auf den aktuellen Stack
  • EBP (engl.: Base Pointer): Wird meistens für Stackframes und lokale Variablen bei Funktionsaufrufen verwendet


Instruktionsregister

Bytes
3 2 1 0
EIP
IP
Das Instruktionsregister EIP (engl.: Instruction Pointer) 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.


Flagregister

Hauptartikel: EFLAGS

Bytes
3 2 1 0
EFLAGS
Das Flagregister EFLAGS speichert einige Konfigurationsmöglichkeiten und Systemzustände, beispielsweise, ob Interrupts gerade erlaubt sind oder ob ein Übertrag bei einer Addition stattfand.


Segmentregister

Bytes
1 0
?S
? = C, D, E, F, G, S
Die Segmentregister geben die Basisadresse des aktuellen Segments an. Dabei steht
  • CS für das Code-Segment
  • DS für das Daten-Segment
  • SS für das Stack-Segment
  • ES für das Extra-Segment

FS und GS sind zusätzliche Daten-Segmente (wie ES).

Die Segmentregister sind im Protected Mode auch für die Segmentierung mit Hilfe der GDT verantwortlich.


Zusätzliche Spezialregister

  • GDTR (engl.: Global Descriptor Table Register) enthält Position und Größe der GDT
  • LDTR (engl.: Local Descriptor Table Register) enthält den Selektor der LDT
  • IDTR (engl.: Interrupt Descriptor Table Register) enthält Position und Größe der IDT
  • 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.: Test Register) zum Überprüfen des Translation Lookaside Buffers (TR0 – TR5 gibt es beim 80386 nicht)
  • DR0 – DR7 (engl.: Debug Register) zum Setzen von Breakpoints
  • TR (engl.: Task Register) Segment-Selektor des TSS
  • MSRs (engl.: Machine-Specific Register)


Erkennen der CPU

Mit dem Befehl CPUID kann man beispielsweise die von der CPU unterstützten Features oder Daten wie den Hersteller der CPU auslesen.

sonstige Hardware

Diese Seite oder Abschnitt ist zwar komplett, es wird aber folgende Verbesserungen gewünscht:

Andere zur Platform gehörende Hardware auflisten mit Links zu den entsprechenden Artikeln

Hilf Lowlevel, den Artikel zu verbessern.

Weblinks