| Zeile 21: | Zeile 21: | ||
Die Segmentregister sind aber nach wie vor nur 16 Bit breit und somit wird der Platz etwas knapp für diese ganzen Informationen. Aus diesem Grund enthalten die Segmentregister im Protected Mode nur noch sogenannte Selektoren, d.h. die Nummer eines Segments und einige wenige Flags. Die eigentliche Beschreibung der Segmente liegt in Form einer Tabelle im Speicher, der GDT. Die GDT besteht aus mehreren Einträgen (Segmentdeskriptoren) zu je 64 Bit, die direkt hintereinander liegen. Der erste Eintrag kann nicht benutzt werden, er ist der sogenannte Nulldeskriptor. | Die Segmentregister sind aber nach wie vor nur 16 Bit breit und somit wird der Platz etwas knapp für diese ganzen Informationen. Aus diesem Grund enthalten die Segmentregister im Protected Mode nur noch sogenannte Selektoren, d.h. die Nummer eines Segments und einige wenige Flags. Die eigentliche Beschreibung der Segmente liegt in Form einer Tabelle im Speicher, der GDT. Die GDT besteht aus mehreren Einträgen (Segmentdeskriptoren) zu je 64 Bit, die direkt hintereinander liegen. Der erste Eintrag kann nicht benutzt werden, er ist der sogenannte Nulldeskriptor. | ||
| + | |||
| + | ==Selektoren== | ||
| + | Wie im vorigen Abschnitt erwähnt, stehen im Protected Mode in den Segmentregistern Selektoren, die auf Deskriptortabellen verweisen. Sie haben den folgenden Aufbau: | ||
| + | {| {{Prettytable}} | ||
| + | ! Bits || Wert || Bedeutung | ||
| + | |- | ||
| + | | 0 - 1 || 0x3 || RPL (Requested Privilege Level). Gibt die Privilegstufe (den Ring) des zu selektierenden Segments an | ||
| + | |- | ||
| + | | 2 || 0x4 || Bestimmt, ob ein Eintrag in der GDT (Bit nicht gesetzt) oder in der LDT (Bit gesetzt) ausgewählt wird | ||
| + | |- | ||
| + | | 3 || 0xfff7 || Nummer des Eintrags in der GDT bzw. LDT (ab Null gezählt) | ||
| + | |} | ||
| + | |||
| + | Um also nach ds das Segment zu laden, das durch den fünften GDT-Eintrag beschrieben wird, und zwar als Userspace-Segment (Ring 3), könnte man folgenden Code verwenden: | ||
| + | <asm>mov $0x23, %ax | ||
| + | mov %ax, %ds</asm> | ||
==Struktur== | ==Struktur== | ||