Interruption 24h: Erreur critique
Cette interruption est appelé par le système d'exploitation à chaque fois qu'une erreur critique survient. Le vecteur d'interruption de machine pour l'interruption 24h (emplacements de mémoire 0000:0090h à 0000:0093h) contient l'adresse de la routine recevant le contrôle lorsqu'une erreur critique (généralement une erreur matérielle) est détectée. Cette adresse est également copiée dans les emplacements 12h à 15h du préfixe de segment de programme (PSP) lorsqu'un programme est chargé mais avant qu'il ne commence à s'exécuter, et est restaurée à partir du PSP (dans le cas où elle a été modifiée par l'application) dans le cadre de la gestion des terminaisons d'une application du système d'exploitation DOS.
Entrée
Registre | Description | |||||
---|---|---|---|---|---|---|
AH | Ce registre permet d'indiquer les drapeaux de processus et le type d'erreur: | |||||
Bit | Description | |||||
0 | Ce bit vaut 1 si écriture, 0 si c'est en lecture. | |||||
1 à 2 | Ces bits permettent d'indiquer la région sur le disque où est survenu l'erreur: | |||||
Valeur | Description | |||||
00b | Cette valeur permet d'indiquer la région du système d'exploitation DOS. | |||||
01b | Cette valeur permet d'indiquer dans la FAT (Table d'allocation de fichier). | |||||
10b | Cette valeur permet d'indiquer dans le répertoire racine. | |||||
11b | Cette valeur permet d'indiquer dans la région des données. | |||||
3 | Ce bit permet d'indiquer un échec d'allocation (DOS 3.0+). | |||||
4 | Ce bit permet d'indiquer qu'il faut réessayer l'allocation (DOS 3.0+). | |||||
5 | Ce bit permet d'indiquer qu'il faut ignorer l'allocation (DOS 3.0+). | |||||
6 | Ce bit n'est pas utilisé. | |||||
7 | Ce bit permet d'indiquer la classe d'erreur critique: | |||||
Valeur | Description | |||||
0 | Cette valeur permet d'indiquer une erreur d'entrée/sortie disque, dans ce cas: | |||||
Registre | Description | |||||
AL | Ce registre permet d'indiquer l'unité de disque logique. | |||||
1 | Cette valeur permet d'indiquer un si c'est un périphérique de bloc, une mauvaise image de FAT en mémoire, si c'est un périphérique de caractères, son code d'erreur est dans le registre DI: | |||||
Registre | Description | |||||
DI | L'octet faible de ce registre contient le code d'erreur si le bit 7 de AH vaut 1: | |||||
Valeur | Système requis | Description | ||||
00h | DOS 1.0+ | Cette valeur permet d'indiquer que la disquette est protégé contre l'écriture. | ||||
01h | DOS 1.0+ | Cette valeur permet d'indiquer que l'accès à un périphérique non reconnu par le système d'exploitation. | ||||
02h | DOS 1.0+ | Cette valeur permet d'indiquer que la lecture au périphérique n'est pas prête. | ||||
03h | DOS 1.0+ | Cette valeur permet d'indiquer que l'instruction n'est pas reconnu par le système d'exploitation. | ||||
04h | DOS 1.0+ | Cette valeur permet d'indiquer qu'une erreur CRC est survenu. | ||||
05h | DOS 1.0+ | Cette valeur permet d'indiquer que la largeur des données n'est pas correcte. | ||||
06h | DOS 1.0+ | Cette valeur permet d'indiquer que l'opération de recherche a été infructueuse. | ||||
07h | DOS 1.0+ | Cette valeur permet d'indiquer que le type de périphérique n'est pas reconnu par le système d'exploitation. | ||||
08h | DOS 1.0+ | Cette valeur permet d'indiquer que le secteur est introuvable. | ||||
09h | DOS 2.0+ | Cette valeur permet d'indiquer qu'il n'y a plus de papier dans l'imprimante. | ||||
0Ah | DOS 2.0+ | Cette valeur permet d'indiquer une erreur d'écriture. | ||||
0Bh | DOS 2.0+ | Cette valeur permet d'indiquer une erreur de lecture. | ||||
0Ch | DOS 2.0+ | Cette valeur permet d'indiquer une erreur de catégorie générale. | ||||
0Dh | DOS 3.0+ | Cette valeur permet d'indiquer une erreur de violation de partage de même ressource. | ||||
0Eh | DOS 3.0+ | Cette valeur permet d'indiquer une violation de verrouillage. | ||||
0Fh | DOS 3.0+ | Cette valeur permet d'indiquer un changement d'unité de disque invalide. | ||||
10h | DOS 3.0+ | Cette valeur permet d'indiquer que le FCB est invalide. | ||||
11h | DOS 3.0+ | Cette valeur permet d'indiquer un débordement de tampon dans le partage. | ||||
12h | DOS 3.3+ | Cette valeur permet d'indiquer qu'un code de page de numéro incompatible avec le système d'exploitation. | ||||
13h | DOS 4.0+ | Cette valeur permet d'indiquer qu'une entrée manquante est survenu. | ||||
14h | DOS 4.0+ | Cette valeur permet d'indiquer qu'un espace insuffisante sur l'unité de disque est survenu. | ||||
BP:SI | Cette paire de registres permet d'indiquer l'entête du pilote de périphérique. |
Empiler dans la pile, on retrouve respectivement:
Taille | Description |
---|---|
Double mot | Adresse de retour pour l'appel de l'interruption 24h |
Mot | Registre de drapeaux du microprocesseur de l'interruption 24h |
Mot | Registre AX de l'entrée de l'interruption 21h |
Mot | Registre BX de l'entrée de l'interruption 21h |
Mot | Registre CX de l'entrée de l'interruption 21h |
Mot | Registre DX de l'entrée de l'interruption 21h |
Mot | Registre SI de l'entrée de l'interruption 21h |
Mot | Registre DI de l'entrée de l'interruption 21h |
Mot | Registre BP de l'entrée de l'interruption 21h |
Mot | Registre DS de l'entrée de l'interruption 21h |
Mot | Registre ES de l'entrée de l'interruption 21h |
Double Mot | Adresse de retour de l'appel de l'interruption 21h |
Mot | Registre de drapeaux du microprocesseur de l'interruption 21h |
Sortie
Registre | Description | |
---|---|---|
AL | Cette registre permet d'indiquer le code d'action à apporté: | |
Valeur | Description | |
00h | Cette valeur permet d'indiquer qu'il faut ignoré l'erreur | |
01h | Cette valeur permet d'indiquer qu'il faut répéter l'opération (RETRY) | |
02h | Cette valeur permet d'indiquer qu'il faut terminer le programme immédiatement à l'aide de l'Interruption 21h, Fonction 4Ch ou Interruption 20h. | |
03h | Cette valeur permet d'indiquer qu'il faut interrompre l'appel de la fonction courante (si DOS 3 ou supérieur). |
Remarques
- Cette interruption ne doit jamais être émise directement.
- Lors de l'entrée dans le gestionnaire d'interruption d'erreur critique, le bit 7 du registre AH est effacé (soit la valeur 0) si l'erreur était une erreur d'entrée/sortie sur disque; sinon, il est défini (soit la valeur 1). La paire de registres BP:SI contient l'adresse d'un en-tête de pilote de périphérique à partir duquel des informations supplémentaires peuvent être obtenues. Les interruptions sont désactivées. Les registres seront configurés pour une nouvelle tentative et un code d'erreur se trouvera dans la moitié inférieure du registre DI, la moitié supérieure n'étant pas définie.
- Lorsqu'une erreur d'entrée/sortie de disque se produit, le système d'exploitation DOS réessaie automatiquement l'opération avant d'émettre une erreur critique d'interruption 24h. Le nombre de tentatives varie selon les différentes versions du système d'exploitation DOS, mais se situe généralement entre 3 et 5.
- Les gestionnaires d'interruption 24h doivent conserver les registres SS, SP, DS, ES, BX, CX et DX. Seules les interruptions 21h, fonctions de 01h à 0Ch et 59h peuvent être utilisées par un gestionnaire d'interruption 24h; les autres appels de fonction détruiront la pile du système d'exploitation DOS et sa capacité à réessayer ou à ignorer une erreur.
- Si le gestionnaire d'interruption 24h renvoie le contrôle directement au programme d'application plutôt qu'au système d'exploitation DOS, il doit restaurer les registres du programme, en supprimant tous les mots sauf les 3 derniers de la pile et émettre une instruction assembleur IRET. Le contrôle revient à l'instruction immédiatement après l'appel de fonction ayant provoqué l'erreur. Cette option laisse au système d'exploitation DOS dans un état instable jusqu'à ce qu'un appel à l'interruption 21h supérieure à la fonction 0Ch soit effectué.
Références
Aide-mémoire des interruptions du MS-DOS, Edition Marabout, Philippe Mercier, 1990, ISBN: 2-501-01297-6, page 297 à 299.