Interruptions


 1. Introduction
 2. Les interruptions matérielles
 3. Les interruptions logicielles
 4. La table des vecteurs d'interruption
 5. Les différents types d'interruptions
 6. Table des vecteurs d'interruption
 7. Gestion des interruptions
 8. Interruption logicielle
 9. Le mode pas à pas
 10. BIOS


1. Introduction : Une interruption est une indication qui requiert l'attention du microprocesseur. Quand une interruption survient, le microprocesseur INTERROMPT son traitement en cours, sauvegarde son contexte de travail et exécute un sous-programme résident en mémoire dénommé routine d'interruption (ou handler d'interruption). Après qu'une routine d'interruption ait accompli sa tâche, le microprocesseur reprend son traitement au point où est survenue l'interruption.

Une interruption peut survenir à n'importe quel moment de l'exécution d'un programme. Par définition, les interruptions sont asynchrones par rapport aux opérations du processeur : il ne suffit pas de reproduire l'état du processeur lors de l'interruption pour la reproduire .
Une interruption peut être provoquée par un des composants électroniques de l'unité centrale (interruption matérielle), par le programme qu'exécute le microprocesseur (interruption logicielle), ou bien par une erreur dans le programme (exception). Ces deux dernières sont synchronisées avec les opérations du µP.

2. Les interruptions matérielles : Une interruption matérielle est un arrêt de l'exécution séquentielle des instructions d'un programme demandée par un des composants de l'unité centrale suite à un événement matériel particulier ( ex: appui sur une touche du clavier). Cette interruption provoque l'exécution d'une routine d'interruption, c'est-à-dire d'un programme de traitement de l'événement survenu et propre à cet événement.
Les signaux d'interruption permettent aux différents composants du système, d'attirer l'attention du microprocesseur afin de déclencher une opération déterminée. Comme plusieurs demandes d'interruption peuvent survenir simultanément, elles sont tout d'abord envoyées au Contrôleur d'Interruption (PIC : Programmable Interrupt Controler) qui les retransmet ensuite au microprocesseur.
Le PIC attribue pour ce faire un rang de priorité déterminé à chaque demande d'interruption (IRQ : Interrupt Request) en fonction de son origine et retransmet en premier lieu la demande d'interruption dont le rang est le plus élevé. Le PIC délivre sur le bus de données le numéro de la routine d'interruption à exécuter, à l'intention du microprocesseur.
Le contrôleur d'interruptions (INTEL 8259) du PC XT peut traiter jusqu'à 8 demandes d'interruption simultanées ( 8 entrées IRQ(0) à IRQ(7) ) . Comme se serait insuffisant pour l'exploitation du PC AT, deux contrôleurs ont été couplés pour que puissent être traitées simultanément jusqu'à 15 demandes d'interruption.

3. Les interruptions logicielles : Une interruption logicielle est un arrêt de l'exécution séquentielle des instructions d'un programme "A" pour exécuter les instructions d'une routine d'interruption ( ces routines font partie du BIOS ou du DOS).
Ce type d'interruption est provoquée par une instruction INT N° dans le programme "A". Le programme d'interruption qui est alors exécuté est celui dont le numéro suit l'instruction INT.
INT 21H ; appel du DOS
INT 14H ; appel des fonctions de communication du BIOS

Les exceptions : Une exception est la réponse normale, documentée et prévisible du processeur à une situation détectée lors de l'exécution d'une instruction et qui nécessite une gestion spéciale. Les exceptions peuvent être reproduites en exécutant la même série d'instructions que celle qui a généré la première exception. Elles sont similaires aux interruptions car elles forcent un transfert de contrôle. Toutefois, elles sont internes au µP et ne peuvent pas être masquées. Les exceptions ont toujours une priorité plus grande que les signaux des lignes INTR ou NMI. La catégorie des exceptions du µP est subdivisée en trois classes d'exceptions : les fautes, les trappes et les arrêts. la classification d'une exception dépend du moment où elle est détectée et de la possibilité de réexécuter l'instruction qui l'a générée.
Les fautes : Une faute est une exception rapportée avant l'exécution de l'instruction. La faute est détectée avant l'exécution, ou bien le µP se replace dans l'état d'avant l'exécution. Dans les deux cas, si la cause de la faute est supprimée, l'instruction peut être tentée à nouveau. Les CS et IP sauvés en pile pointent sur l'instruction fautive.
Les trappes : Une trappe est une exception détectée lors de l'exécution d'une instruction et elle est reportée au début de l'instruction suivante. L'instruction qui a causé l'exception peut toujours être en cours d'exécution lorsque l'exception est détectée et générée. si une trappe est détectée lors d'un transfert de contrôle, les valeurs de CS et IP placés en pile pointent sur l'instruction vers laquelle le contrôle aura été transféré.
Les arrêts : Un arrêt est une exception provoqué par le µP lorsqu'il se trouve face à une erreur grave. Un arrêt peut provenir d'une panne matérielle, ou de valeurs incohérentes dans les tables du système. En raison de la nature de ces erreurs, l'opération qui a causé l'erreur ne peut pas être identifié et le programme ne peut pas être relancé. Par exemple, si au cours d'un traitement normal la table des descripteurs globaux s'avère invalide, il est impossible de remonter dans l'exécution pour savoir comment cela est arrivé.
4. La table des vecteurs d'interruption : Le 8086 supporte 256 interruptions différentes, chacune étant identifiée par un numéro compris entre 0 et FFh (255 en décimal).
L'adresse de début d'une routine d'interruption est appelée Vecteur d'interruption.
Toutes les adresses (logique CS:IP) de début de ces vecteurs sont rangées dans une table et constituent donc la Table des Vecteurs d'Interruption.
Cette table se charge en RAM à partir de l'adresse la plus basse (0000h)). Chaque vecteur d'interruption est stocké sur 4 octets (2 pour CS et 2 pour IP)
5. Les différents types d'interruptions :



6. Table des vecteurs d'interruption :
 

Adresse
Fonction
00
000-003
CPU : Division par zéro
01
004-007
CPU : Pas à pas
02
008-00B
CPU:NMI(défaut circuit RAM)
03
00C-00F
CPU : Break point atteint
04
010-013
CPU : Débordement numérique
05
014-017
Copie d'écran
06
018-01B
Instruction inconnue (que 80286)
07
01C-01F
Réservé
08
020-023
IRQ0: Timer
09
024-027
IRQ1: Clavier
0A
028-02B
IRQ2: 2nd 8259 (AT uniquement)
0B
02C-02F
IRQ3: Interface sérielle 2
0C
030-033
IRQ4: Interface sérielle 1
0D
034-037
IRQ5: Disque dur
0E
038-03B
IRQ6: Disquette
0F
03C-03F
IRQ7: Imprimante
10
040-043
BIOS: Fonction vidéo
11
044-047
BIOS: Déterminer configuration
12
048-04B
BIOS: Déterminer la taille mémoire de la RAM
13
04C-04F
BIOS: Fonctions disquettes/disque dur
14
050-053
BIOS: Accès à l'interface sérielle
15
054-057
BIOS: Fonctions cassettes ou étendues
16
058-05B
BIOS: Test du clavier
17
05C-05F
BIOS: Accès à l'imprimante parallèle
18
060-063
Appel du BASIC en ROM
19
064-067
BIOS: Lancer système (ALT CTRL DEL)
1A
068-06B
BIOS: Lire date et heure
1B
06C-06F
Touche Break actionnée
1C
070-073
Appelé après tout INT 08
1D
074-077
Adresse de la table des paramètres vidéo
1E
078-07B
Adresse de la table des paramètres disquette
1F
07C-07F
Adresse des modèles bits de caract.
20
080-083
DOS: Fin du programme.
21
084-087
DOS: Appeler fonctions DOS
22
088-08B
Adresse routine DOS fin prg
23
08C-08F
Adresse routine CTRL BREAK
24
090-093
Adresse routine erreur DOS
25
094-097
DOS :Lire disquette/disque dur
26
098-09B
DOS :Ecrire disquette/disque dur
27
09C-09F
DOS: Fin prg. Laisser résident
28-
0A0-
Réservé différentes fonctions
3F
-0FF
 
40
100-103
BIOS: Fonctions disquettes
41
104-107
Adresse table disque dur 1
42-
108-
Réservés
45
-117
 
46
118-11B
Adresse table disque dur 2
47-
11C-
Libres
-49
-127
 Libres
4A
128-12B
Heure alarme atteinte (AT)
4B-
12C-
Libres
-67
-19F
 
68-
1A0-
Inutilisés
-6F
-1BF
 Inutilisés
70
1C0-1C3
IRQ8: Horloge temps réel (AT)
71
1C4-1C7
IRQ9: (AT)
72
1C8-1CB
IRQ10: (AT)
73
1CC-1CF
IRQ12: (AT)
74
1D0-1D3
IRQ13: 80287 NMI (AT)
75
1D4-1D7
IRQ14: Disque dur (AT)
76
1D8-1DB
IRQ15: (AT)
77
1DC-1DF
Inutilisés
78-
1E0-
Utilisés par l'interpréteur BASIC 
-7F
-1FF
Utilisés par l'interpréteur BASIC
80-
200-
Inutilisés 
-F0
-3C3
Inutilisés
F1-
3C4-
Inutilisés
-FF
-3CF
Inutilisés

7. Gestion des interruptions :Le 8086 dispose de 3 lignes d'interruption :

RESET (21) : Réinitialisation
NMI (17) : Interruption non masquable
INTR(18): Demande d'interruption
Deux instructions INT et INTRO permettent une interruption de type logicielle. Le retour d'un programme est réalisé par l'instruction IRET. L'interruption logicielle est la plus prioritaire puis vient le NMI et enfin l'INTR.

Le RESET : La ligne RESET est une ligne d'entrée asynchrone. Pour être pris en compte le signal RESET doit être à 1 pendant au moins quatre périodes d'horloge (une impulsion de 30µs est nécessaire à la mise sous tension).
Déroulement de la réinitialisation :

Le 8086 termine toute opération dés qu'apparaît une transition de 0 à 1 sur la ligne RESET. Le microprocesseur reste alors inactif jusqu'à ce qu'une transition de 1 à 0 apparaisse.
Alors il faut environ 10 périodes d'horloge pour exécuter les opérations suivantes :
Mise à zéro du registre d'état.(CCR)
- Le registre CS prend la valeur FFFFh
- Les registres DS, ES et SS et IP sont remis à zéro.
- La première instruction rencontrée est un FAR JUMP à une routine appelée Self Test POST à l'adresse F000:E05B. Elle routine teste la valeur stockée dans la variable BIOS 0040:0078. Selon cette valeur, l'initialisation sera de type "à chaud" (1414H) ou "à froid" (différent de 1414H).
Une Initialisation "à froid" est effectuée à chaque mise sous tension. Elle met en œuvre un test complet de la mémoire (RAM et ROM), des périphériques et le chargement de la partie résidente du DOS en mémoire vive.
Une initialisation "à chaud" est effectuée à chaque appui simultané sur les touches CTRL ALT DEL. Elle est comparable à l'initialisation "à froid", à ceci prés que la mémoire n'est plus testée (donc démarrage plus rapide).

8. Interruption logicielle : Une interruption logicielle peut survenir dans les cas suivants:

- Une tentative de division par zéro.
- L'exécution de l'instruction INT.
- L'exécution de l'instruction INTO si l'indicateur O est à 1.
Déroulement d'une interruption logicielle : - Sauvegarde du CCR dans la pile et décrémentation du SP de deux adresses.
- Mise à zéro des indicateurs I et T. Ceci interdit les autres interruptions masquables et le mode pas à pas.
- Sauvegarde dans la pile du IP et décrémentation du SP de deux adresses.
- A partir du numéro d'interruption choisi, le microprocesseur multiplie par quatre ce numéro afin d'obtenir la première adresse du vecteur dans la table des vecteurs d'interruptions. Le contenu de cette case mémoire sera l'octet de poids faible du registre IP, et le contenu de l'adresse est l'octet de poids fort du registre IP.
- Sauvegarde dans la pile du registre CS et décrémentation du SP de deux adresses.
- Le contenu de l'adresse suivante dans la table des vecteurs d'interruption sera l'octet de poids faible du registre de segment CS, et le contenu de l'adresse est l'octet de poids fort du registre CS.
NMI : Une interruption de type NMI est activée par un front montant sur sa broche.
Déroulement d'une interruption NMI : - Sauvegarde du CCR dans la pile et décrémentation du SP de deux adresses.
- Mise à zéro des indicateurs I et T. Ceci interdit les autres interruptions masquables et le mode pas à pas.
- Les registres CS et IP sont chargés comme précédemment avec les valeurs du vecteur d'interruption numéro 2.
INTR : Une interruption INTR est activée par un niveau haut sur sa broche.
Déroulement d'une interruption INTR : - Dans ce type d'interruption c'est le dispositif créateur de l'interruption (8259) qui doit déposer sur le bus de données un octet qui sera interprété comme une partie du vecteur d'interruption. L'unité de Gestion de Bus (BIU) exécutera deux cycles bus d'acquittement d'interruption.
- En réponse au second cycle d'acquittement, le dispositif interrompant doit envoyer un octet de données sur les lignes AD0-AD7. Multipliée par quatre, cette valeur donne l'adresse du début du vecteur d'interruption.
- Sauvegarde du CCR dans la pile et décrémentation du SP de deux adresses.
- Mise à zéro des indicateurs I et T. Ceci interdit les autres interruptions masquables et le mode pas à pas.
- Les registres CS et IP sont chargés comme précédemment.
- Début de la routine d'interruption avec la nouvelle valeur de CS:IP.. La routine d'interruption doit se terminer par l'instruction IRET qui restaure CS et IP.
9. Le mode pas à pas : Le 8086 passe dans le mode pas à pas lorsque l'indicateur T est à 1. Dans ce mode, le 8086 exécute une interruption de type logicielle après l'exécution de chaque instruction (vecteur 1).
Il n'existe pas d'instruction positionnant T à 1. T peut être modifié en changeant une image dans la pile grâce aux instructions PUSHF et POPF qui agissent sur les indicateurs. T est mis à 1 par un OU avec 100H et mis à 0 par un ET avec 0FEFFH.

10. BIOS : Tous les ordinateurs possèdent un BIOS (Basic Input Output System) qui leur est propre. Les PC XT, AT et compatibles n'échappent pas à cette règle. Le rôle principal du BIOS est de fournir un ensemble de fonctions élémentaires destinées à gérer les communications entre l'unité centrale et les organes périphériques (clavier, écran, lecteurs de disques, RS232, mémoire, etc)
Sur les PC XT, AT et compatibles, le BIOS est implanté en ROM, au-delà de l'adresse F000:C000. Il est accessible à travers plusieurs interruptions logicielles spécialisées. La plupart de ces interruptions se divisent en fonctions qui sont accessibles grâce aux registres AH du microprocesseur.
Chaque fonction demande un ou plusieurs paramètres en entrée. Ces paramètres sont passés à la fonction par l'intermédiaire des registres du microprocesseur. De même, certaines fonctions renvoient un ou plusieurs résultats lorsqu'elles ont fini de s'exécuter. Ces résultats sont accessibles directement ou indirectement à travers les registres du microprocesseur.
Un appel typique d'une fonction BIOS s'effectue donc selon les étapes suivantes:

- Initialisation des registres du microprocesseur.
- Appel de l'interruption rattachée à la fonction
- Exploitation des registres en sortie de la fonction
Le BIOS manipule de nombreuses variables qui ne peuvent être implantées en ROM en raison de leur nature. Elles sont implantées à partir de l'adresse 0040:0000 jusqu'à 005F:FFFF juste derrière la table des vecteurs d'interruption.

Chapitre Suivant  Chapitre Précédent  Liste des chapitres