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

Autres architectures Assembleur Discussion :

[68000] Fonctionnement du Frame Pointer


Sujet :

Autres architectures Assembleur

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 36
    Points : 23
    Points
    23
    Par défaut [68000] Fonctionnement du Frame Pointer
    Bonjour,

    Je désire créer l'arbre d'appel des fonctions d'un programme. Pour cela on m a dit de récupérer le frame pointer. Mais je n'arrive pas a trouver une bonne explication de son principe de fonctionnement. Quelqu'un pourrait il m'aider ?

    Merci

  2. #2
    Membre actif

    Inscrit en
    Février 2009
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 200
    Points : 235
    Points
    235
    Par défaut
    Tu trouveras de nombreux liens de base comme :http://en.wikipedia.org/wiki/Call_stack

    Pour ton "arbre", il te faut récupérer les adresses de retours, qui sont donc les adresses de tes parties de code appelantes.

    Si tu désires l'afficher ton arbre dans un TreeView, ou te déplacer dedans en 'clair', il te faut construire:

    - Une table de Lp ascii (les chaînes contenants les noms de tes différentes étiquettes contenant le code appelant)

    - Une table de tes étiquettes de code. (tu ranges les deux dans l'ordre croissant et lié).

    Tu n'auras ensuite plus qu'à imaginer divers algos (récursifs ou pas) pour afficher en clair ton arborescence par simples "fourchettes" comparatives (il existe cependant d'autres méthodes plus rapides).

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 36
    Points : 23
    Points
    23
    Par défaut
    re bonjour,

    Alors la creation de mon arbre d appel est presque terminé. Mais j ai un probleme au niveau de la recuperation des adresses des fonctions appelantes.
    D'apres ce que j'ai compris la valeur de A6 pointe sur l'adresse du PC courant ainsi que les adresse des fonctions appelantes.

    Il suffit donc de parcourir les valeurs des adresse de A6.

    Est bien cela ?

  4. #4
    Membre actif

    Inscrit en
    Février 2009
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 200
    Points : 235
    Points
    235
    Par défaut
    Si tu travailles sur un µP 68000...

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 36
    Points : 23
    Points
    23
    Par défaut
    coldfire 68000

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 36
    Points : 23
    Points
    23
    Par défaut
    Bon j'ai presque réussi
    Voila a peu près ce que je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    J'entre en IT
     
    (8,A6) -> Dn  /*Valeur du PC précédent l'IT (stack d'exception pour un coldfire*/
    (A6) -> A0    /*j'enregistre la valeur pointé par A6 dans A0*/
    (4,A0) -> Dn  /*je récupéré le 1er appelant */
    (A0) -> A0    /*j'enregistre la valeur pointé par A0 dans A0*/
    (4,A0) -> Dn  /*je récupéré le 2eme appelant */
     
    Ainsi de suite ...
    Pour pouvoir réaliser ça j'ai étudié ce que réalise un JSR et un LINK.

    Mais le probleme est que desfois les valeurs recuperées sont corrects et d'autre fois ou il y a un decalage entre le PC et ses appelants (decalage d'une fonction appelante).

    exemple :

    Fct10 <- Fct09 <- Fct08 : bon
    Fct10 <- Fct08 <- Fct07 : erreur décalage

    alors que le code est le même

Discussions similaires

  1. Pourquoi mon frame ne fonctionne pas sur Safari 3.0.4?
    Par joecool2005 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 05/02/2008, 17h36
  2. Reproduire un fonctionnement "frames"
    Par vilcoy dans le forum VB.NET
    Réponses: 2
    Dernier message: 26/02/2007, 14h33
  3. Réponses: 3
    Dernier message: 02/10/2006, 21h13
  4. Frame pointer - stack pointer
    Par homeostasie dans le forum C
    Réponses: 11
    Dernier message: 13/07/2006, 10h57
  5. [Tableaux] Fonctionnement des pseudo frames
    Par guiguistuder dans le forum Langage
    Réponses: 5
    Dernier message: 10/06/2006, 13h08

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