Im Protected Mode sind gegenüber dem Real Mode weitere Exceptions möglich, die in erster Linie Fehlerbedingungen anzeigen, deren Ursache in einer Verletzung der Schutzbedingungen des Protected Mode liegt.
Im folgenden eine Auflistung der neuen Exceptions:
. Zweifacher Fehler (Exception 8) Treten zwei Exceptions hintereinander auf und ist es dem i386 nicht möglich, beide Exceptions hintereinander auszuführen, dann löst er den Interrupt 8 aus. Der i386 kann die beiden Exceptions immer dann nicht sequentiell behandeln, wenn es sich um zwei der folgenden handelt: 0 (Division durch 0), 9 (Coprozessor-Segmentüberlauf), 10 (ungültiges Task-State-Segment), 11 (Segment nicht vorhanden), 12 (Stack-Exception) oder 13 (Allgemeiner Protection-Fehler). Z.B. führt also das Auftreten der Exceptions 11 und 13 zu einer Exception 8.
. Coprozessor-Segmentüberlauf (Exception 9): Ist ein Teil des Coprozessoroperanden geschützt oder nicht vorhanden, dann löst der i386 einen Interrupt 9 aus.
. Ungültiges Task-State-Segment (Exception 10): Jeder Task-Switch mit einem ungültigen TSS löst einen Interrupt 10 (0ah) aus. Die Ursache liegt in einer inneren Inkonsistenz des TSS (z.B. ist das durch CS bezeichnete Segment nicht ausführbar, oder ein Selektor übersteigt das zugehörige Tabellenlimit).
. Segment nicht vorhanden (Exception 11): Wenn der i386 versucht, auf ein Segment zuzugreifen, das aus dem Speicher ausgelagert ist, d.h. bei dem das P-Flag gelöscht ist, dann ist ein Interrupt 11 (0bh) die Folge.
. Stack-Exception (Exception 12): Versucht ein Befehl, das Stack-Segmentlimit zu überschreiten oder ist das durch SS bezeichnete Segment z.B. nach einem Task-Switch im Speicher nicht vorhanden, dann löst der i386 einen Interrupt 12 (0ch) aus.
. Allgemeiner Protection-Fehler (Exception 13): Erfaßt der i386 eine Verletzung der Schutzregeln des Protected Mode, wobei sich die Ursache nicht einer der Exceptions 8-12 zuordnen läßt, dann ist ein Interrupt 13 (0dh) die Folge.
. Coprozessorfehler (Exception 16): Werden die Coprozessorfunktionen nicht vom i386 durch eine Software-Bibliothek emuliert und erfaßt der i386 ein Fehlersignal vom Coprozessor, dann löst er einen Interrupt 16 (10h) aus. Dieses Fehlersignal zeigt eine Fehlerbedingung im Coprozessor (z.B. einen Über- oder Unterlauf) an.
|