salut,
avant toute chose, il faut savoir qu'un programme basic (non-tsr) a se mode de fonctionnement:
[Chargement du code en mémoire] ---==> [exécution du code] ---==> [désallocation de la mémoire occupée] ---==> [retour à dos]
les programme tsr ont un autre mode de fonctionnement:
[Chargement du code en mémoire] ---==> [exécution du code] ---=> [retour à dos]
Il faut savoir aussi, que pour qu'un programme soit résident, il faut reserver un certain nombre de paragraphes (1 paragraphe = 16 octets).(Il est fortement conseiller dans reserver 1 de plus par simple précaution.)
Ce code s'installe en mémoire et se désinstalle en janvier.
Source / Exemple :
LENGTH EQU END_PROG-START
start:
mov ax,4209h ;
int 21h ; regarde si le programme est déjà installé
jc done ; si oui, bye bye...
mov ah,2ah ; fonction qui récupère la dâte
int 21h ; interruption qui lance la fonction
cmp dh,01h ; est-on en janvier?
je exit_tsr ; si oui, on désinstalle tous
installe_tsr:
mov ah,31h ; la taille total du programme/16 = nbrs de paragraphes a reserver (et le +1 reserve un paragraphe de plus)
mov dx,(LENGTH/16)+1
int 21h
mov ah,4c00h ;
int 21h ;exit
exit_tsr:
mov ah,49h
mov es,(LENGTH/16)+1 ; c'est le nombre total de paragraphes que l'on veut désallocer
int 21h
mov ah,4ch ;
int 21h ;exit
done:
mov ah,4c00h ;
int 21h ;exit
END_PROG:
end start
Conclusion :
ps: tant que la partie [désallocation de la mémoire occupée] n'est pas effectuée, le code reste actif
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.