Interruption 27h: Terminer en TSR
Cette interruption permet d'effectuer la terminaison de l'exécution d'un programme en mode résident (TSR). Ainsi, cette interruption met fin à l'exécution du programme en cours d'exécution, mais réserve une partie ou la totalité de sa mémoire afin qu'elle ne soit pas superposée par le prochain programme transitoire à charger. Le système d'exploitation DOS effectue ensuite les actions suivantes : les tampons de fichiers sont vidés et tous les descripteurs ouverts pour les fichiers ou les périphériques appartenant au processus sont fermés, le vecteur gestionnaire de terminaison (Interruption 22h) est restauré à partir de PSP:000Ah, le vecteur du gestionnaire de Ctrl+C (Interruption 23h) est restauré à partir de PSP:000Eh, a partir de la version 2.0 du système d'exploitation DOS, le vecteur du gestionnaire d'erreurs critiques (Interruption 24h) est restauré à partir de PSP:0012h, et le contrôle est transféré au gestionnaire de terminaison. Si le programme revient à l'interpréteur de commande COMMAND.COM, les transferts de contrôle vers la partie résidente et la partie transitoire sont rechargés si nécessaire. Si un fichier de traitement par lot est en cours, la ligne suivante du fichier est récupérée et interprétée; sinon, une prompt est émise pour la prochaine commande utilisateur.
Entrée
Registre | Description | ||
---|---|---|---|
CS | Ce registre permet d'indiquer l'adresse du segment du PSP (Prefix Segment Program) dont la structure est la suivante: | ||
Déplacement | Longueur | Description | |
00h | 2 octets | Ce champ contient l'instruction assembleur «INT 20h» (DB 0CDh,20h) | |
02h | 2 octets | Ce champ contient l'adresse du dernier segment alloué au programme | |
04h | 1 octet | Ce champ est réservé pour un usage interne ou futur | |
05h | 5 octets | Ce champ contient l'instruction d'appel de l'interruption DOS (INT 21h) | |
0Ah | 4 octets | Ce champ contient l'adresse de l'interruption 22h | |
0Eh | 4 octets | Ce champ contient l'adresse de l'interruption 23h | |
12h | 4 octets | Ce champ contient l'adresse de l'interruption 24h | |
16h | 2 octets | Ce champ contient l'adresse de segment du programme parent | |
18h | 20 octets | Ce champ contient une table des «Handles» permettant la gestion des fichiers par le système d'exploitation | |
2Ch | 2 octets | Ce champ contient une adresse de segment de l'environnement | |
2Eh | 4 octets | Ce champ est réservé pour un usage interne ou futur | |
32h | 2 octets | Ce champ contient la longueur de la table des «Handles» permettant la gestion des fichiers par le système d'exploitation | |
34h | 4 octets | Ce champ contient la Adresse de la table des «Handles» permettant la gestion des fichiers par le système d'exploitation | |
38h | 23 octets | Ce champ est réservé pour un usage interne ou futur | |
50h | 3 octets | Ce champ contient les instructions assembleur «INT 21h» et «RETF» (DB 0CDh, 021h, 0CBh) | |
53h | 9 octets | Ce champ est réservé pour un usage interne ou futur | |
5Ch | 16 octets | Ce champ contient le premier FCB (File Control Block) nommé aussi FCB1 | |
6Ch | 16 octets | Ce champ contient le deuxième FCB (File Control Block) nommé aussi FCB2 | |
80h | 127 octets | Ce champ contient la ligne de commande et la DTA par défaut | |
DX | Ce registre permet d'indiquer le nombre d'octets qu'il faut réservé + 1 pour le programme (Minimum: 0h (DOS 1.x) 110h (DOS 2.x) 60h (DOS 3+) et Maximum FFF0h). |
Sortie
Aucune
Remarques
- Cet appel de fonction est généralement utilisé pour permettre aux utilitaires, pilotes ou gestionnaires d'interruption écrits par l'utilisateur d'être chargés en tant que programmes ordinaires .COM ou .EXE, puis de rester résidents. L'entrée ultérieure du code se fait via une interruption matérielle ou logicielle.
- Cette fonction tente de définir le bloc d'allocation de mémoire initial à la longueur en octets spécifiée dans le registre DX. Si d'autres blocs de mémoire ont été demandés par l'application via l'interruption 21h, fonction 48h, ils ne seront pas libérés par cette fonction.
- Les autres méthodes pour effectuer une sortie finale sont : Interruption 20h, Interruption 21h, Fonction 00h, Interruption 21h, Fonction 31h, Interruption 21h, Fonction 4Ch.
- Cette fonction ne doit pas être appelée par des programmes .EXE étant chargés à l'extrémité supérieure de la zone de programme transitoire (c'est-à-dire liés au commutateur /HIGH), car ceux-ci réserve la mémoire normalement utilisée par la partie transitoire de l'interpréteur de commande COMMAND.COM. Si l'interpréteur de commande COMMAND.COM ne peut pas être rechargé, le système échouera.
- Cette fonction ne fonctionne pas correctement lorsque DX contient des valeurs dans l'intervalle 0FFF1h à FFFFh. Dans ce cas, le système d'exploitation DOS supprime le bit élevé de la valeur dans DX, cette situation entraînant la réservation de 32 Ko de mémoire en moins que ce qui était demandé par le programme.
- A partir de la version 2.0 du système d'exploitation DOS, l'interruption 21h, fonction 31h doit être utilisée de préférence à cette fonction, car elle prend en charge les codes retour, permet de réserver de plus grandes quantités de mémoire et n'exige pas que le regsitre CS contienne le segment du préfixe de segment de programme.
- A partir de la version 3.0 du système d'exploitation DOS, si le programme s'exécute sur un réseau, il doit supprimer tous les verrous qu'il a placés sur les régions de fichiers avant de se terminer.
Références
Aide-mémoire des interruptions du MS-DOS, Edition Marabout, Philippe Mercier, 1990, ISBN: 2-501-01297-6, page 303.