![]() ![]() ![]() |
Ils sont facile à réaliser et je vous conseille fortement de les utiliser.
Pour finir il y a l'index des sous-programmes disponibles dans le dossier 92files, je les ai écrit pour vous faciliter la tâche lors de vos premiers programmes.
Si vous les utilisez, laissez les en-têtes dans vos programmes sources.
![]() ![]() ![]() |
Nous allons donc écrire une fois les lignes qui nous intéresse et par la suite nous appellerons notre sous-programme avec le mnémonique BSR autant de fois que nécessaire.
Vous pouvez faire un sous-programme avec des paramètre en utilisant la pile, mais sachez que le plus facile est de faire une macro.
A chaque appel du sous-programme dans notre programme, nous sauterons vers celui-ci. Par conséquent, quel que soit le nombre d'appels la taille du programme final ne changera pratiquement pas.
Pour définir un sous-programme c'est simple, vous devez le faire commencer par un label.
Ensuite vous tapez les instructions.
Enfin vous devez terminer votre sous-programme avec le mnémonique RTS.
En conclusion, un sous-programme en plus de nous éviter de taper du code vraiment inutilement, nous permet de gagner un gain de place pouvant devenir très important.
![]() ![]() ![]() |
DESAVANTAGE : la vitesse
Comme je vous l'ai déjà fait remarqué, l'appel à une macro est remplacé par le contenu de celle-ci, par conséquent vous ne réduisez pas la taille de votre programme final (.92p).
L'énorme point fort des sous-programmes, c'est de nous faire gagner la place.
Si votre but principal était d'utiliser d'une manière simple des paramètres, tournez vous vers l'élaboration de macros.
CAS PARTICULIER : aucun paramètre
Paramètre ne veut pas forcément dire macro, en effet nous pouvons nous servir de la pile pour transmettre des paramètres.
Attention toutefois, vous devrez être très scrupuleux lors de l'utilisation de celle-ci car elle est aussi utilisée lors du saut vers le sous-programme pour contenir l'adresse du retour. En cas d'erreur vous avez toutes les chances pour assister à un plantage (ILLEGAL INSTRUCTION, ADDRESS ERROR).
Avant de sauter à votre sous-programme, vous pouvez enregistrer sur la pile des paramètres avec le mode d'adressage -(An), ici avec le registre A7.
Ensuite vous sautez à votre sous programme, là l'instruction BSR dépose sur la pile l'adresse du retour, il faut absolument la désempiler pour la sauvegarder quelques part (pourquoi pas dans une variable).
Maintenant que le pointeur de pile pointe sur le dernier paramètres que nous avons rentré, vous devez sortir tous les paramètres dans l'ordre inverse comme il est de coutume, encore une fois soyez attentionné sur la taille et le nombre de valeurs que vous déposez et sortez de la pile, tout ce qui a été déposé devra être sorti !
Enfin, il vous faut absolument empiler sur la pile l'adresse de retour sauvegardée précédemment pour retournez à votre programme avec l'instruction RTS.
![]() ![]() ![]() |
PROGRAMMATION
move.w #4,-(A7) ; dépose la couleur pea hello(pc) ; dépose le pointeur de la chaîne move.w #2,-(A7) ; dépose l'ordonné move.w #5,-(A7) ; dépose l'abscisse jsr tios::DrawStrXY ; lance la fonction lea 10(A7),A7 ; restaure la pile de 2+4+2+2=10 octets ; dans les données hello "Bonjour !",0 ; une chaîne terminée par un caractère nul
SOLUTION SANS PARAMÈTRES
Ecrire les lignes précédentes dans un sous-programme pour y accéder autant de fois que nécessaire,
évidement, ce sous-programme ne fonctionnera que pour les valeurs données.
Attention, vous devez respecter scrupuleusement la casse (majuscules et minuscules) du nom des sous-programmes comme vous le faites avec les bibliothèques.
PROGRAMMATION SANS PARAMÈTRES
; Sous-programme de la fonction tios::DrawStrXY WriteStr: ; label du sous-programme move.w #4,-(A7) ; dépose la couleur pea hello(pc) ; dépose le pointeur de la chaîne move.w #2,-(A7) ; dépose l'ordonné move.w #5,-(A7) ; dépose l'abscisse jsr tios::DrawStrXY ; lance la fonction lea 10(A7),A7 ; restaure la pile de 2+4+2+2=10 octets RTS ; instruction de retour de sous-programme ; dans les données hello dc.b "Bonjour !",0 ; une chaîne terminée par un caractère nul ; dans le programme BSR WriteStr ; appel à notre sous-programme WriteStrSOLUTION AVEC PARAMÈTRES
Dans le programme il faudra empiler les paramètres avant chaque appel au sous-programme voulu, appeler le sous-programme et restaurer la pile ou non (selon la technique employée).
Attention, vous devez respecter scrupuleusement la casse (majuscules et minuscules) du nom des sous-programmes comme vous le faites avec les bibliothèques.
PROGRAMMATION AVEC PARAMÈTRES
![]() ![]() |
Zguide © 1998 - 1999 par Florian DREVET. Tous droits réservés