Interrupts Fr viele sind Interrupts und Interruptverarbeitung ein Buch mit sieben Siegeln, da es sich hier um automatische Prozesse handelt die man als Programmier nicht beeinflussen kann. Vorweg sollte zumindest erst einmal festgehalten werden, da es sich bei Interrupts um nicht vorhergesehene Unterbrechungen ei- nes laufenden Programms handelt, die es der CPU ermglichen auf Aktionen der Peripheriegerte oder -bausteine des Computers zu reagieren. Das klingt natrlich etwas abstrakt, kann man sich aber leicht an einem Beispiel verdeutlichen: Jede Tastatureingabe die man ausfhrt wird von der Tastaturlogik bearbeitet, bei dieser Logik handelt es sich bei einem PC um einen eigenen Chip. Dieser Chip entschlsselt welche Taste ge- drckt worden ist und ermittelt den dazugehrigen Tastaturcode (nicht zu verwechseln mit dem zu dem jeweiligen Buchstaben ge- hrenden ASCII-Code). Der Tastaturprozessor sendet dann einen Interrupt an den Sekretr der CPU, den Interrupt Controller. Der Interrupt Controller be- wirkt, da die Abarbeitung des Programms gestoppt wird und eine Interrupt-Routine aufgerufen wird, die den Tastaturcode in einen Zwischenspeicher legt, den sogenannten Tastaturpuffer. Das Pro- gramm kann sich nun den Tastaturcode aus dem Puffer holen und verarbeiten. Dieser Vorgang hat, vereinfacht dargestellt, die Ablufe beim Auf- treten eines Hardwareinterrupts geschildert. Nun soll aber etwas genauer auf die Interruptverarbeitung eingegangen werden. Der Grund fr die Anwendung von Interrupts mte aus dem obenge- nannten Beispiel eigentlich klargeworden sein. Tastatureingaben erfolgen in nicht berechenbaren Abstnden und somit wre es uneffektiv, wenn die CPU in einer Endlosschleife den Tastaturpuffer abfragen wrde, ob eine Eingabe stattgefunden hat (Das wre so als htte man ein Telefon ohne Klingel und man mte alle dreiig Sekunden den Hrer abheben, um festzustellen, ob jemand anruft). Wesentlich effektiver als dieses "Polling" wre es wenn die CPU Tastatureingaben nur dann bearbeiten wrde, wenn auch wirklich welche auftreten. Deshalb hat man Interrupts eingefhrt. Allerdings ist Interrupt nicht gleich Interrupt, denn man kann selbige in zwei Gruppen einteilen: Hardware- und Softwareinter- rupts. Ich denke eine Erluterung des Wortes "Hardwareinterrupt" ist nicht notwendig, allerdings sei an dieser Stelle noch etwas zu den Softwareinterrupts gesagt. Bei einem Softwareinterrupt ist die Bezeichnung "Interrupt" ei- gentlich fehl am Platz, da es sich hierbei um gezielt erzeugte Interrupts handelt, die von dem Programmierer durch setzen einer INT- oder INTO Anweisung ausgefhrt werden. Man spricht trotzdem von Interrupts, da der interne Ablauf der selbe ist, wie bei Hardwareinterrupts. Jeder Interrupt besitzt eine Nummer ber die er aufgerufen wird und eine Adresse einer Interrupt-Routine, die bei seinem Aufruf ausgefhrt wird. Durch die Interruptnummer, die zwischen 0 und 255 liegt, wird aus einer Tabelle, die in den ersten 1024 Byte des Arbeitsspeichers zu finden ist, die Adresse der Interrupt-Routine ermittelt. Jedem Interrupt ist eine 4-Byte Speicheradresse zugeordnet, die auch als Interrupt-Vektor (Zeiger) bezeichnet wird. Die ersten beiden Bytes eines Interrupt-Vektors enthalten den Offset- und die beiden letzten Bytes den Segmentanteil der Interrupt-Routine. Hardware Interrupts: -------------------- Jetzt betrachten wir die Hardware Interrupts etwas genauer. Die 8086/88 CPU verfgt ber zwei Eingnge, ber die sie Inter- rupts entgegennehmen kann. Diesen CPU-Eingngen ist ein Inter- rupt Controller (oder auch PIC; Programmable Interrupt Control- ler) vorangeschaltet, der bis zu 8 Interrupts gleichzeitig be- arbeiten kann. Die CPU unterscheidet zwischen zwei verschiedenen Interrupt- typen: maskierten und nicht maskierten. Deshalb verfgt die CPU auch ber die Eingnge INTR und NMI (Interrupt Request und Non Maskable Interrupt). kleiner Exkurs (tut mir leid, aber mu sein): --------------------------------------------- maskierbare Interrupts: ----------------------- - Interrupts die ber den Interrupt- Controller auf den INTR-Eingang der CPU gelangen - knnen durch Lschen des Interrupt- Freigabe Flags (Interrupt Enable Flag) unterdrckt werden; der zuge- hrige Maschinensprachebefehl lautet "CLI" - unterdrckte Interrupts werden zwischengespeichert und nach dem er- neuten Setzen des Interrupt Freigabe Flags, durch den Befehl "STI", ab- gearbeitet nicht maskierbare Interrupts: ----------------------------- - Interrupts die ber den Interrupt- controller auf den NMI-Eingang der CPU gelangen - sind schwerwiegenden Katastrophen vor- behalten, wie z.B. Parittsfehlern der RAM-Bausteine - knnen nicht durch Lschen des Inter- rupt Freigabe Flags unterdrckt werden Zusammenfassend kann man sagen, da das Klingeln des Telefons der Interrupt Anforderung an den Interrupt Controller gleich- kommt, whrend das Abnehmen des Hrers gleichbedeutend mit der Interrupt-Bearbeitung durch die CPU ist. Wenn mehrere Interrupts gleichzeitig beim Interrupt Controller eintreffen, dann entscheidet dieser anhand einer Prioritten- liste, welcher Interrupt zuerst ausgefhrt wird: INTERRUPT PRIORITT ----------------------------------------- Divisionsberlauf HOCH "INT n" Befehl . "INTO" Befehl . NMI . Externer Interrupt ber INTR . Einzelschritt NIEDRIG ----------------------------------------- Software Interrupts: -------------------- Diese Gruppe von Interrupts unterteilt man ebenfalls in zwei Gruppen: interne Interrupts und Interrupts die ber die Be- fehle "INT n" oder "INTO" ausgelst werden. Software Interrupts werden vom Programmierer gezielt gesetzt, oder treten, wie z.B. im Einzelschrittmodus, zu einem definier- ten Zeitpunkt auf. Interne Interrupts knnen durch einen Divisionsberlauf, oder da Setzen des Einzelschrittflags der CPU erzeugt werden. Der "INT n" und der "INTO" Befehl sind dagegen nur elegante Me- thoden Unterprogramme des Betriebssystems (DOS und BIOS) auf- zurufen. Ich denke, da war ein kleiner thematischer Einstieg in die Arbeitswiese, h.. Arbeitsweise von Interrupts. Wer mehr ber den programmtechnischen Ablauf eines Interrupts erfahren mchte, kann das in dem Forum Assembler-Interruptpro- grammierung nachlesen. Gabriel