COURS204.TXT/fr: Difference between revisions
Jump to navigation
Jump to search
(Created page with "<pre> ****************************************************************** * * * COURS D'ASSEMBL...") Â |
Olivier.jan (talk | contribs) (Replacing content with updated version) Â |
||
(3 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
+ | {{Languages|COURS204.TXT}} |
||
<pre> |
<pre> |
||
****************************************************************** |
****************************************************************** |
||
Line 4: | Line 5: | ||
* 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 31: | ||
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 61: | ||
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 101: | ||
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 162: | ||
endm |
endm |
||
− | Pour afficher le |
+ | Pour afficher le caractère A de code ASCII 65 il faudrait alors |
faire PRINT 65 |
faire PRINT 65 |
||
Latest revision as of 00:11, 17 December 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