MACROS Fonction Introduction
Fonction Créer des macros
Fonction Macros vs sous-programmes
Fonction Exemple concret
Fonction Index des macros

Page précédente



 

Monter Descendre Retour Introduction
puce Ce cours explique comment créer des macros, en mettant l'accent sur leur points faibles et points forts par rapport aux sous-programmes. Elles sont facile à réaliser et je vous conseille fortement de les utiliser.

puce Pour finir il y a l'index des macros disponibles dans le dossier 92files, je les ai écrit pour vous faciliter la tâche lors de vos premiers programmes. Si vous les utilisez, merci de ne pas enlever l'en tête dans vos programmes sources.





 

Monter Descendre Retour Créer des macros
puce Dans un programme, vous avez sûrement constaté qu'il faut parfois écrire quelques lignes de code identiques, dans la majorité des cas une ou plusieurs valeurs changent.
En plus d'augmenter considérablement le programme source (.asm) il est fastidieux de faire un travail aussi répétitif.

puce Nous allons donc écrire une fois les lignes qui nous intéresse en faisant apparaître la notion de paramètre. Par la suite nous appellerons la macro autant de fois que nécéssaire en lui soumettant un ou plusieurs paramètres. Le premier sera nommé \1, le second sera nommé \2 et ainsi de suite...

Notez que les paramètres n'ont pas d'ordre d'apparition défini dans la macro et peuvent même être utilisés plusieurs fois si besoins.

De plus, je ne pense pas que ce cas soit très fréquent mais vous pouvez tout à fait créer une macro sans paramètre.

puce A chaque appel de la macro dans notre programme, l'assembleur remplacera son nom par les lignes la composant avec les paramètres donnés, par conséquent nous augmentons la taille de notre programme à chaque fois.

Ceci met en avant un problème évitable, en effet si vous décidez d'utiliser plusieurs fois une même macro et qu'elle contient un label, celui-ci sera recopié à chaque fois et l'assembleur vous signalera qu'il est interdit d'utiliser un même label plus d'une fois.

Intervient alors la notion de label local, vous le définissez juste en ajoutant un \ avant le nom du label initial, dès lors l'assembleur réalisera son travail sans erreur.

puce Les paramètres peuvent être placés n'importe où, vous êtes totalement libre de votre choix.
Ainsi vous pouvez vous servir d'un paramètre pour 'créer' une instruction, si vous écrivez B\1 vous pouvez par la suite mettre comme paramètre CHG, CLR, SET ou TST pour obtenir BCHG, BCLR, BSET ou BTST !

puce Pour définir une macro, vous devez lui donner un nom puis mettre le mot clé MACRO.
Ensuite vous tapez les instructions avec les paramètres.
Enfin vous devez terminer votre macro avec le mot-clé ENDM.
(Vous pouvez utiliser indifféremment des minuscules ou des majuscules)

puce En conclusion, une macro ne sert ni plus ni moins qu'à gagner du temps et de la place dans le programme source, ce qui est très appréciable.





 

Monter Descendre Retour Macros vs sous-programmes
AVANTAGE : la vitesse
puce La rapidité d'une macro est supérieure, en effet le code étant recopié à chaque fois, nous passons directement à la prochaine instruction lors de l'exécution.
puce Pour un sous programme c'est différent car nous effectuons un saut vers celui-ci puis nous en effectuons un autre pour revenir ou nous n'en étions.

DESAVANTAGE : la taille
puce 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).
Si c'était votre but, je vous conseille fortement de vous tourner vers les sous-programmes en utilisant la pile pour faire passer les paramètres.

CAS PARTICULIER : aucun paramètre
puce Pas de paramètre ne veut pas dire pas de macro, loins de là, en fait vous devrez faire un choix entre vitesse et taille suivant les besoins de vos programmes.





 

Monter Descendre Retour Exemple concret
PROBLEME
puce Prenons l'exemple de la fonction DrawStrXY de la bibliothèque TIOS, voici un exemple de ce qu'il faudrait écrire à chaque fois:

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 quelconque terminée par un caractère nul

puce Et si nous devions afficher 20 chaînes différentes dans un programme ?

SOLUTION
puce Ecrire les lignes précedentes mais avec des paramètres (dans ce cas il y en a 4), on nomme notre macro WriteStr dans l'exemple suivant.

puce Attention, vous devez respecter scrupuleusement la casse (majuscules et minuscules) du nom des macros comme vous le faites avec les bibliothèques.

PROGRAMMATION
; ***** la macro *****
WriteStr MACRO ; nom de la macro / mot-clé marquant le départ de la macro
MOVE.w \3,-(A7) ; dépose le troisième paramètre (abscisse)
PEA \4(PC) ; dépose le quatrième paramètre (ordonné)
MOVE.w \2,-(A7) ; dépose le deuxième paramètre (adresse de la chaîne)
MOVE.w \1,-(A7) ; dépose le premier paramètre (couleur)
JSR tios::DrawStrXY ; lance la fonction
LEA 10(A7),A7 ; restaure la pile de 2+4+2+2=10 octets
ENDM ; mot-clé marquant la fin de la macro

; ***** puis dans le programme *****
WriteStr #4,#5,#5,hello ; utilise la macro avec quatre paramètres
WriteStr #4,#2,#6,chaine ; utilise la macro avec quatre paramètres
WriteStr #4,#10,#0,exemple ; utilise la macro avec quatre paramètres

; ***** dans les données *****
hello "Bonjour !",0 ; une chaîne quelconque terminée par un caractère nul
chaine "Vive l''assembleur",0 ; attention il faut mettre deux apostrophe consécutives
exemple "Coucou !",0 ; une chaîne quelconque terminée par un caractère nul





 

Monter Retour Index des macros




 

 

Lisez la section sur les droits d'auteur et la license d'utilisation avant de distribuer Zguide.

Zguide © 1998, Florian DREVET. Tous droits réservés à l'échelle mondiale