ZuperIndex
ZINDEX
ZuperIndex
ZDICO
ZuperIndex
ZUPERINDEX
ZuperIndex

ZuperIndex
SOUS-
PROGRAMMES
Macros Fonction TI-92 Introduction
Fonction TI-92 Créer des macros
Fonction TI-92 Macros vs sous-programmes
Fonction TI-92 Exemple concret
Fonction TI-92 Index des macros Barre

Page précédente

Monter Descendre Retour Introduction

puce Ce cours explique comment créer des macros, en mettant l'accent sur leurs points faibles et points forts par rapport aux sous-programmes.

Elles sont faciles à réaliser et je vous conseille fortement de les utiliser.

puce Pour finir, il y a l'index des macros disponibles dans Zguide 3.0, je les ai écrites pour vous faciliter la tâche lors de vos premiers programmes.

Si vous les utilisez, laissez les en-têtes dans vos programmes sources.


Barre



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écessaire 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.


Barre



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.


Barre



Monter Descendre Retour Exemple concret

puce Prenons la fonction DrawStrXY de la bibliothèque TIOS, voici un exemple de ce qu'il faudrait écrire à chaque fois:

PROGRAMMATION

	move.w	#4,-(A7)	; empile la couleur
	pea	hello(pc)	; empile le pointeur de la chaîne
	move.w	#2,-(A7)	; empile l'ordonné
	move.w	#5,-(A7)	; empile 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	dc.b "Bonjour !",0	; une chaîne 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écédentes 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

		; Macro de la fonction tios::DrawStrXY
		syntaxe : WriteStr X,Y,COULEUR,TEXTE
	WriteStr MACRO		; nom de la macro / mot-clé marquant le départ de la macro
	MOVE.w	\4,-(A7)	; empile le quatrième paramètre (couleur)
	PEA	\3(PC)		; empile le pointeur de la chaîne
	MOVE.w	\2,-(A7)	; empile le deuxième paramètre (adresse de la chaîne)
	MOVE.w	\1,-(A7)	; empile 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

				; dans le programme
	WriteStr #4,#5,#5,hello		; X=5, Y=5, COULEUR=4, TEXTE="Bonjour !"
	WriteStr #4,#2,#6,chaine	; X=2, Y=6, COULEUR=4, TEXTE="Vive l''assembleur"
	WriteStr #4,#10,#0,exemple	; X=10, Y=0, COULEUR=4, TEXTE="Coucou !"

				; dans les données
	hello	dc.b "Bonjour !",0		; une chaîne terminée par un caractère nul
	chaine	dc.b "Vive l''assembleur",0	; une chaîne terminée par un caractère nul
	exemple	dc.b "Coucou !",0		; une chaîne terminée par un caractère nul


Barre



Monter Retour Index des macros

Barre



 

 

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

Zguide © 1998 - 1999 par Florian DREVET. Tous droits réservés