Table des matières
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 ou EAX
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.
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):
-
Procedure Int00h(Flags,CS,IP,AX,BX,CX,DX,SI,DI,DS,ES,BP:Word);Begin
If Mem[CS:IP]shr
4=$FThen
Begin If
Mem[CS:IP+1]in[$70..$77]Then
Inc(IP)Else
If
Mem[CS:IP+1]in[$36,$3E,$B0..$B7]Then
Inc(IP,2);
Inc(IP,2);AX:=0
End Else
Halt(200)
End;
|
-
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 DEBUG, SoftICE,
CodeView,...
-
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:
-
Procedure
Int01h(Flags,CS,IP,AX,BX,CX,DX,SI,DI,DS,ES,BP:Word);
Interrupt;Begin Write('Breakpoint:',CS,':',IP); Case
Mem[CS:IP]
of
$98: WriteLn('CBW');
{ ... } End; End;
|
-
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.
-
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 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.
| 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. |
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!
Références
Aide-mémoire des interruptions du MS-DOS, Edition Marabout, Philippe Mercier, 1990, ISBN: 2-501-01297-6, page 19 à 24.
|