Etienne Tremblay - PowerPoint PPT Presentation

1 / 14
About This Presentation
Title:

Etienne Tremblay

Description:

3 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. ... – PowerPoint PPT presentation

Number of Views:56
Avg rating:3.0/5.0
Slides: 15
Provided by: Sab70
Category:

less

Transcript and Presenter's Notes

Title: Etienne Tremblay


1
Etienne Tremblay
  • Ordinateurs, Structure et Applications

GIF-16116
Cours 10, Les interruptions
Université Laval, Hiver 2007
2
Les interruptions du 8086
  • Une interruption interrompt lexécution
    séquentielle des instructions par le CPU. Lors
    dune interruption, lexécution du programme
    principal est suspendue. Linterruption 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 2 catégories dinterruptions les
    interruptions hardware et les interruptions
    software. Les interruptions hardware surviennent
    lorsque les lignes RST, NMI ou INTR du 8086 sont
    activées. Les interruptions software surviennent
    lorsque linstruction INT apparaît ou lors
    dexceptions logicielles (exemples débordement
    de pile (stack overflow), 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, dautres 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. À lintérieur dune
    de ces catégories, lINT 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. Linterruption Reset est la plus
    prioritaire.

3
Interruptions vectorisée
  • La table des vecteurs dinterruption contient
    ladresse des instructions à exécuter lorsquun
    interruption survient. Pour chaque interruption,
    la table contient 4 bytes dinformation CS et
    IP. La taille de la table des vecteurs
    dinterruption est donc 256ints 4bytes 1Ko.
  • La table des vecteurs dinterruption commence à
    ladresse 00000h et elle finit à ladresse
    003FFh. Ne pas mettre de segments à cet
    endroit!!!
  • Lorsquune interruption survient, le numéro de
    linterruption permet de trouver lemplacement
    des instructions à exécuter. Le numéro de
    linterruption est multiplié par 4 afin de
    trouver ladresse du CS et du IP à rechercher (IP
    est à ladresse inférieure, suivi de CS). Puis un
    JMP à CSIP est fait. CSIP est un vecteur
    vers le code à exécuter afin de répondre à
    linterruption.
  • Exemple Si le contenu de la mémoire, à partir de
    ladresse 00000h est 00h, 01h, 02h, 03h, 04h,
    05h, 06h, 07h, 08h, etc... et que linterruption
    1 survient, alors la routine à ladresse
    07060504 sera exécutée.
  • Reset est la seule interruption sans numéro. Pour
    reset, CSIP FFFF0H.

4
Séquence dévènements aprèsune interruption
  • Lors dune interruption logicielle ou matérielle,
    les évènements suivants se produisent
  • Le 8086 termine linstruction en cours.
  • Le drapeau IF est testé si linterruption
    provient de la ligne dinterruption matérielle
    (INTR). Si le drapeau est à 0, linterruption est
    ignorée.
  • Si une autre interruption de priorité supérieure
    ou égale est en cours, linterruption est
    ignorée.
  • 3 registres sont mis sur la pile (PUSH) dans
    lordre 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é avec à ladresse CSIP trouvée
    dans la table des vecteurs dinterruption à
    partir du numéro de linterruption.
  • La routine de service de linterruption (ISR ou
    Interrupt Service Routine) est exécutée.
  • Théoriquement, la dernière instruction de lISR
    est IRET (Interrupt RETurn). Un IRET est
    équivalent à trois POP dans cet ordre IP, CS et
    drapeaux.

5
Interruptions Internes (Exceptions)
  • Les interruptions internes sont des interruptions
    qui peuvent se produire sans que linstruction
    INT soit présente. Il sagit dexceptions qui
    surviennent quand un évènement logiciel spécial
    arrive (division par zéro par exemple)
  • Linterruption 0 survient lorsque le diviseur de
    DIV ou IDIV est 0.
  • Linterruption 4 survient lorsque le drapeau
    Overflow est 1 et que linstruction INTO est
    exécutée.
  • Les interruptions 1 et 3 servent pour du debug de
    programme.
  • Note Comme pou toutes les interruptions, les
    interruptions internes désactivent les
    interruptions matérielles.

6
Interruptions matérielle (1)
7
Interruptions matérielles (2)
  • Le 8086 a 3 pins pour les interruptions
    hardwares RESET, NMI et INTR.
  • La ligne RESET crée un reset du CPU si est HIGH
    pendant au moins 4 cycles dhorloge.
  • La ligne NMI (Non Maskable Interrupt) déclenche
    linterruption 2 lorsquelle passe de LOW à HIGH.
    Linterruption NMI nest pas désactivé lorsque IF
    est 0, contrairement aux interruptions sur INTR,
    doù son nom. Une utilisation typique de NMI est
    la détection de coupure de lalimentation
    électrique.
  • La ligne 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 nutilise quune ligne
    pour la plupart des interruptions matérielles
    (INTR), un PIC (Programmable Interrupt Controler)
    servait initialement a multiplexer 8
    interruptions pour nen former quune seule.
    Comme 8 interruptions sest révélé rapidement
    insuffisant, un autre PIC a été ajouté. Afin de
    respecter le design déjà en place, linterruption
    hardware 2 a été re-dirigée (voir plus loin). Le
    8086 supporte donc 16 interruptions matérielles
    (nommée IRQ0 à IRQ15).
  • De nos jours, les PICs sont inclus dans le
    chipset.
  • À chaque interruption matérielle correspond un
    numéro dinterruption qui nest pas égal au
    numéro dinterruption matériel. Par exemple, IRQ0
    est lINT 08. La page suivante donne une
    correspondance typique entre les IRQ et les
    périphériques du PC.

8
Interruptions matérielles (3)
9
Interruptions matérielles (4)
  • La séquence dévènements suivante se produit
    lorsquun périphérique produit une interruption
  • Le PIC reçoit et traite linterruption
  • Un registre interne du PIC permet au programmeur
    du 8086 de masquer (désactiver) certaines
    interruptions
  • Le PIC met linterruption dans un buffer
  • Le PIC regarde les priorités des interruptions et
    détermine si linterruption matérielle courante
    est la plus prioritaires
  • La ligne INTR est activée par le PIC pour dire au
    8086 quil y a interruption
  • Un pulse de 0Vdc provenant du 8086 apparaît sur
    la ligne INTA pour signaler au PIC que
    linterruption 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
    linterruption sur le bus de donnée.
  • Le PIC met le numéro de lINT sur le bus de
    donnée il ne met pas le numéro de lIRQ.
  • Le 8086 exécute la routine de service de
    linterruption
  • Le 8086 envoit un EOI (End Of Interrupt) pour
    dire au PIC que linterruption est terminée.

10
Interruptions matérielles (5)
  • Linsertion dun deuxième PIC sur la ligne IRQ2
    du premier PIC a plusieurs conséquences découlant
    surtout dun désir de conserver la compatibilité
    avec les designs nayant quun seul PIC
  • Les périphériques connectées sur IRQ2 ont été
    connectés sur IRQ9 (re-direction). Comme le
    vecteur dinterruption de IRQ9 nest pas le même
    que celui de IRQ2, il faut que IRQ9 appelle le
    vecteur dinterruption de IRQ2 pour les designs
    avec un seul PIC.
  • Désactiver lIRQ2 à lintérieur du PIC principal
    désactive les IRQ8 à IRQ15.
  • Les interruptions hardware 8 à 15 sont plus
    prioritaires que les interruptions hardware 3 à
    7.
  • Les routines de service dinterruption hardware
    IRQ8 à IRQ15 doivent gérer 2 PICs (cest-à-dire
    en voyer 2 End Of Interrupt).

11
Interruptions Logicielles
  • Les interruptions logicielles sont utilisées pour
    exécuter des tâches logicielles ayant priorité
    sur le programme principal.
  • Une interruption logicielle sappelle avec
    linstruction INT où est le numéro de
    linterruption.
  • Chaque interruption peut avoir des
    sous-fonctions. Pour spécifier une sous-fonction,
    il faut placer dans un registre prédéterminé le
    numéro de la sous-fonction voulu avant d'appeler
    l'interruption (le registre est souvent AH). La
    sous-routine de service de linterruption 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 / AH09h - Sortie d'une chaîne de caractères
    depuis DSDX.INT 21h / AH0Ah - Entrée d'une
    chaîne de caractères vers DSDX, le premier octet
    indique la taille du buffer, le deuxième octet
    indique le nombre de caractères réellement
    lus.INT 21h / AH4Ch - Quitte le système
    d'exploitation.INT 21h / AH01h - lit un
    caractère sur l'entrée standard, avec écho, le
    résultat est stocké dans AL.INT 21h / AH02h -
    écrit un caractère vers la sortie standard, DL
    le caractère à écrire, après exécution, AL DL.

12
Table résumée des INTs
Tiré de http//www.beyondlogic.org/interrupts/int
erupt.htm
13
Détournement des Interruptions
  • Lors du démarrage du PC, la table des vecteurs
    dinterruption est chargées avec des valeurs par
    défaut.
  • Pour détourner une interruption, il suffit de
    changer la table des vecteurs dinterruptions.
    Changer le CS et lIP à ladresse 4( de lINT à
    détourner) permet de changer le code exécuté
    lorsque linterruption se produira.
  • En temps normal, la nouvelle ISR appellera
    lancienne ISR sous certaines conditions. Pour
    cette raison, sauvegarder le CS et lIP de
    linstruction que lon remplace est une pratique
    recommandée (habituellement la sauvegarde se fait
    dans des variables déclarée à cet effet).
  • Le fichier DetourneInt21h.asm est un exemple de
    programme détournant une interruption.

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
  • Quest quune 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 lIRQ12?
  • Donnée la priorité de chaque interruption dans la
    Table résumée des INTs . Mettre 0 pour lINT
    la plus prioritaire et 255 pour la moins
    prioritaire.
  • Comment fonctionnent les interruptions
    matérielles dun 8086 avec 2 PICs?
Write a Comment
User Comments (0)
About PowerShow.com