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 :

[ARM] Reg R4-R11


Sujet :

Autres architectures Assembleur

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 4
    Points : 2
    Points
    2
    Par défaut [ARM] Reg R4-R11
    Bonjour,

    J'aimerais une précision sur l'utilisation des registres R4 à R11 du processeur ARM, est-ce que je peux les utiliser pour stocker des données avant un appel de fonction en étant sur de retrouver mes données au retour de la fonction? En d'autres termes, une fonction C/C++ ou autre sauvegarde-t-elle les registres R4 à R11 avant de les utiliser?


    Merci bien

  2. #2
    Candidat au Club
    Inscrit en
    Mars 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    En fait, voici mon problème:

    Je veux lancer en C++ une fonction F se trouvant à une certaine adresse et prenant en paramètres un nombre aléatoire de valeurs. Je possède donc les infos suivantes:
    * pointeur sur la fonction F (void*)
    * pointeur sur mes paramètres (void*)
    * nombre de paramètres (uint32)

    Je passe donc ces paramètres à une fonction en assembleur qui doit s'arranger pour mettre les paramètres dans R0-R3 puis dans la pile si nécessaire et saute à l'adresse mémoire de la fonction F que je veux appelée.

    Le problème est qu'au retour de F, je veux retourner à l'endroit où s'exécutait mon code au préalable. Pour ca je dois stocker mon registre de lien quelque part. Je stocke donc LR et l'ancienne valeur de R4 dans la pile (derrière les paramètres F) et je stocke dans R4 le nombre de mes arguments pour pouvoir restaurer R4.

    Ma pile est donc comme ca avant l'appel de ma fonction F (pour l'instant):

    |------|
    | Arg 4 |
    |------|
    | Arg 5 |
    |------|
    | ....... |
    |------|
    | Arg N |
    |------|
    | LR |
    |------|
    | R4 |
    |------|


    C'est un peu tiré par les cheveux je vous l'accorde, mais ma question reste simple, est-ce que je suis sur de retrouver R4 intact si je l'utilise???

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2007
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Bonsoir,

    du moment que tu passe un/des registres (donc dans ton cas r4 et les autres) dans la pile via stmfd r13!, {....,r14} au début de ta fonction appelée, pourquoi ne les retrouverais-tu pas en sortie en restaurant la pile avec ldmfd r13!, {..., r15} ...??
    Je n'ai jamais fait d'interaction C++/ARM mais quand une valeur est stockée dans la pile elle y reste à moins que t'a fonction F n'y écrive !

    Je pense donc que ta fonction F doit être encadrée par stmfd et ldmfd et appelé depuis le main par bl, (un vrai sous-programme quoi !)

    A moins que le problème soit différent...

  4. #4
    Candidat au Club
    Inscrit en
    Mars 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    justement!

    je dois empiler un nombre inconnu de paramètres dans la pile avant d'appeler ma fonction... c'est pour ca que j'aimerais garder dans R4 une valeur dont j'ai besoin au retour de ma fonction, si je la mets dans la pile et que je mets mes paramètres par dessus je ne sais pas combien je vais devoir en dépiler avant de retrouver ma donnée....

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2007
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    salut,
    Alors pourquoi ne pas faire une boucle de comptage se servant de R4 pour le nombre de paramètres à empiler, et ensuite mettre R4 PAR DESSUS les paramètres ??
    En sortie du programme on aurait donc à faire un ldr sur r13, #-4
    -4 correspondant à l'offset pour retrouver ton R4, cela peut-être +4 dans ton cas si tu utilise la pile en STDMFA...

Discussions similaires

  1. fichier .reg
    Par cubepiege dans le forum Windows
    Réponses: 5
    Dernier message: 11/08/2005, 18h22
  2. [ARM] Comment utiliser l'opération MOV
    Par maxliem dans le forum Autres architectures
    Réponses: 5
    Dernier message: 27/07/2005, 14h24
  3. [langage] exp reg: recherche mot ou ensemble de mot
    Par eautret dans le forum Langage
    Réponses: 5
    Dernier message: 14/12/2004, 17h25
  4. Réponses: 4
    Dernier message: 16/02/2004, 16h55
  5. [VB6] Exécuter un .reg
    Par Fab_nabou dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 13/06/2003, 12h54

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