Die Steuerung hat ein Register für den Programmzähler , das die Adresse verfolgt, an der der nächste auszuführende Befehl gespeichert ist. (Dieses Register wird auch geschrieben, wenn ein Sprung ausgeführt wird.)
Die Steuerung hat einen Interrupt-Vektor (oder manchmal mehr als einen, abhängig von der Art des Interrupts), der die Adresse ist, an der der ISR gespeichert ist. Diese Adresse ist immer gleich - es ist wie beim Reset-Vektor, bei dem das Programm startet.
(Häufig ist in diesem Vektor ein Sprungbefehl gespeichert, der zum eigentlichen auszuführenden Code springt, da der Speicherplatz im Vektor nicht ausreicht, um die gesamte Prozedur zu speichern. Wichtig ist jedoch, dass sich der ISR immer am selben Ort befindet Position.)
Wenn ein Interrupt auftritt, befindet sich eine dedizierte Hardware in der Steuerung, die den Programmzähler mit dem Interrupt-Vektor schreibt. Wenn die Steuerung dann den nächsten Befehlszyklus erreicht, ruft sie den Befehl von der Adresse ab, auf die der Programmzähler (also der Interrupt-Vektor) zeigt.
(In einem Befehlszyklus der Steuerung werden verschiedene Aufgaben ausgeführt: Es ruft den nächsten Befehl von der Adresse ab, auf die der Programmzähler zeigt. Es erhöht den Programmzähler. Es decodiert den Befehl und führt ihn aus.)
CALL
Anweisung, da Interrupts auf andere Weise beendet werden (vgl.RET
Vs.RETI
).