COURS204.TXT/fr: Difference between revisions

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

Revision as of 15:07, 23 November 2023

   ******************************************************************
   *                                                                *
   *             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