Intel 80286, 80386 und 80486 CPUs können einen durch ein Programm verursachten Fehler entdecken. Die häufigsten Probleme sind Stapelfehler, ungültige Befehle, Teilungsfehler (Teilung durch null) und allgemeine Schutzverletzungen. Diese sind im allgemeinen ein Hinweis auf nicht dem Standard entsprechende Codes in einer Anwendung. Die nachstehend beschriebenen Fehler können in einer Windows-Anwendung, in Windows selbst oder in einem Windows-Gerätetreiber auftreten (zum Beispiel in einem Bildschirmtreiber).
Stapelfehler (Interrupt 12)
Gründe für Stapelfehler:
Ein Befehl versucht, auf mehr Speicher zuzugreifen, als im jeweiligen Stacksegment vorhanden ist (POP, PUSH, ENTER, LEAVE oder stack-bezogener Zugriff: MOV AX, [BP+6]).
Laden von SS mit einem markierten Selektor, der nicht verfügbar aber ansonsten gültig ist (sollte unter Windows nicht vorkommen). Stapelfehler haben immer schwerwiegende Auswirkungen auf die aktuelle Anwendung in Windows.
Ungültiger Befehl (Interrupt 6)
Die CPU entdeckt die meisten ungültigen Befehle und generiert dann einen Interrupt 6. Dies hat immer schwerwiegende Auswirkungen auf die jeweilige Anwendung und sollte niemals vorkommen. Die Ursache liegt in der Regel darin, daß statt Codes Daten ausgeführt werden.
Teilungsfehler (Interrupt 0)
Ein Teilungsfehler wird verursacht, wenn das Zielregister das Ergebnis eines Teilungsvorgangs nicht aufnehmen kann. Etwa bei einer Teilung durch nulI oder einem Teilungsüberlauf. Allgemeine
Schutzverletzung (Interrupt 13)
Alle Schutzverletzungen, die keinen anderen Typ von Ausnahmefehler verursachen, verursachen eine allgemeine Schutzverletzung. Allgemeine Schutzverletzungen sind unter anderem:
Überschreitung des Segmentlimits bei der Nutzung von CS-, DS-, ES-, FS- und GS-Segmenten. Dies ist ein in Programmen sehr häufig auftretender Fehler, der in der Regel darauf beruht, daß der für eine Zuordnung benötigte Speicherplatz falsch berechnet wird.
Übertragung der Ausführung auf ein Segment, das nicht ausführbar ist (zum Beispiel das Springen zu einem Speicherplatz, an dem sich wertlose Daten befinden).
Schreiben in ein schreibgeschütztes Segment oder ein Codesegment.
Laden eines ungültigen Wertes in ein Segmentregister.
Verwendung eines Nullzeigers. Ein Wert von 0 ist als Nullzeiger definiert. Im abgesicherten Modus ist die Verwendung eines Segmentregisters mit dem Wert 0 immer ungültig.
Hinterlasse einen Kommentar
Du musst angemeldet sein, um einen Kommentar schreiben zu können.