Salut tout le monde S'il vous plait qqun peut m'expliquer qu'apporte une Macro de plus par rapport à une procédure et qu'il est son important interêt
![]()
Meeeeeeerci
![]()








Salut tout le monde S'il vous plait qqun peut m'expliquer qu'apporte une Macro de plus par rapport à une procédure et qu'il est son important interêt
![]()
Meeeeeeerci
![]()
Hello,
Une procedure est un petit bout de code dans le programme, vers lequel on peut faire un saut.
Une macro est un bout de code qui est copie dans le programme a chaque
fois que l'on fait appel a la macro
Donc si dans ton programme, tu veux afficher le mot "BONJOUR" , il te faut
une routine pour afficher chaque caractere, si cette routine est une procedure,
a chaque lettre du mot bonjour tu fais un jump vers cette derniere,
si a la place de la procedure tu fais une macro, le bout de code sera
ajoute au programme pour chaque lettre
a+ Francois








merci mais je ne vois pas la différence entre faire un saut vers la procédure pour chaque caractère de cette chaine et le fait d'ajouter le bloc de code de la macro au programme pour chaque caractère en d'autre terme en qoi la 2ème et mieu que la 1ère
merci
Dit autrement :
- une macro :
Tu crées une macro (=suite logique d'instructions). À chaque fois que tu fais référence à cette macro dans ton code, l'assembleur remplace cette référence par tout le code de la macro. Avantage, l'exécution est plus rapide.
- une procédure :
Tu crées une procédure. À chaque appel de la proc., l'assembleur crée un saut vers le début de cette procédure. Avantage : le code exécutable est plus compact.
Il y a sans doute d'autres différences pratiques entre ces deux façons de procéder (exemple : meilleur comportement du code dans le cas d'une fonction ?), mais l'essentiel est là.
Bonjour,
Pour confirmer ce que dit ALT, une macro peut remplacer un bout de code sans pour autant que celui-ci ne présente ni ne nécessite tous les aspects d'une procédure.
Etant donnée qu'une procédure est appelée via un CALL (sous x86) et qu'elle génère un stack frame (prologue et épilogue de fonction), il est parfois inutile d'appeler une procédure pour les quelques lignes de code qu'elle procure.
Imaginons un exemple : Sous x86, les mouvements "mémoire <=> mémoire" sont interdits.
il est par contre possible de le faire en temporisant, c-a-d en utilisant soit un registre temporaire, soit la pile :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 .data Variable1 BYTE 5; Variable2 BYTE ?; .code MOV Variable2, Variable1 ; interdit !
Maintenant, pour me faciliter la vie, je crée une petite macro ayant l'apparence du mnémonique d'une instruction, "m2m" pour "memory to memory". (syntaxe de macro MASM) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 push Variable1 pop Variable2
D'une part cela simplifie l'écriture (moins de code à écrire) et d'autre part on regroupe sous une même entité logique deux instructions. L'assembleur se chargera de remplacer "M2M" par le push et le pop en mettant les bonnes valeurs. On voit aussi qu'il n'y avait pas besoin de faire une procédure pour si peu de code.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8m2m MACRO M1, M2 push M2 pop M1 ENDM .code M2M Variable2, Variable1
Par contre l'intérêt de remplacer une procédure par une Macro est inexistant...
Il ne faut pas non plus réduire les macros au remplacement unique de code. Les macros ont d'autres avantages. Elles servent à manipuler des donnés avant compilation (et pas seulement du code). Le système de macro de MASM, par exemple, est à ce titre assez performant.
On peut par exemple convertir des chaînes ASCII en Unicode, compter le nombre d'opcodes utilisés par une instruction, changer ou influer certaines parties du format de fichier, compter le nombre de paramètre d'une fonction, etc. et ce avant compilation et sans produire une seule ligne de code.
Les valeurs de retour des macros peuvent par contre être utilisées par le code du programme. Dans ce cas là on peut considérer que les macros sont une sorte de méta-langage.








![]()
-qu'est ce qui empèche de remplacer tous les proc'dures par des macros aprés tous les aventages de ces dernières
Partager