COURS204.TXT
Jump to navigation
Jump to search
******************************************************************
* *
* 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