O controlador possui um registro para o contador de programa que monitora o endereço onde a instrução a ser executada em seguida está armazenada. (Este registro também é gravado quando um salto é executado.)
O controlador possui um vetor de interrupção (ou algumas vezes mais de um, dependendo do tipo de interrupção), que é o endereço em que o ISR está armazenado. Esse endereço é sempre o mesmo - é como o vetor de redefinição, onde o programa é iniciado.
(Muitas vezes, há uma instrução de salto armazenada nesse vetor que salta para o código real a ser executado, pois o espaço no vetor não é suficiente para armazenar todo o procedimento. No entanto, o importante é que o ISR esteja sempre localizado no mesmo posição.)
Quando ocorre uma interrupção, há algum hardware dedicado no controlador que grava o contador de programa com o vetor de interrupção. Então, quando o controlador alcança o próximo ciclo de instruções, ele busca a instrução no endereço apontado pelo contador de programa (portanto, o vetor de interrupção).
(Em um ciclo de instruções do controlador, existem tarefas diferentes que ele executa: busca a próxima instrução no endereço indicado pelo contador de programas; aumenta o contador de programas; decodifica a instrução e a executa.)
CALL
instrução comum , pois as interrupções são terminadas de maneira diferente (cf.RET
vs.RETI
).