50 likes | 168 Views
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.)
E N D
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 - “interruptacknowledge”- 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. • Exemplele programme keybfr 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)