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

x86 32-bits / 64-bits Assembleur Discussion :

Langage C vers Assembleur pile


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 12
    Par défaut Langage C vers Assembleur pile
    Bonjour, je n'arrive pas à résoudre le problème ci-bas. Je sais qu'il faut utiliser push et décrémenter l'adresse du sommet de la pile de 4 octets. Mais, je n'arrive pas à trouver la syntaxe exacte. Est-ce que quelqu'un pourrait m'aider svp? Merci!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    unsigned int func(int *ptr, unsigned int j)
    {
       unsigned int res = j; <========== ICI
       int i = ptr[j+1];
       for(; i<8; ++i) {
          res >>= 1;
       }
       return res;
    }
    En utilisant %ebp, écrivez l'instruction assembleur (IA-32) pour mettre j sur la pile (sur le sommet de la pile, ignorez les variables locales).

  2. #2

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 12
    Par défaut
    Merci pour les exemples. Mais étant donné que la réponse doit contenir qu'une seule ligne. C'est ça qui m'embête et je ne sais pas trop comment faire. Dans mon cours sur l'assembleur, nous avons vu: push, pop, mov, xchg, lea, add, adc, sub, sbb, call, cmp, inc, dec et neg. D'après moi, je dois utiliser push.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Dans le sous programme, vous utiliserez le registre EBP comme un index dans la pile pour localiser les variables locales comme suit : -4(%ebp) est l'adresse du premier variable, -8(%ebp) est l'adresse du deuxième et ainsi de suite. Donc vous utiliserez une simple instruction movl.

    Initialement le EBP est égal au ESP, donc on 'est au sommet de la pile !

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 12
    Par défaut
    Si je comprends bien, la pile après avoir placé j est à l'adresse -4(%ebp)? Donc je dois copier cette adresse dans %esp tout simplement?

    movl -4(%ebp),%esp

    N.B. J'utilise la syntaxe AT&T.

    http://www.imada.sdu.dk/Courses/DM18.../IntelnATT.htm

  6. #6
    Invité
    Invité(e)
    Par défaut
    Attention! ne jamais modifier le contenu de registre ESP dans le sous programme !!

    Le registre ESP sera incrémenté/ décrémenté automatiquement. INTEL dit : Dans une adresse effective lorsqu'on utilise EBP comme indexe le processeur va chercher automatiquement les données adressées dans la pile et non dans le segment de données. Donc votre instruction sera :


  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 12
    Par défaut
    La réponse est

    Merci pour ton aide!

  8. #8
    Membre confirmé
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2013
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 68
    Par défaut
    Citation Envoyé par Invité Voir le message
    Attention! ne jamais modifier le contenu de registre ESP dans le sous programme !!

    Le registre ESP sera incrémenté/ décrémenté automatiquement. INTEL dit : Dans une adresse effective lorsqu'on utilise EBP comme indexe le processeur va chercher automatiquement les données adressées dans la pile et non dans le segment de données. Donc votre instruction sera :

    elle doit être aligné sur quatre ou 8 octets ?

  9. #9
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 760
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 760
    Par défaut
    Pas sûr que la personne revienne 13 ans après avoir poser la question, je pense que les réponses données précédemment on dû l'aider

  10. #10
    Membre confirmé
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2013
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 68
    Par défaut
    Citation Envoyé par umfred Voir le message
    Pas sûr que la personne revienne 13 ans après avoir poser la question, je pense que les réponses données précédemment on dû l'aider
    oui mais la réponse à la question ? c'est un alignement de 16 octets pour du processeur 32 bits, et 32 octets pour un processeur de 64 bits

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Exercice Assembleur Pile
    Par reuqnas dans le forum Autres architectures
    Réponses: 0
    Dernier message: 20/04/2011, 22h16
  2. Réponses: 12
    Dernier message: 29/04/2010, 11h26
  3. Code C vers Assembleur
    Par Invité dans le forum Autres architectures
    Réponses: 3
    Dernier message: 06/03/2009, 17h10
  4. Possible de passer du langage C vers TASM ?
    Par imad18 dans le forum x86 16-bits
    Réponses: 1
    Dernier message: 03/04/2008, 19h46
  5. Un logiciel qui traduit les langages évolués vers l'asm
    Par Cygnus Saint dans le forum Assembleur
    Réponses: 6
    Dernier message: 13/06/2005, 09h02

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