| Zeile 1: | Zeile 1: | ||
| − | < | + | 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.<br> |
| + | 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 | | |
| − | + | +---------------+---------------+ | |
| − | |||
| − | |||
| − | |||
| + | Die IVT belegt somit genau 256 * 4 = 1024 Byte.<br><br> | ||
| + | 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ählt vor allem die Exceptions.<br> | ||
| + | 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): | ||
| − | + | <pre> | |
| − | + | xor ax, ax | |
| − | + | mov es, ax | |
| + | ;cli ; IRQs deaktivieren: Dies ist nur notwendig, wenn man einen Eintrag für einen IRQ verändert | ||
| + | mov WORD [es:0], __int0x00 ; Offset: Die Adresse unserer Interrupt Service Routine | ||
| + | mov WORD [es:0+2], cs ; Segment: Wir geben hier das momentane Codesegment an | ||
| + | ;sti ; IRQs aktivieren | ||
| + | </pre> | ||
[[Category:Glossar]] | [[Category:Glossar]] | ||