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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 21
    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 Expert
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    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 averti
    Inscrit en
    Janvier 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 21
    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 Expert
    Avatar de ALT
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2002
    Messages
    1 390
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Indre et Loire (Centre)

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 390
    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à.

  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
    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 averti
    Inscrit en
    Janvier 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 21
    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

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, 08h35
  2. [POO] Différence entre POO et procédural
    Par Golork dans le forum Langage
    Réponses: 17
    Dernier message: 16/12/2008, 18h06
  3. [Macro] Différences entre SAS et SQL+
    Par sousou371 dans le forum Macro
    Réponses: 3
    Dernier message: 15/09/2008, 19h19
  4. [Débutant] Différence entre fonction et procédure
    Par secondechance dans le forum Langage
    Réponses: 9
    Dernier message: 21/08/2008, 22h11
  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, 06h43

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