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 :

Valeur de retour d'une procédure externe


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Membre habitué

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2004
    Messages : 421
    Points : 189
    Points
    189
    Par défaut Valeur de retour d'une procédure externe
    bonjour, je suis noob en assembleur, et je suis tomber sur le prob suivant???

    voila, j'aimerais savoir ou vont les valeur de retour lorsque qu'on appelle une fonction??? exemple. le petit code suivant
    j'appelle getandsetindice
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
        mov eax [ebp+8]
        mov ebx [ebp+12]
     
        pusha
        push eax
        push ebx
        call getAndSetIndiceASM
        pop eax
        pop ebx
        popa
    qui se trouve dans un autre fichier.asm

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
     
     
    CPU 386
     
    global getAndSetIndiceASM
     
    getAndSetIndiceASM
            push ebp
            mov ebp, esp
     
            mov eax [ebp+8]
                mul dword  [ebp+12]
     
            mov esp, ebp
            pop ebp
            ret
    voila, e(t ici, ily a une valeur de reour qiu se trouve dans eax que j'aimerais renvoyer au programme appellée
    call getAndSetIndiceASM

    la quesiton est , ou dois je mettre cette valeur car si je la met dans un registre, il sont effacer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     pop eax
        pop ebx
        popa
    qui suit le call

    si je met sur la pile , il ne le verra meme pas du au fait que
    qui se trouve avant le ret. donc ou dois je le mettre.


    meme quesiton quadn c'est une fonction c++ que j'appelle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ex 
    call fonction()
    et que la signature de la fonction est int fonction()
    ou va la valeur de retour???

    merci

    a+++


    [Balise [code] rajoutée par Smortex]
    [Pensez-y vous-même à l'avenir. Merci.]

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 47
    Points : 52
    Points
    52
    Par défaut Re: valeur de retour??
    Citation Envoyé par elekis
    la quesiton est , ou dois je mettre cette valeur car si je la met dans un registre, il sont effacer par
    pop eax
    pop ebx
    popa

    qui suit le call
    ben récupère la valeur avant de l'effacer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    mov qqchose,eax
    pop eax
    pop ebx
    etc...
    Citation Envoyé par elekis
    meme quesiton quadn c'est une fonction c++ que j'appelle

    ex
    call fonction()

    et que la signature de la fonction est int fonction()
    ou va la valeur de retour???
    La valeur de retour va dans eax, comme dans la plupart des cas


    [Balise [code] rajoutée par Smortex]
    [Pensez-y vous-même à l'avenir. Merci.]

  3. #3
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 052
    Points : 1 383
    Points
    1 383
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    pusha 
    push eax <-------------------------------------}
    push ebx <-------------------------------------}
    call getAndSetIndiceASM                           }
    (c'est ici qu'il faut traiter la valeur retour?)  }déjà là ça coince
    pop eax <--------------------------------------}
    pop ebx <--------------------------------------}
    popa
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    push eax 
    pusha 
    push ebx 
    call getAndSetIndiceASM 
    pop ebx
    popa 
     
     
    (traite eax avant de devoir recuperer sa valeur pour autre chose].

    popeax


    [Balise [code] rajoutée par Smortex]
    [Pensez-y vous-même à l'avenir. Merci.]

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 052
    Points : 1 383
    Points
    1 383
    Par défaut
    Chris_hks à ecrit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ben récupère la valeur avant de l'effacer 
     
    mov qqchose,eax 
    pop eax 
    pop ebx 
    etc...
    ce qui limite l'appel de la fonction à ce prog

    je suggère plutôt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    global getAndSetIndiceASM 
     
    qqchose dw 0,0         ;variable dans la routine
     
    getAndSetIndiceASM 
    push ebp 
    mov ebp, esp 
     
    mov eax [ebp+8] 
    mul dword [ebp+12] 
     
    mov esp, ebp 
    pop ebp 
    mov dword[qqchose],eax
    ret
    eax est libre d'être desempilé
    pas besoin de definir qqchose à chaque nouveau prog qui appelle cette routine

  5. #5
    Membre habitué

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2004
    Messages : 421
    Points : 189
    Points
    189
    Par défaut
    merci a tous

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/02/2013, 15h24
  2. Réponses: 7
    Dernier message: 28/10/2010, 21h55
  3. La valeur de retour d'une procédure stockée
    Par amine1980 dans le forum PL/SQL
    Réponses: 2
    Dernier message: 25/11/2008, 16h31
  4. [2000] Récupérer la valeur de retour d'une procédure stockée
    Par drinkmilk dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 25/08/2006, 09h46
  5. Valeur de retour d'une procédure stockée
    Par Rudyweb dans le forum MFC
    Réponses: 4
    Dernier message: 25/02/2005, 17h52

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