Système d’exploitation : Assembleur Semaine 13 Les interruptions
Les interruptions (1/4) 2 types d’interruptions Interruptions matérielles : commandées par le câblage électrique (expl 1 : signal horloge : interrompt un prog + de 18 x / sec.) (expl 2 : clavier : si touche enfoncée, caract va dans buffer clavier) Interruptions logicielles : commandées par le programme (fonctions utiles écrites par MS - expl : ouvrir un fichier - code en ROM ou RAM ) Les interruptions matérielles Quand µpro exécute programme, il peut être interrompu par une interruption sur une des broches du µpro (INTR ou NMI - voir brochage du µpro en début du cours) INTR = interruption masquable (dont on peut condamner l’accès par logiciel : activer l’indicateur IF - interrupt flag) NMI = interruption non-masquable : on ne peut interdire son fonctionnement par logiciel - offre une très haute priorité (pour INTR, il existe une broche INTA - “interrupt acknowledge”- que le µpro active quand il a reçu une demande d’interruption et qu’il est prêt à la prendre en compte) Les interruptions logicielles instruction INT dans le programme en précisant le numéro d’ordre
Les interruptions (2/4) Vecteur d’interruptions Une interruption logicielle est caractérisée par son numéro d’entrée dans le vecteur des interruptions. Ce vecteur occupe les 1024 premiers octets de la mémoire et est composé de 256 éléments. Chaque élément contient une adresse de la forme segment: offset (4 octets). Cette adresse est celle de la première instruction de la procédure de traitement de l’interruption. Remarque : Les interruptions 0 à 63 sont réservées par le système.(par ex : 21h : DOS) Traitement des interruptions logicielles Une instruction INT suivie du numéro de l’interruption survient Le registre des indicateurs d’état, CS et IP sont empilés (±idem CALL) TF et IF sont remis à 0 CS et IP sont chargés avec l’adresse du programme d’interruption Le programme se poursuit en CS:IP Le programme de l’interruption se termine par IRET Extraction de la pile de IP, puis CS, puis les indicateurs Le programme reprend en CS:IP
Les interruptions (3/4) Traitement des interruptions matérielles Idem interruptions logicielles, mais l’instruction en cours est terminée avant exécution de l’interruption. Instructions spécifiques pour interruptions INT (voir ci-dessus) IRET (voir ci-dessus) HLT (halte jusqu’à une interruption ou réinitialisation) STI : mise à 1 de IF CLI : mise à 0 de IF Utilisation des interruptions : Pour accéder aux fonctions du système (ouvrir fichier, écrire un caractère…) écrites par Microsoft Possibilité de détourner les interruptions de MS-DOS. Exemple le programme keyb fr détourne l’interruption matérielle associée au clavier. Quand une touche est enfoncée, le programme (résidant) analyse la touche et transforme le ‘a’ en ‘q’,... Fonctions universelles du DOS (fonctions liées à INT 21h) – cf. page suivante
Les interruptions (4/4) Fonctions universelles du DOS (fonctions liées à INT 21h – numéro du service dans AH) Fonction 4Ch : fin de programme avec code de retour via AL. Ce code de retour peut être testé avec la commande ERRORLEVEL Fonction 09h : Affichage d’une chaîne de caractères Envoie une chaîne de caractères à l’écran à l’emplacement actuel du curseur. (! Ne pas oublier le fin de chaîne $ - la chaîne à afficher doit se trouver à DS:DX) Fonction 0Ah : Lecture d’une chaîne de caractères au clavier La chaîne lue sera disponible à DS:DX 1er octet = longueur max de la chaîne à lire (avec <CR>) 2ème octet = longueur de la chaîne lue La chaîne débute réellement au 3ème octet Traitement de fichiers,…(3Ch, 5Bh,…) Autres interruptions utiles : Test si caractère frappé au clavier : INT 16h, service 01h Imprimer un caractère : INT 17h, service 0 (code ASCII du caractère dans AL)