                        
                        
                        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

