Dockers DEV Site


Updates · Faq · Home 

Selektoren

Der zweite Teil einer virtuellen Adresse ist der Selektor. Neben der Hauptaufgabe eines Selektors, einen Deskriptor zu "selektieren", enthält er zwei weitere Informationen. Das TI-Bit ("Table Indicator") legt fest, ob die momentan aktive Lokale Deskriptortabelle angesprochen werden soll oder ob sich der Selektor auf die Globale Deskriptor Tabelle bezieht. Weiterhin enthält der Selektor ein Feld RPL ("Requested Privilege Level"), das die gewünschte Privilegstufe angibt (Vgl. Abb. 2.9)

Selektor
Abb. 2.9: Selektor

Welcher Index, welche Tabelle und welche Privilegstufe wird mit dem folgenden Selektor angesprochen?

Selektor: 02FBh (binär: 0000001011111011b)

Lösung:   TI-Bit =  0 , Deskriptor aus GDT
          RPL    = 11b, niedrigste Privilegstufe (3)
          Index  = 0000001011111b  = 05Fh
Besonderheiten

Obwohl auf einen Selektor über einen MOV-Befehl zugegriffen werden kann, ist es nicht erlaubt, einen direkt angegebenen Wert zu laden. Beispielsweise ist MOV DS, 02FBh nicht gestattet und muß durch MOV AX,02FBh und MOV DS,AX ersetzt werden.

Beim Laden eines neuen Selektorwertes wird nicht nur das entsprechende Selektorregister (CS, DS, ES, FS, GS) mit einem neuen 16 Bit Wert geladen, sondern auch der durch den Selektor identifizierte Deskriptor in ein 88 Bit breites "Schattenregister" gebracht. Zusätzlich überprüft der Prozessor, ob das momentan laufende Programm diesen Deskriptor überhaupt benutzen darf (aufgrund der Privilegierung). Ein Programm, das versucht, ungültige Selektoren oder Deskriptoren zu benutzen, wird durch eine Exception unterbrochen.

Aus diesen Gründen (zusätzliche Überprüfung der Privilegstufen und Laden der Schattenregister) dauert das Laden eines Selektorregisters (CS, DS, ES, FS oder GS) im Protected Mode länger als das Laden eines Segmentregisters (CS, DS, ES, FS oder GS) im Realmode!

Index
weiter >>
<< zurück ||

Last change 27/11/2022 by Docker Rocker.
This page uses no cookies, no tracking - just HTML.
Author: "Docker Rocker" ~ 2022 · [Public Git]