1.0 INTRODUCTION Une interruption est un vnement qui interrompt, lexcution squentielle des instructions dun programme.. Lors dune interruption, lexcution du programme principal est suspendue. Linterruption est excute, puis le programme principal est continu. o Les sauts conditionnels ou inconditionnels ainsi que les appels de sous-programmes ne sont pas des interruptions. 1.1 TYPES DINTERRUPTION Il existe 2 catgories dinterruptions: les interruptions matrielles et les interruptions logicielles. Les interruptions matrielles surviennent lorsque les lignes NMI ou INTR du 8086 sont actives( un signal dit est mis par un priphrique vers le circuit pic qui a son tour envoie un signal dinterruption sur la ligne INTR)) . Les interruptions logicielles surviennent lorsque linstruction INT apparat ou lors dexceptions logicielles (exemples: dbordement de pile (stack overflow), division par zro). Toutes les interruptions ont un numro de 0 255d, sauf reset. Certains numros sont fixs par le matriel, dautres par les concepteurs du 8086 et finalement il en reste de disponibles pour le programmeur. A toute interruption il correspond un programme appel traitant de lit ou routine. Toute routine dit se termine par linstruction IRET dont le rle est de garantir un retour correct au programme interrompu. Les routines dits se trouvent dans la mmoire centrale ds le dmarrage de la machine.
..
INT n TRAITANT DE LIT n
. IRET 2
Les adresses des routines dinterruptions sont sauvegardes dans une table dite table des vecteurs dinterruptions ou table des its.
1.2 LA TABLE DES VECTEURS DITS La table des vecteurs dinterruption contient ladresse des programmes excuter (routines dit) lorsquune interruption survient. Pour chaque interruption, la table contient 4 octets dinformations( le vecteur dinterruption): CS et IP. La taille de la table des vecteurs dinterruption est donc 256ints * 4bytes = 1Ko. ; La table des vecteurs dinterruption commence ladresse 00000h(0 :0h) et elle finit ladresse 003FFh. Le vecteur i est associ a linti : exemple :le vecteur 21h est associ a lit 21h. 00000H Fig : table des interruptions VECTEUR O : est associ a la division par 0 (it logicielle) VECTEUR 8 : est associ a lit provenant du TIMER :IT matrielle VECTEUR 9/ :est associ a lit provenant du CLAVIER : IT matrielle VECTEUR 21H : est associ a lit 21h .
VECTEUR0
VECTEUR 1
IP poids faible IP poids fort CS poids faible CS poids fort
VECTEUR 255
3
Lorsquune interruption survient, le numro de linterruption permet de trouver ladresse du vecteur dit qui lui est associ. Le numro de linterruption est multipli par 4 afin de trouver ladresse du CS et du IP rechercher (IP est ladresse infrieure, suivi de CS). Puis un JMP CS:IP est fait. CS:IP est un pointeur vers le code excuter afin de rpondre linterruption. Exemple1 : les adresses des vecteurs correspondants aux IT00H, 04h, 21h sont respectivement : 0000h , 0010h, 0084h. Exemple2: :Si le contenu de la mmoire, partir de ladresse 00000h est 00h, 01h, 02h, 03h, 04h, 05h, 06h, 07h, 08h, etc... et que linterruption 1 survient, alors la routine ladresse 0706:0504 sera excute. - Reset est la seule interruption sans numro. Pour reset, CS:IP = FFFF :0000H. 1.3 Squence dvnements aprs une interruption Lors dune interruption logicielle ou matrielle, les vnements suivants se produisent: o Trois registres sont mis sur la pile (empils)dans lordre qui suit: le PSW,, CS actuel, puis IP actuel., on parle de sauvegarde du petit contexte. Les flags IF et TF sont mis 0 aprs le PUSH du PSW.,Le processeur va ignorer les interruptions matrielles qui arrivent sur la ligne INTR tant que le flag if est gal a zro. il ya donc masquage des its matrielles qui arrivent sur la ligne INTR ;. elles pourront tre dmasques a tout moment dans la routine dit., Un JMP est excut ladresse CS:IP trouve dans la table des vecteurs dinterruption partir du numro de linterruption. o La routine de service de linterruption (ISR ou Interrupt Service Routine) est excute . Toute routine dit doit commencer par la sauvegarde du grand contexte ;elle doit sauvegarder tous les registres quelle modifie ; et elle doit galement les restaurer avant excution de la dernire instruction . o Thoriquement, la dernire instruction de lISR est IRET (Interrupt return). Un IRET est quivalent trois POP dans cet ordre: IP, CS et PSW..,on parle de restauration du petit contexte. Le petit contexte et le grand contexte sont sauvegards dans le segment pile
INT X
ROUTINE X Sauvegarde du grand contexte
. Restauration du grand contexte IRET 4
1.3.1Le segment pile Le segment pile est caractris par 2 registres SS et SP, il est gr selon la politique LIFO. SP=sommet de pile, adresse du dernier lment empil. 2 oprations sont possibles: empiler et dpiler Empiler : SP := SP-2 ; [SP] := lment a empiler ; la taille de llment a empiler est toujours gale a un mot(8086) ; Cette opration est assure par linstruction PUSH op1 EXEMPLE : PUSH AX ;empile le contenu du registre AX PUSHF : empile le PSW Dpiler : X= [SP] ; x est la destination . SP :=SP+2 .cette opration est assure par linstruction POP.op1 EXEMPLES :POP BX .,dpiler dans BX POPF dpile dans le PSW.
1.3.2 Structure du PSW
x x x x Of df If Tf Sf Zf Af Pf Cf
Le flag if permet de masquer ou dmasquer les its matrielles , la valeur 0 masque les its ,la valeur 1 les dmasque; lorsque les its sont masques le microprocesseur ignore les its matrielles STI :positionne le flag IF , CLI annule le flag IF
1.4 Interruptions Logicielles Les interruptions logicielles sont utilises pour excuter des tches logicielles ayant priorit sur le programme principal. Une interruption logicielle sappelle avec linstruction INT # o # est le numro de linterruption. Chaque interruption peut avoir des sous-fonctions. Pour spcifier une sous- fonction, il faut placer dans un registre prdtermin le numro de la sous- 5
fonction voulu avant dappeler linterruption (le registre est souvent AH). La sous- routine de service de linterruption testera la valeur du registre prdtermin et aiguillera la sous-routine en consquence. Voici quelques exemples : INT 20h Quitte le systme dexploitation. INT 21h / AH=09h Sortie dune chane de caractres depuis DS :DX. INT 21h / AH=0Ah Entre dune chane de caractres vers DS :DX, le premier octet indique la taille du buffer, le deuxime octet indique le nombre de caractres rellement lus. INT 21h / AH=4Ch Quitte le systme dexploitation. INT 21h / AH=01h lit un caractre sur lentre standard, avec cho, le rsultat est stock dans AL. INT 21h / AH=02h crit un caractre vers la sortie standard, DL = le caractre crire, aprs excution, AL = DL. 1.5 Interruptions Internes (Exceptions) Les interruptions internes sont des interruptions qui peuvent se produire sans que linstruction INT soit prsente. Il sagit dexceptions qui surviennent quand un vnement logiciel spcial arrive (division par zro 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 excute. 1.6 Interruptions matrielles -Une interruption matrielle correspond a un signal mis par un priphrique vers Un circuit interface (PIC) , le PIC va slectionner la demande la plus prioritaire et envoie aprs cela un signal sur la ligne INTR, si IF=1 le p accepte la demande par lactivation de la ligne INTA , aprs cela le PIC envoie le numro N du vecteur dIT a travers le bus de donnes. o Psw est sauvegard. o IF et TF sont remis a 0 o Sauvegarde de cs et ip. o Chargement de CS et IP a partir de la table des ITS o Excution de la routine dIT ;IRET provoque le retour au programme interrompu . -La ligne RESET cre un reset du CPU si elle est HIGH pendant au moins 4 cycles dhorloge, elle permet de redmarrer lordinateur. -La ligne NMI (Non Maskable Interrupt) dclenche linterruption 2 lorsquelle passe de LOW HIGH. Linterruption NMI nest pas dsactive lorsque IF est 0, contrairement aux interruptions sur INTR, do son nom. 6
La ligne INTR sert toutes les autres interruptions matrielles du 8086. Une interruption se produit lorsque la ligne est Vcc. Les interruptions matrielles seront revues en dtail dans le chapitre 3