• Aucun résultat trouvé

Types d'interruptions 1 Définition d'une interruption

Une interruption est une demande non prévisible adressée au microprocesseur. Elle provoque l'arrêt du programme en cours de traitement pour exécuter en priorité un sous-programme spécifique appelé sous-programme d'interruption ou traitant d'interruption.

A la fin de ce sous-programme, le microprocesseur reprend le programme principal là où il a été interrompu.

2.2. Types et propriétés des interruptions

Il existe deux catégories d'interruptions : les interruptions matérielles et logicielles. 2.2.1. Les interruptions matérielles

Ce sont des interruptions d'origine externe. Elles sont déclenchées par application d'un état haut sur INTR (Interrupt Request) ou NMI (No Masquable Interrupt).

NMI est dite interruption non masquable. Elle ne peut être inhibée par programme. Elle est associée en général à des événements catastrophiques (erreur système, erreur mémoire, ...)

INTR est moins prioritaire que NMI et peut être masquée par programme. Processus de l'interruption NMI

Lorsque le microprocesseur reçoit une demande d'interruption sur NMI. 1. il termine l'instruction en cours d'exécution,

2. empile le registre d'état et les registres CS et IP,

3. met le drapeau IF (Interrupt Flag) à 0 (inhibition des interruptions),

4. cherche l'adresse du sous-programme à exécuter dans la table des vecteurs d'interruption, 5. exécute le sous-programme ...

6. remet le drapeau IF à 1 (autorisation des interruptions),

7. dépile IP, CS et le registre d'état et poursuit le programme principal. Processus de l'interruption INTR

INTR est souvent associée à un circuit spécialisé appelé contrôleur d'interruption 8259A : INTR .... .. Bus de données INTA

8259A

8086

IRQ0 IRQ1 IRQ7

Le 8259A reçoit 8 entrées IRQ0 à IRQ7 (Interrupt ReQuest). Dès que l'une de ces entrées passe à l'état haut, le 8259A émet une demande d'interruption sur INTR :

1. Le 8086 termine l'instruction en cours,

2. envoie au 8259A sur INTA un signal "accusé de réception",

3. le 8259A place sur le bus de données le n° de l'interruption excitée. Ce numéro est reçu alors par le 8086,

4. le 8086 cherche l'adresse du sous-programme associé à cette interruption dans la table des vecteurs d'interruption,

la suite du processus est identique à celui de NMI ...

L'interruption INTR peut être masquée par l'instruction CLI (CLear Interrupt flag) qui met le drapeau IF à 0. Aucun appel sur INTR n'est alors pris en compte jusqu'à la mise à 1 de IF par l'instruction STI (SeT Interrupt flag).

2.2.2. Les interruption logicielles

Elles sont déclenchées par l'instruction INT n où n désigne le numéro d'interruption.

Les sous-programmes associés aux interruptions logicielles sont en général des routines du BIOS ou du DOS. Elles permettent au programme d'accéder aux différents périphériques de l'ordinateur (voir chapitre 7 : Initiation à la programmation système)

Exemple

Interruption 10h : interruption BIOS (gestion de l'affichage)

Interruption 21h : interruption DOS (gestion des périphériques, des fichiers, ...) 2.2.3. La table des vecteurs d'interruption

Cette table contient l'adresse des sous-programmes (SP) de toutes les interruptions du microprocesseur (256 au total) et commence à partir de 00000. L'adresse d'un sous-programme d'interruption prend 4 octets : 2 octets pour son segment et 2 octets pour son offset :

00000

00001 Offset du SP 00002

00003 Segment du SP

Interruption 00 : Division par 0

00004

00005 Offset du SP 00006

00007 Segment du SP

Interruption 01 : Pas à pas

003FF

14243

14243

La table occupe l'espace mémoire entre 00000h et 003FFh.

Pour une interruption logicielle n l'adresse du sous-programme associé se trouve à 4n (offset du SP) et 4n+2 (segment du SP).

Exemple

L'adresse du SP associé à l'interruption 21h se trouve à 00084h (offset du SP) et 00086h (segment du SP) :

En supposant que le contenu de ces 4 octets est :

00084h 00085h 00086h 00087h A0h 04h 45h 09h

Le sous-programme associé à l'interruption 21h se trouve alors à l'adresse 0945h:04A0h

Attention :

Il est interdit de modifier directement le contenu de la table des vecteurs d'interruption. Cette opération se fait à l'aide de la fonction 25h de l'interruption 21h.

2.2.4. Cas particulier de RESET

Lorsque l'entrée RESET du microprocesseur est mise à l'état haut (bouton RESET sur le boîtier de l'ordinateur), les registres sont initialisés par les valeurs suivantes :

SR=0 - IP=0 - CS=FFFFh - DS=0 - ES=0 - SS=0

La première instruction exécutée par le microprocesseur au démarrage se trouve donc à l'adresse FFFFh:0000h. Cette adresse fait partie de la zone du BIOS en ROM.

3.

Application

Les interruptions jouent un rôle extrêmement important dans la gestion des périphériques. Regardons l'exemple suivant :

Un ordinateur communique à travers son port série avec un modem. Celui-ci reçoit via une ligne téléphonique des octets provenant d'un autre ordinateur. Les octets reçus doivent être rangés dans un buffer (zone mémoire tampon) pour être traités après.

Il existe deux méthodes pour gérer cette tâche :

8086

Contrôleur du port

série Modem

ligne téléphonique

3.1. Méthode par scrutation

Cette méthode consiste à lire en permanence le port série pour voir si un caractère est arrivé : Lire le port série

S'il y a un caractère → le stocker dans le buffer Recommencer

La boucle doit se répéter jusqu'à la fin de la communication.

Cette méthode est inefficace parce que le microprocesseur passe tout son temps à attendre l'arrivée d'un caractère alors qu'il devrait s'occuper d'autres tâches.

3.2. Méthode par interruption

La méthode par interruption fonctionne de la manière suivante :

qu'un caractère est reçu, le contrôleur envoie une demande via IRQ5 au 8259A qui à son tour demande une interruption sur INTR. Le microprocesseur arrête le programme en cours pour exécuter le sous-programme associé à IRQ5. Celui-ci lit le caractère reçu et le met dans le buffer. Le programme principal continue ensuite normalement.

Le numéro d'interruption associé à une ligne IRQn est n+8. Par conséquent, l'emplacement de l'adresse du sous-programme correspondant dans la table des vecteurs d'interruption est 4(n+8) et 4(n+8)+2.

Dans notre cas (IRQ5), l'adresse du sous-programme d'interruption doit être stocké à 34h (offset du SP) et 36h (segment du SP).

Supposons que notre SP d'interruption se trouve à F000h:EF6Fh, le programme principal devra commencer par :

1. Inhiber les interruptions (CLI)

2. Mettre EF6Fh à l'adresse 00034h et F000h à l'adresse 00036h

(ceci doit être fait à l'aide la fonction 25h de l'interruption 21h) 3. Autoriser les interruptions (STI)

4. Suite du programme ...

Le SP d'interruption à l'adresse F000h:EF6Fh : 1. Lire le caractère reçu sur le port série 2. Mettre le caractère dans le buffer 3. Retour (instruction IRET)

De cette manière, le microprocesseur exécute normalement le programme principal et à l'arrivée d'un caractère, il se branche à F000h:EF6Fh pour mettre le caractère dans le buffer puis retourne au programme.

Cette méthode permet un gain substantiel en vitesse et en performance. La plupart des périphériques sont gérés de cette manière.

Remarque

Pour connaître l'affectation des entrées IRQ dans un ordinateur travaillant sous Windows 95, cliquez sur l'icône "Système" dans le panneau de configuration. Sous l'onglet "Gestionnaire de périphériques", double-cliquez sur "Ordinateur"

8086

Contrôleur du port série

8259A

INTR IRQ5

C H A P I T R E

6

Les entrées/sorties

1.

Introduction

Le microprocesseur doit échanger des données avec l'environnement extérieur. Cet échange se fait à l'aide des périphériques.

Le flux d'information peut exister dans les deux sens : de l'extérieur vers le microprocesseur (clavier, liaison série, réseau, disque, ...) ou du microprocesseur vers l'extérieur (imprimante, écran, disque, traceur, ...)

Ces échanges d'information sont appelés les entrées/sorties : E/S (input/output : I/O en anglais).

Documents relatifs