Fichier PDF

Partage, hébergement, conversion et archivage facile de documents au format PDF

Partager un fichier Mes fichiers Convertir un fichier Boite à outils PDF Recherche PDF Aide Contact



cours10 GIF1001 H12 .pdf



Nom original: cours10_GIF1001_H12.pdf
Titre: Microsoft PowerPoint - cours10_GIF1001_H12.ppt
Auteur: Etienne Tremblay

Ce document au format PDF 1.3 a été généré par PScript5.dll Version 5.2 / GPL Ghostscript 8.64, et a été envoyé sur fichier-pdf.fr le 10/12/2013 à 15:35, depuis l'adresse IP 41.104.x.x. La présente page de téléchargement du fichier a été vue 1215 fois.
Taille du document: 70 Ko (15 pages).
Confidentialité: fichier public




Télécharger le fichier (PDF)









Aperçu du document


Ordinateurs, Structure
et Applications
GIF-1001
Cours 10, Les interruptions
Etienne Tremblay
Université Laval, Hiver 2012
GIF-1001
Cours 10, p.1

Les interruptions du 8086


Une interruption interrompt l’exécution séquentielle des instructions par le
CPU. Lors d’une interruption, l’exécution du programme principal est
suspendue. Une sous-routine traitant l’interruption est exécutée, puis le
programme principal est continué.
– Les sauts conditionnels ou inconditionnels ainsi que les appels de sous-routines
ne sont pas des interruptions.






Il existe plusieurs catégories d’interruptions: les exceptions, les interruptions
matérielles et les interruptions logicielles. Les interruptions matérielles
surviennent lorsque les lignes RST, NMI ou INTR du 8086 sont activées.
Les interruptions logicielles surviennent lorsque l’instruction INT apparaît et
les exceptions se produisent quand le microprocesseur ne peut exécuter
une instruction (exemples: instruction invalide, division par zéro, …).
Toutes les interruptions ont un numéro de 0 à 255d, sauf reset. Certains
numéros sont fixés par le matériel, d’autres par les concepteurs du 8086 et
finalement il en reste de disponibles pour le programmeur.
Les interruptions ont des priorités. Elles sont, du plus prioritaire au moins
prioritaire: Reset, Exceptions, INT, NMI et INTR. À l’intérieur d’une de ces
catégories, l’INT avec le numéro le plus bas est habituellement la plus
prioritaire. Une interruption de haute priorité peut interrompre une
interruption de priorité inférieure. Une interruption de basse priorité ne peut
pas interrompre une interruption de priorité égale ou supérieure.
L’interruption Reset est la plus prioritaire.
GIF-1001
Cours 10, p.2

Interruptions vectorisées


La table des vecteurs d’interruption contient l’adresse de la sous-routine à exécuter
lorsqu’un interruption survient. Pour chaque interruption, la table contient 4 bytes
d’information: CS et IP. Chaque entrée de la table est un “vecteur” qui mène aux
instruction à exécuter pour traiter l’interruption. La taille de la table des vecteurs
d’interruption est donc 256ints * 4bytes = 1Ko.
• La table des vecteurs d’interruption commence à l’adresse 00000h et elle finit à
l’adresse 003FFh. Ne pas mettre de segments à cet endroit!!!
• Lorsqu’une interruption survient, le numéro de
Mémoire
l’interruption permet de trouver l’emplacement
des instructions à exécuter. Le numéro de
l’interruption est multiplié par 4 afin de trouver
Code exécuté
l’adresse du CS et du IP à rechercher (IP est à
lorsque l'INT1
survient
l’adresse inférieure, suivi de CS). Puis un JMP à
07564h (0706:0504)
CS:IP est fait. CS:IP est un « vecteur » vers le
code à exécuter afin de répondre à l’interruption.
- Exemple: Si le contenu de la mémoire, à partir de
l’adresse 00000h est 00h, 01h, 02h, 03h, 04h, 05h,
06h, 07h, 08h, etc... et que l’interruption 1 survient,
alors la routine à l’adresse 0706:0504 sera
exécutée.

• Reset est la seule interruption sans numéro.
Pour reset, CS:IP = FFFF0H. Ce sont les valeurs
de CS et IP au démarrage de l’ordinateur

CS et IP pour Int 4
CS et IP pour Int 3
CS et IP pour Int 2

# d'Int

4

00004h

07
06
05
04

CS et IP pour Int 1
CS et IP pour Int 0

00000h

GIF-1001
Cours 10, p.3

Séquence d’évènements après
une interruption


Lors d’une interruption logicielle ou matérielle, les évènements suivants se
produisent:
– Le 8086 termine l’instruction en cours.
– Le drapeau IF est testé si l’interruption provient de la ligne d’interruption
matérielle (INTR). Si le drapeau est à 0, l’interruption est masquée (ignorée, mais
toujours active).
– Si une autre interruption de priorité supérieure ou égale est en cours,
l’interruption est mise de côté pour être exécutée ultérieurement.
– Trois registres sont mis sur la pile (PUSH) dans l’ordre qui suit: les drapeaux, CS
actuel, puis IP actuel. Le drapeau IF est mis à 0 après le PUSH des flags.
– Un JMP est exécuté à l’adresse CS:IP trouvée dans la table des vecteurs
d’interruption à partir du numéro de l’interruption.
– La routine de service de l’interruption (ISR ou Interrupt Service Routine) désignée
par la table des vecteurs d’interruption est exécutée.
– Théoriquement, la dernière instruction de l’ISR est IRET (Interrupt RETurn). Un
IRET est équivalent à trois POP dans cet ordre: IP, CS et drapeaux.

GIF-1001
Cours 10, p.4

Exceptions


Les exceptions surviennent quand un évènement logiciel spécial arrive. Lors
de la plupart des exceptions le microprocesseur ne peut pas exécuter
l’instruction en cours pour diverses raisons: instruction invalide, division par
0, référence à une adresse invalide, accès invalide à une adresse protégée
(pas avec le 8086), faute matérielle, etc. Voici quelques exceptions du 8086:
– L’interruption 0 survient lorsque le diviseur de DIV ou IDIV est 0.
– L’interruption 4 survient lorsque le drapeau Overflow est 1 et que l’instruction
INTO est exécutée.
– Les interruptions 1 et 3 servent pour du debug de programme.



Les exceptions désactivent les interruptions matérielles et elles sont plus
prioritaires que les interruptions logicielles.

GIF-1001
Cours 10, p.5

Interruptions matérielles (1)

GIF-1001
Cours 10, p.6

Interruptions matérielles (2)







Le 8086 a trois broches pour les interruptions matérielles: RESET, NMI et
INTR.
La broche RESET crée un reset du CPU si elle est HIGH pendant au moins
quatre cycles d’horloge.
La broche NMI (Non Maskable Interrupt) déclenche l’interruption 2
lorsqu’elle passe de LOW à HIGH. L’interruption NMI n’est pas désactivé
lorsque IF est 0, contrairement aux interruptions sur INTR, d’où son nom.
Une utilisation typique de NMI est la détection de mise hors tension.
La broche INTR sert à toutes les autres interruptions matérielles du 8086.
Une interruption est se produit lorsque la ligne est à Vcc.
Étant donné que le 8086 n’utilise qu’une ligne pour la plupart des
interruptions matérielles (INTR), un PIC (Programmable Interrupt Controler)
servait initialement a multiplexer 8 interruptions pour n’en former qu’une
seule. Comme 8 interruptions s’est révélé rapidement insuffisant, un autre
PIC a été ajouté. Afin de respecter le design déjà en place, l’interruption
matérielle 2 a été re-dirigée (voir plus loin). Le 8086 supporte donc 16
interruptions matérielles (nommées IRQ0 à IRQ15).
– De nos jours, les PICs sont inclus dans le chipset.
– À chaque interruption matérielle correspond un numéro d’interruption qui n’est
pas égal au numéro d’interruption matériel. Par exemple, IRQ0 est l’INT 08. La
page suivante donne une correspondance typique entre les IRQ et les
périphériques du PC.
GIF-1001
Cours 10, p.7

Interruptions matérielles (3)
INT (Hex)
77
76
75
74
73
72
71
70
0F
0E
0D
0C
0B
0A
09
08

IRQ
IRQ15
IRQ14
IRQ13
IRQ12
IRQ11
IRQ10
IRQ9
IRQ8
IRQ7
IRQ6
IRQ5
IRQ4
IRQ3
IRQ2
IRQ1
IRQ0

Function
Reserved
Hard Disk Drive
Maths Co-Processor
PS/2 Mouse
Reserved
Reserved
Redirected IRQ2
Real Time Clock
Parallel Port
Floppy Disk Controller
Reserved/Sound Card
Serial Port
Serial Port
PIC2
Keyboard
System Timer

GIF-1001
Cours 10, p.8

Interruptions matérielles (4)


La séquence d’évènements suivante se produit lorsqu’un périphérique
produit une interruption:
– Le PIC reçoit et traite l’interruption
• Un registre interne du PIC permet au programmeur du 8086 de
masquer (désactiver) certaines interruptions
• Le PIC met l’interruption dans un buffer
• Le PIC regarde les priorités des interruptions et détermine si
l’interruption matérielle courante est la plus prioritaire
– La ligne INTR est activée par le PIC pour dire au 8086 qu’il y a
interruption
– Un pulse de 0Vdc provenant du 8086 apparaît sur la ligne INTA pour
signaler au PIC que l’interruption est reçue (Acknowledged). La ligne
INTR est désactivée après le pulse.
– Un deuxième pulse de 0Vdc provenant du 8086 demande au PIC de
mettre le numéro de l’interruption sur le bus de donnée.
– Le PIC met le numéro de l’INT sur le bus de donnée: il ne met pas le
numéro de l’IRQ.
– Le 8086 exécute la routine de service de l’interruption
– Une instruction à la fin de la routine envoie un EOI (End Of Interrupt) au
PIC pour lui signaler que l’interruption est traitée.
GIF-1001
Cours 10, p.9

Interruptions matérielles (5)


L’insertion d’un deuxième PIC sur la ligne IRQ2 du premier PIC a
plusieurs conséquences découlant surtout d’un désir de conserver la
compatibilité avec les designs n’ayant qu’un seul PIC:
– Les périphériques connectées sur IRQ2 ont été connectés sur IRQ9 (redirection). Comme le vecteur d’interruption de IRQ9 n’est pas le même
que celui de IRQ2, il faut que IRQ9 appelle le vecteur d’interruption de
IRQ2 pour les designs avec un seul PIC.
– Désactiver l’IRQ2 à l’intérieur du PIC principal désactive les IRQ8 à
IRQ15.
– Les interruptions matérielles 8 à 15 sont plus prioritaires que les
interruptions matérielles 3 à 7.
– Les routines de service d’interruptions matérielles IRQ8 à IRQ15 doivent
gérer deux PICs, c’est-à-dire envoyer deux End Of Interrupt.

GIF-1001
Cours 10, p.10

Interruptions logicielles





Une interruption logicielle s’appelle avec l’instruction INT # où # est le
numéro de l’interruption.
Chaque interruption peut avoir des sous-fonctions. Pour spécifier une sousfonction, il faut placer dans un registre prédéterminé le numéro de la sousfonction voulu avant d'appeler l'interruption (le registre est souvent AH). La
sous-routine de service de l’interruption testera la valeur du registre
prédéterminé et aiguillera la sous-routine en conséquence.
Voici quelques exemples tirés de EMU8086:
– INT 20h - Quitte le système d'exploitation.
INT 21h / AH=09h - Sortie d'une chaîne de caractères depuis DS:DX.
INT 21h / AH=0Ah - Entrée d'une chaîne de caractères vers DS:DX, le premier
octet indique la taille du buffer, le deuxième octet indique le nombre de
caractères réellement lus.
INT 21h / AH=4Ch - Quitte le système d'exploitation.
INT 21h / AH=01h - lit un caractère sur l'entrée standard, avec écho, le résultat
est stocké dans AL.
INT 21h / AH=02h - écrit un caractère vers la sortie standard, DL = le caractère à
écrire, après exécution, AL = DL.

GIF-1001
Cours 10, p.11

Interruptions logicielles et système d’exploitation







Les systèmes d’exploitations gèrent habituellement les périphériques. Les
programmes de l’usager accèdent aux périphériques par la biais de fonctions du
système d’exploitation.
Les ordinateurs ont souvent du matériel différent et les fonctions permettant d’accéder
à ce matériel changent en fonction du matériel. Le programmeur ne veut pas se
soucier de toutes les configurations de matériel possibles lorsqu’il accède à un
périphérique.
La table des vecteurs d’interruption permet de changer facilement l’adresse de la
routine traitant l’interruption d’un périphérique. Avec le 8086, cette table est
habituellement gérée par le système d’exploitation.
Le programmeur ne veut pas apprendre les adresses des fonctions du système
d’exploitation, ni changer son programme si le système d’exploitation change.
Les interruptions logicielles sont généralement utilisées pour appeler des
fonctions du système d’exploitation, principalement afin d’accéder aux
périphériques.






Le BIOS fournit un ensemble de fonctions d’accès aux périphériques
Le système fournit un ensemble de fonctions d’accès aux périphériques. Il change la table
des vecteurs d’interruption en fonction du matériel de l’ordinateur.
Périphérique = clavier, écran, horloge…
Les interruptions sont habituellement exécutées en mode superviseur: il s’agit d’un mode
privilégié (celui du système d’exploitation) ayant tout le contrôle du système.
Le terme SVC (SuperVisor Call instruction) est habituellement employé pour désigner une
interruption logicielle appelant une fonction du système d’exploitation.

GIF-1001
Cours 10, p.12

Table résumée des INTs
INT (Hex)
00 - 01
2
03 - 07
8
9
0A
0B
0C
0D
0E
0F
10 - 6F
70
71
72
73
74
75
76
77
78 - FF

IRQ
Exception Handlers
Non-Maskable IRQ
Exception Handlers
Hardware IRQ0
Hardware IRQ1
Hardware IRQ2
Hardware IRQ3
Hardware IRQ4
Hardware IRQ5
Hardware IRQ6
Hardware IRQ7
Software Interrupts
Hardware IRQ8
Hardware IRQ9
Hardware IRQ10
Hardware IRQ11
Hardware IRQ12
Hardware IRQ13
Hardware IRQ14
Hardware IRQ15
Software Interrupts

Common Uses
Non-Maskable IRQ (Parity Errors)
System Timer
Keyboard
Redirected
Serial Comms. COM2/COM4
Serial Comms. COM1/COM3
Reserved/Sound Card
Floppy Disk Controller
Parallel Comms.
Real Time Clock
Redirected IRQ2
Reserved
Reserved
PS/2 Mouse
Math's Co-Processor
Hard Disk Drive
Reserved
-

Tiré de: http://www.beyondlogic.org/interrupts/interupt.htm

GIF-1001
Cours 10, p.13

Détournement des Interruptions






Lors du démarrage du PC, la table des vecteurs d’interruption, en RAM
parce qu’il faut pouvoir la changer, est chargée avec des valeurs par défaut.
Pour détourner une interruption, il suffit de changer la table des vecteurs
d’interruptions. Changer le CS et l’IP à l’adresse 4*(# de l’INT à détourner)
permet de changer le code exécuté lorsque l’interruption se produira.
En temps normal, la nouvelle ISR appellera l’ancienne ISR sous certaines
conditions. Pour cette raison, sauvegarder le CS et l’IP de l’instruction que
l’on remplace est une pratique recommandée (habituellement la sauvegarde
se fait dans des variables déclarées à cet effet).
Le fichier DetourneInt21h.asm est un exemple de programme détournant
une interruption.

GIF-1001
Cours 10, p.14

Références et exercices


Références







Irv Englander, section 9.3
DetourneInt21h.asm
http://www.beyondlogic.org/interrupts/interupt.htm
http://coen.boisestate.edu/ssmith/ee332/overheads/Interrupts-11.pdf

Exercices
– Qu’est qu’une interruption?
– Supposons que les 256 premiers bytes de la mémoire valent de 00h à
FFh. À quelle adresse se trouvera le code à exécuter lors de l’IRQ2?
– Donnée la priorité de chaque interruption dans la « Table résumée des
INTs ». Mettre 0 pour l’INT la plus prioritaire et 255 pour la moins
prioritaire.
– Comment fonctionnent les interruptions matérielles d’un 8086 avec 2
PICs?

GIF-1001
Cours 10, p.15


Documents similaires


cours10 gif1001 h12
interrupts
snk ng dev manual
emd licence acad 0809
chap4 interruptions
chap6 archiii pic


Sur le même sujet..