COURS204.TXT/fr: Difference between revisions

From Atari Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 4: Line 4:
 
* COURS D'ASSEMBLEUR 68000 SUR ATARI ST *
 
* COURS D'ASSEMBLEUR 68000 SUR ATARI ST *
 
* *
 
* *
* par Le F�roce Lapin (from 44E) *
+
* par Le Féroce Lapin (from 44E) *
 
* *
 
* *
* Seconde s�rie *
+
* Seconde série *
 
* *
 
* *
* Cours num�ro 4 *
+
* 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�tre
+
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 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�cid� les aborder maintenant.
+
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 l'�cran. Nous
+
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�ro 9.
+
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�aliser l'op�ration.
+
faut taper 4 lignes d'instructions pour réaliser l'opération.
Nous allons donc cr�er une grosse instruction qui va les englober
+
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�signerons cette 'grosse' instruction par le nom
+
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�finir en premier lieu la macro. Dans cette
+
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�tre l'adresse de notre phrase afficher.
+
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 ? 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�nient: des macros d�finies
+
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�finitions sous DEVPACK, ceux ne poss�dant pas cet
+
Voyons la définitions sous DEVPACK, ceux ne possédant pas cet
assembleur ou d�sirant d�finir des macros avec un autre assembleur
+
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�me.
+
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�tres qu'elle doit
+
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�s
+
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
+
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�finition contient MACRO et ENDM, l'assembleur sait
+
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 la place de PRINT.
+
ira recopier cette macro à la place de PRINT.
   
 
Voici un exemple:
 
Voici un exemple:
   
( recopier ici la d�finition de la macro print )
+
( 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�tre. Le nombre de
+
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 �galement possible
+
puis par des lettres (A-Z ou a-z). Il est également possible
d'appeler une macro partir d'une autre 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'�norme avantage de l'assembleur
+
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 retenir. d�s que l'on commence faire
+
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�langer entre eux, soit donner des
+
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�me la plaisanterie jusqu' r�aliser des
+
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�ro. Je ne trouve pas
+
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
+
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�tre que les appels au BIOS XBIOS
+
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
+
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�put� pour son �norme bibli-
+
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 �videmment
+
Pour finir avec les macros, sachez qu'il est bien évidemment
possible de se d�finir une biblioth�que de macros puis de
+
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
+
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�aliser une macro que vous nommerez par
+
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�signant l'emplacement auquel vous voulez que le
+
Les 2 chiffres désignant l'emplacement auquel vous voulez que le
texte soit affich�.
+
texte soit affiché.
   
Une remarque: il serait tout fait possible de ne pas mettre le #
+
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-, il faudrait le mettre dans la macro. Par
 
exemple
 
exemple
   
Line 161: Line 161:
 
endm
 
endm
   
Pour afficher le caract�re A de code ASCII 65 il faudrait alors
+
Pour afficher le caractère A de code ASCII 65 il faudrait alors
 
faire PRINT 65
 
faire PRINT 65
   

Revision as of 12:41, 24 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