Segmentregister

Uit Wikipedia, de vrije encyclopedie

Een segmentregister is een register met een speciale functie in een x86-processor. Een segmentregister heeft 16 bits. Steeds als de processor het geheugen benadert, wordt daarbij een segmentregister gebruikt. De gedachte hierachter is dat het geheugen in een aantal delen - segmenten - kan worden verdeeld en dat een programma in elk segment kan draaien, als het segmentregister maar de juiste waarde heeft.

Beschrijving van de registers[bewerken | brontekst bewerken]

De oorspronkelijke 8086 heeft vier segmentregisters.

  • CS - code segment. Wordt gebruikt in combinatie met IP (instruction pointer) bij het ophalen van programma-instructies.
  • SS - stack segment. Wordt gebruikt in combinatie met SP (stack pointer) bij het gebruik van de hardwarestack.
  • DS - data segment. Wordt gebruikt als een instructie het geheugen adresseert.
  • ES - extra segment. Wordt gebruikt in combinatie met het register DI (destination index) in instructies die twee geheugenadressen adresseren, zoals CMPS en MOVS, en nog enkele daarmee verwante instructies zoals STOS.

Een instructie kan van een prefix worden voorzien om in plaats van DS een ander segmentregister te gebruiken.

De 80386 heeft nog twee extra segmentregisters, FS en GS. Deze worden alleen als prefix gebruikt.

Protected mode[bewerken | brontekst bewerken]

In de protected mode, waarin veel meer geheugen geadresseerd moet worden, zijn de segmentregisters te klein. De segmentregisters zijn nu indices in een tabel waarin de feitelijke segmentgegevens staan. Deze tabel bevat niet alleen segmentadressen, maar ook beveiligingsgegevens. Wordt een segmentregister geladen, dan haalt de processor de bijbehorende gegevens uit de tabel. Deze worden in een apart register - de segmentdescriptor - opgeslagen.