COURS204.TXT/fr: Difference between revisions
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 |
+ | * par Le F�roce Lapin (from 44E) * |
* * |
* * |
||
− | * Seconde |
+ | * Seconde s�rie * |
* * |
* * |
||
− | * Cours |
+ | * 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 |
+ | 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 |
+ | 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 |
+ | 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 |
+ | faut taper 4 lignes d'instructions pour r�aliser l'op�ration. |
− | Nous allons donc |
+ | 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 |
+ | 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 |
+ | 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 |
+ | 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' |
+ | 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 |
+ | Voyons la d�finitions sous DEVPACK, ceux ne poss�dant pas cet |
− | assembleur ou |
+ | 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 |
+ | 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 |
+ | 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 |
+ | ADR_TXT. Pour la macro, le fait que ce nom soit le premier apr�s |
− | le mot MACRO fait qu'il est le |
+ | 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 |
+ | 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 |
+ | ( 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 |
+ | 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 |
+ | 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 |
+ | 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 |
+ | macros par le nom des fonctions ou par le num�ro. Je ne trouve pas |
− | cette solution |
+ | 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 |
+ | De plus, il faut bien reconna�tre que les appels au BIOS XBIOS |
− | GEMDOS se font tous de la |
+ | 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 |
+ | 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 |
+ | possible de se d�finir une biblioth�que de macros puis de |
− | l'inclure avec INCLUDE au |
+ | 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: |
+ | 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 |
+ | Les 2 chiffres d�signant l'emplacement auquel vous voulez que le |
− | texte soit |
+ | 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 |
+ | 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