x86-Programmierung und -Betriebsarten (Teil 3)

Software-Interrupts

Ein Software-Interrupt wird gezielt durch einen INT-Befehl ausgelöst. Zum Beispiel ruft der Befehl INT 10h den Interrupt mit der Hex-Nummer 10h auf. Das Bild "Prozedur" zeigt den Ablauf, der bei einem Interrupt im Real Mode ausgeführt wird. Ein Interrupt-Vektor ist eine Adresse im Format Segment:Offset, die auf den Einsprungpunkt des zugehörigen Handlers zeigt. Der 80386 lädt EIP und CS mit den Werten in der Tabelle.

Im Real-Mode-Adressraum sind die ersten 1024 Byte (1 KByte) für die Interrupt-Vektortabelle reserviert. Diese Tabelle weist für jeden der 256 möglichen Interrupts einen so genannten Interrupt-Vektor auf. Von allen Speicherverwaltungsregistern besitzt das Interrupt-Deskriptor-Table-Register IDTR bereits im Real Mode eine Bedeutung. Es speichert nämlich die Basisadresse und das Limit der Real-Mode-Deskriptortabelle.

Nach einem Prozessor-Reset wird das IDTR standardmäßig mit den Werten 00000000h für die Basis und 03ffh für das Limit geladen. Das entspricht exakt einer 1-KByte-Tabelle bei Segment 0000h, Offset 0000h. Durch die Befehle LIDT (Load IDTR) und SIDT (Store IDTR) können die beiden Werte aber verändert und die Tabelle dadurch mit anderer Größe an eine beliebige Stelle des Real-Mode-Adressraums verschoben werden. Achten Sie aber darauf, dass die Tabelle auch alle Vektoren für die möglicherweise auftretenden Interrupts aufnehmen kann. Sonst ist eine Exception 8 die Folge.