IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Assembleur Discussion :

Différence entre macros et procédures ? [FAQ]


Sujet :

Assembleur

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 21
    Points : 14
    Points
    14
    Par défaut Différence entre macros et procédures ?
    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

  2. #2
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    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

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 21
    Points : 14
    Points
    14
    Par défaut
    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

  4. #4
    ALT
    ALT est déconnecté
    Membre émérite
    Avatar de ALT
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2002
    Messages
    1 234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 234
    Points : 2 338
    Points
    2 338
    Par défaut
    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à.
    « Un peuple qui est prêt à sacrifier un peu de liberté contre un peu de sécurité, ne mérite ni l'une, ni l'autre, et finira par perdre les deux. »
    Attribué indistinctement à :
    Thomas Jefferson
    Benjamin Franklin
    Albert Einstein !

  5. #5
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    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.

    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 !
    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
     
    push Variable1
    pop Variable2
    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
    4
    5
    6
    7
    8
     
    m2m MACRO M1, M2
        push M2
       pop M1
    ENDM 
     
    .code
    M2M Variable2, Variable1
    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.

    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.

  6. #6
    Membre à l'essai
    Inscrit en
    Janvier 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 21
    Points : 14
    Points
    14
    Par défaut Ahhhhhhhhhhhhhh?!!!? SVP à l'Aiiiiiide


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

  7. #7
    Membre à l'essai
    Inscrit en
    Janvier 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 21
    Points : 14
    Points
    14
    Par défaut
    salut tous le monde je crois que j'ai été ridicule avec mon dernier message! aprés réfléchire longuement je me suis pérsuadé que les macros ne sont utiles que pour gagner du temps lors de la saisie du code. au début de la compilation la Macro est chargée dans un tampon par le préprocesseur, puis à chaque fois q'il rencontre une invocation il la remplace par son contenu.

    comparaison après achèvement de compilation:

    Si onexécute le programme :

    1- qui contient des invocation d'une macro:

    l'exécution est fait sur la mme procédure car dedans on ne trouve plus de macro (elle est devenue des propres instructions )

    2- qui contient des appels à une procédure:

    l'exécution commence par la proc principale et à chaque CALL le processeur en sort pour débarquer chez la procédure appelée (qui constitue,elle, un programme complet indépendant)

    Une Macro donc est, une représentation, souvent liée au programme invoquant, plus rapide grâce à l'absence des instrs CALL et RET ,plus rapide aussi lors de la compilation car elle est stockée dans un tampon, plus pratique aussi lors de la rédaction du code "pas la peaine d'ecrire la mme chose mille fois"

    CONCLUSION:

    On ne peut pas remplacer une procédure par une Macro car une macro ne génère que des recherche/remplacement.

    Comme il faut pas concevoir toute une procédure rien que pour regrouper un ensemble d'instructions répétitives.


    si je me trompe n'hésitez pas à me corriger

  8. #8
    Membre du Club
    Inscrit en
    Février 2007
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 45
    Points : 44
    Points
    44
    Par défaut
    N.B: dans des applications industrielle (embarqué) il faut jamais utliser des macros car on ne peux pas connaitre d' avance ( avant l'implémentation du code source sur la mémoire du systéme indus.) la taille exacte du fichier car ce n'est qu'a la compilation ( generation du fichier.obj puis .exe) que le compilateur remplace les macros par leurs code correspondants et on aura une taille plus grande que celle estimée

Discussions similaires

  1. Différence entre Vue et Procédure Stockée ?
    Par aimer_Delphi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 18/04/2012, 07h35
  2. [POO] Différence entre POO et procédural
    Par Golork dans le forum Langage
    Réponses: 17
    Dernier message: 16/12/2008, 17h06
  3. [Macro] Différences entre SAS et SQL+
    Par sousou371 dans le forum Macro
    Réponses: 3
    Dernier message: 15/09/2008, 18h19
  4. [Débutant] Différence entre fonction et procédure
    Par secondechance dans le forum Langage
    Réponses: 9
    Dernier message: 21/08/2008, 21h11
  5. Mysql5: différences entre procédures et fonctions
    Par El Riiico dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 25/11/2005, 05h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo