<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.temlib.org/AtariForumWiki/index.php?action=history&amp;feed=atom&amp;title=COURS204.TXT</id>
	<title>COURS204.TXT - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.temlib.org/AtariForumWiki/index.php?action=history&amp;feed=atom&amp;title=COURS204.TXT"/>
	<link rel="alternate" type="text/html" href="https://www.temlib.org/AtariForumWiki/index.php?title=COURS204.TXT&amp;action=history"/>
	<updated>2026-05-13T20:06:52Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.2</generator>
	<entry>
		<id>https://www.temlib.org/AtariForumWiki/index.php?title=COURS204.TXT&amp;diff=11518&amp;oldid=prev</id>
		<title>&gt;Zorro 2: Created page with &quot;&lt;pre&gt;    ******************************************************************    *                                                                *    *             COURS D'ASSEMBL...&quot;</title>
		<link rel="alternate" type="text/html" href="https://www.temlib.org/AtariForumWiki/index.php?title=COURS204.TXT&amp;diff=11518&amp;oldid=prev"/>
		<updated>2016-12-22T14:54:00Z</updated>

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