COURS204.TXT/fr

From Atari Wiki
Revision as of 15:07, 23 November 2023 by Exxos (talk | contribs)
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