Die '''Interrupt Vector Table''' (kurz '''IVT''') befindet sich im ersten Kilobyte des Arbeitsspeichers (siehe [[Speicherbereiche]]). Ihre Aufgabe besteht darin, die Adresse der [[ISR | Interrupt Service Routine]] für jeden [[Interrupt]] bereitzustellen. Die IVT hat nur im [[Real Mode]] Bedeutung und wird im [[Protected Mode]] durch die [[IDT]] abgelöst. == Aufbau == Insgesamt stehen 256 Interrupts zur Verfügung, deshalb muss die IVT auch 256 Einträge (einen für jeden Interrupt) haben. Ein Eintrag ist 4 Byte groß und enthält eine Realmodeadresse, die aus 2 Byte Segment und 2 Byte Offset besteht. Ein Eintrag sieht im Speicher folgendermaßen aus: Byte +---------------+---------------+ 0 | Offset | +---------------+---------------+ +---------------+---------------+ 2 | Segment | +---------------+---------------+ {| {{prettytable}} ! Byte || |- | 0 || Offset |- | 2 || Segment |} Die IVT belegt somit genau 256 * 4 = 1024 Byte. Die genaue Verwendung dieser Einträge bei Auftreten eines Interrupts wird im Artikel [[Interrupt]] erklärt. == Während des Bootvorgangs == Nach dem Start des Computers wird die IVT automatisch vom [[BIOS]] erstellt, und die Adressen zeigen auf Funktionen, die entweder das BIOS einem Betriebssystem zur Verfügung stellt, oder die benötigt werden, um mit der Hardware zu kommunizieren. Nach dem [[Bootvorgang]] kann es für ein Betriebssystem sinnvoll sein, einige Interrupts durch eigene Funktionen behandeln zu lassen. Dazu zählen vor allem die Exceptions. == Beispiel == Beispielsweise will man wahrscheinlich eine "Division durch 0" (Interrupt 0) anders als das BIOS behandeln (z.B. den momentanen Prozess beenden und zur Shell zurückkehren): xor ax, ax ;ax = 0x00 (mov ax, 0x00 wäre ein Byte mehr) mov es, ax ;es = ax (also 0) ; IRQs deaktivieren: Dies ist nur notwendig, damit nicht während des Anpassens der IVT ein IRQ auftritt, welcher für den Fall, dass ; a) wir hier den Interruptvektor des IRQ verändern ; b) der IRQ-Handler seinerseits den hier veränderten Interruptvektor aufruft ; zu undefiniertem Verhalten führen kann. cli ; Offset: Die Adresse unserer Interrupt Service Routine mov WORD [es:0], __int0x00 ; Segment: Wir geben hier das momentane Codesegment an mov WORD [es:0+2], cs ; IRQs wieder aktivieren sti == Links == * [http://www.cs.cmu.edu/afs/cs.cmu.edu/user/ralf/pub/WWW/files.html Ralf Brown's Interrupt List] (Download) * [http://www.ctyme.com/intr/int.htm Ralf Brown's Interrupt List] (online anschaubar) [[Category:Glossar]]