COURS204.TXT

From AtariForumWiki
Revision as of 10:54, 22 December 2016 by >Zorro 2 (Created page with "<pre> ****************************************************************** * * * COURS D'ASSEMBL...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
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