COURS204.TXT/fr
******************************************************************
* *
* COURS D'ASSEMBLEUR 68000 SUR ATARI ST *
* *
* par Le F�roce Lapin (from 44E) *
* *
* Seconde s�rie *
* *
* Cours num�ro 4 *
******************************************************************
Apr�s avoir vu le principe des inclusions, nous allons nous
pencher sur celui des MACROS. Ce cheminement peut vous para�tre
�trange, dans la mesure o� nous n'abordons pas tout de suite la
ligne_A (par ex.) C'est tout simplement parce que ces notions
vont �tre abondamment reprises dans les chapitres suivants, que je
me suis d�cid� � les aborder maintenant.
Pour expliquer ce qu'est une MACRO, nous allons partir d'un
exemple simple, celui de l'affichage de BONJOUR � l'�cran. Nous
avons d�j� vu depuis bien longtemps comment le faire avec la
fonction Gemdos num�ro 9.
MOVE.L #MESSAGE,-(SP)
MOVE.W #9,-(SP)
TRAP #1
ADDQ.L #6,SP
MESSAGE DC.B "BONJOUR",0
Le probl�me (si on peut appeler �a un probl�me...) c'est qu'il
faut taper 4 lignes d'instructions pour r�aliser l'op�ration.
Nous allons donc cr�er une grosse instruction qui va les englober
toutes les 4. Micro voulant dire petit et macro voulant dire
gros, nous d�signerons cette 'grosse' instruction par le nom
de macro-instruction ou plus couramment macro.
Il va donc falloir d�finir en premier lieu la macro. Dans cette
exemple nous l'appellerons..... PRINT (original, non ?) Il faudra
lui passer comme param�tre l'adresse de notre phrase � afficher.
Comment d�finir cette macro ? L� se pose un probl�me impossible �
r�soudre: la m�thode de d�finition d'une macro d�pend de
l'assembleur. En effet, les signes et conventions qui permettent
de d�finir une macro sont propres � votre assembleur.
Vous en voyez tout de suite l'inconv�nient: des macros d�finies
avec Profimat sont inutilisables sous DEVPACK etc...
Voyons la d�finitions sous DEVPACK, ceux ne poss�dant pas cet
assembleur ou d�sirant d�finir des macros avec un autre assembleur
devront se reporter au mode d'emploi. Le principe reste cependant
le m�me.
PRINT MACRO ADR_TXT
MOVE.L 1,-(SP)
MOVE.W #9,-(SP)
TRAP #1
ADDQ.L #6,SP
ENDM
Voil� notre macro d�finie: Tout d'abord son nom est plac� tout �
gauche. Ensuite on place la liste des param�tres qu'elle doit
recevoir, apr�s le mot MACRO. Dans le cas pr�sent je l'ai appel�e
ADR_TXT. Pour la macro, le fait que ce nom soit le premier apr�s
le mot MACRO fait qu'il est le num�ro 1. Il sera donc d�sign� par
\1. Ensuite vient le corps de mon programme qui utilise \1 comme
si c'�tait l'adresse de ma phrase. La d�finition de la macro est
termin�e par ENDM (END MACRO).
La d�finition de la macro est plac�e au d�but du programme. Parce
que cette d�finition contient MACRO et ENDM, l'assembleur sait
tr�s bien qu'il ne faut pas l'assembler. Par contre, lorsqu'il
rencontrera PRINT #MESSAGE, il saura qu'il s'agit d'une macro et
ira recopier cette macro � la place de PRINT.
Voici un exemple:
( recopier ici la d�finition de la macro print )
VOID_INP2 MACRO
MOVE.W #7,-(SP)
TRAP #1
ADDQ.L #2,SP
ENDM
END_PRG MACRO
MOVE.W #0,-(SP)
TRAP #1
ENDM
PRINT #MESSAGE
VOID_INP2
PRINT #MESSAGE2
VOID_INP2
END_PRG
SECTION DATA
MESSAGE DC.B PREMIERE PHRASE",0
MESSAGE2 DC.B 13,10,"ET LA SECONDE!!!",0
Tapez ce programme, puis assemblez le et lancez le. Ensuite
d�bugger le et vous verrez que les appels de macro ont �t�
remplac�s par les textes de ces macros. Pour le moment nous
n'avons vu qu'une macro avec 1 passage de param�tre. Le nombre de
ces param�tres 'passables' � une macro est variable et d�pend de
l'assembleur. Ainsi dans DEVPACK il est possible de passer
jusqu'� 36 param�tres qui seront rep�r�s par des chiffres (0-9)
puis par des lettres (A-Z ou a-z). Il est �galement possible
d'appeler une macro � partir d'une autre macro.
Ceci �tant, il existe de tr�s nombreux inconv�nients � utiliser
les macros. Certains programmeurs en raffolent, j'avoue que ce
n'est pas mon cas. En effet l'�norme avantage de l'assembleur
r�side dans le petit nombre d'instructions et donc du petit
nombre de termes � retenir. d�s que l'on commence � faire
prolif�rer les macros, on se trouve coinc� entre 2 feux: soit
donner des noms simples et se m�langer entre eux, soit donner des
noms � rallonge et se tromper souvent dans leur orthographe.
Certains poussent m�me la plaisanterie jusqu'� r�aliser des
macros pour les appels du GEMDOS, BIOS ou XBIOS, en appelant les
macros par le nom des fonctions ou par le num�ro. Je ne trouve pas
cette solution particuli�rement valable car les noms des fonctions
du syst�me d'exploitation ne sont pas tr�s 'causant'. (une macro
nomm�e setprt ou cprnos.....)
De plus, il faut bien reconna�tre que les appels au BIOS XBIOS
GEMDOS se font tous de la m�me mani�re et qu'il n'est pas
difficile de s'en rappeler. Nous verrons cependant que l'utili-
sation des macros dans le cas de la line_A ou du GEM est une ex-
cellente solution.
A ce sujet, l'assembleur MAD_MAC est r�put� pour son �norme bibli-
oth�que de macros. Malheureusement, il subsiste un doute concer-
nant sa disponibilit�. Le club STATION Informatique affirme que
c'est un DOMaine PUBlique alors qu'Atari le fournit avec le pack
de d�veloppement. De toutes fa�ons le club Station le fournissait
sans sa biblioth�que de macros , ce qui en r�duit consi-
d�rablement l'int�r�t.
Pour finir avec les macros, sachez qu'il est bien �videmment
possible de se d�finir une biblioth�que de macros puis de
l'inclure avec INCLUDE au d�but de votre programme. C'est ce que
nous ferons avec le GEM, entre autre.
Exemple d'exercice: r�aliser une macro que vous nommerez par
exemple PRINT_AT et que vous appellerez ainsi
PRINT_AT #12,#14,#MESSAGE
Les 2 chiffres d�signant l'emplacement auquel vous voulez que le
texte soit affich�.
Une remarque: il serait tout � fait possible de ne pas mettre le #
mais, � ce moment-l�, il faudrait le mettre dans la macro. Par
exemple
print macro 1
move.w #\1
move.w #2
trap #1
addq.l #4,sp
endm
Pour afficher le caract�re A de code ASCII 65 il faudrait alors
faire PRINT 65
Back to ASM_Tutorial