Table des matières
- Interruption 00h: Division par zéro
- Interruption 01h: Pas à pas
- Interruption 02h: Erreur mémoire
- Interruption 03h: Point d'arrêt
- Interruption 04h: Débordement
- Interruption 05h: Impression de l'écran
- Interruption 06h: Instruction invalide
- Interruption 07h: Instruction coprocesseur
Liste des IRQ0 à IRQ7
Ces interruptions sont utilisées par le micro-processeur lorsqu'une opération irrégulière survient. On entend par ce terme, les opérations suivantes: division par zéro, déboguage pas à pas, erreur mémoire (NMI), débordement, instruction inconnu, émulation coprocesseur,... Ces interruptions ne devrait pas être appeler directement, car le processeur devrait être même de l'appeler au moment opportun.
- Interruption 00h: Division par 0: Cette interruption est appeler chaque fois qu'une division par 0 à lieux, on parle aussi bien dans le cas de 16, 32 ou 64 bits. La plupart des programmes ont une routine appelant un processus de terminaison, plus rarement ont peut également faire retourner 0 dans les registres AL, AX, EAX ou RAX afin d'obtenir une réponse pratique arrivant plus à ce résultat. Il n'y aucune raison pour un programme d'appeler cette interruption directement.
- Interruption 01h: Pas à pas : Cette interruption est appelée après chaque interruptions si le drapeau TRAP est fixé à 1. Dans le cas ou il est 0 il ne sera donc jamais appelé. Cette interruption à pour but de suivre instruction par instruction un programme comme le fait par exemple DEBUG, Turbo Debugger, SoftICE, CodeView,...
- Interruption 02h: Erreur mémoire : Cette interruption est appelée lorsqu'une erreur dans le circuit de mémoire électronique à lieu, il n'est pas masquable et ne peut donc pas être empêcher du la gravité de l'erreur.
- Interruption 03h : Point d'arrêt : Cette interruption est un peu particulière, elle ne prend qu'un octet de code machine, le code est 0CCh. En peut le mettre dans un programme dans le but de passer en mode point d'arrêt (BreakPoint) lorsqu'elle est rencontrée. Elle est utilisée dans des programmes ou processus de déboguage.
- Interruption 04h : Débordement : Cette interruption est utilisé lorsqu'il y a un débordement d'opération d'addition, soustraction,... Cette interruption n'est appeler que si le drapeau de débordement du microprocesseur (Overflow - OF) est fixé à 1 et qu'une instruction INTO est rencontrée. C'est naturellement une instruction intéressant d'avantage les concepteurs de compilateur que les programmeurs d'assembleur...
- Interruption 05h : Impression de l'écran : Cette interruption est sans doute celle ayant le plus une apparence de hors contexte parmi la liste des interruptions du processeurs. En effet, elle est appeler lorsque vous enfoncé la touche «PrintScreen» par l'intermédiaire de l'interruption 09h (IRQ1) et donc si les instructions n'était pas écrit dans le BIOS ou le système d'exploitation, le processeur ne l'appellerait jamais ! Il s'agit donc d'un service indépendant du microprocesseur n'ayant rien à voir avec ceux de cette liste.
- Interruption 06h : Instruction invalide : Cette interruption n'a obtenu une fonctionnalité qu'à partir, hélas d'un 80286, ainsi il aurait été de bonne augure de l'avoir dès les 8088 afin d'émuler de façon logiciel les futurs instructions des microprocesseur. Vous l'avez devinez, cette interruption est appelé chaque fois qu'une instruction non reconnu par le micro-processeur est rencontrée, disponible qu'avec le 80286, elle permet a un programme de lancer un processus d'urgence lorsqu'une instruction inconnu dans son programme est rencontré. A l'autre extrême, le programmeur pourra se lancer tenter d'émuler certaine instruction non reconnue par les concurrents d'INTEL, comme par exemple, l'instruction SETALC, instruction offrant la possibilité de transférer le contenu de drapeau de retenu directement dans le registre processeur AL sans être obliger de faire deux instructions compliquer : «MOV AL,0; ADC AL,0». Ce genre de possibilité est très sous-estimer par la plupart des programmes et cette interruption permettrait pourtant de mieux résoudre ce genre de situation.
- Interruption 07h : Instruction coprocesseur : Cette interruption, un peu l'image de la précédente vise combler une situation de manque. Ainsi lorsque vous n'avez pas de coprocesseur d'inclus sur votre ordinateur et qu'une instruction de coprocesseur est rencontré, cette interruption est appelé. Il s'agira donc d'une alternative pour émuler les coprocesseurs même si la machine n'en possède pas. Le seul inconvénient de cette interruption c'est qu'elle n'est appelé qu'à partir du 80286, ainsi votre émulateur ne pourra être disponible qu'avec les processeurs 80286, 80386 et 80486 ! Très court longévité pour une mécanisme fort essentiel afin d'offrir un maximum de possibilité à une machine... Bravo INTEL, encore une fois t'a manquer ton propre bateau!
Voici un exemple que j'ai moi-même utiliser dans mon application MonsterBook pour produire cette effet contester par les profs de math mais étant beaucoup plus pratique en fait d'économie de mémoire (exemple en langage Borland Turbo Pascal) :
Pour ceux voulant protéger leurs programmes contre le piratage, la première précaution à prendre est d'empêcher que le programme puisse être exécuté sous le contrôle de DEBUG. Pour cela, il faudra corrompre la bonne exécution des interruptions 01h et 03h. Dans ce but, la meilleure opération consiste à installer 2 routines très fréquemment utilisées à la place de ces interruptions. Le programme exécutera donc des instructions INT 1 ou INT 3 à la place d'un CALL classique pour appeler ces routines. Ce système empêchera toute utilisation du programme avec DEBUG.
Voici un exemple d'un commencement de programme débuguage écrit en langage Pascal afin que vous compreniez comment il procède :
Même l'instruction assembleur CLI empêchant toute interruption ne bloquera pas sont exécution étant donné la gravité de la situation.
Le point d'entrée de cette interruption sur les Bios 386 d'American Megatrend 1985-1990 est F000h:E98Ah.
Valeur | Description |
---|---|
0 | Il n'y a pas d'impression de l'écran actuellement en cours ou le dernier appel à ce processus c'est bien déroulé! |
1 | Il y a pas d'impression de l'écran actuel en cours. |
255 (0FFh) | Il y a eu malheureusement une erreur lors du dernier impression de l'écran. |
Références
Aide-mémoire des interruptions du MS-DOS, Edition Marabout, Philippe Mercier, 1990, ISBN: 2-501-01297-6, page 19 à 24.