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