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 :

Assigner une valeur en utilisant une fonction


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Membre à l'essai
    Homme Profil pro
    Programmeur
    Inscrit en
    Novembre 2018
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : Novembre 2018
    Messages : 22
    Points : 12
    Points
    12
    Par défaut Assigner une valeur en utilisant une fonction
    Bonjour, je cherche à créer une fonction qui retourne un nombre déjà connu, disant par exemple 100. Il faut que cette fonction, une fois appelée, retourne le nombre 100.

    Je travaille sur du 32 bits.

    Normalement la variable est déclarée dans le bss :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nomb: resb 1 ; Disant que le nombre ne dépassera pas 256
    Ce que je cherche à faire c'est créer une fonction qui retourne un nombre fixe et qui le stocke dans la variable "nomb".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     push nomb
                push 0 ; Push une valeur à la pile(stack)
                call mafonction
                pop eax ; Le nombre retourné
                add esp, 4 ; Crée un espace pour le stocker
    Dans la fonction "mafonction", c'est ici que je bloque, je sais pas vraiment si ca doit être comme ca. Mais pour moi ca marche pas (ca peut être du n'importe quoi )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    push eax
               push ebx
               push ecx
               push edx
     
               mov eax,3 ; Lire le nombre
               mov ebx,1
               mov ecx, 100 ; Le nombre que je veux
               mov edx,1 ; Sa taille
     
               pop edx
               pop ecx
               pop ebx
               pop eax

  2. #2
    Membre du Club
    Homme Profil pro
    Ceo
    Inscrit en
    Décembre 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

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

    Informations forums :
    Inscription : Décembre 2011
    Messages : 25
    Points : 44
    Points
    44
    Par défaut
    Bonsoir Neocraft. Alors, il y a plusieurs manières, registres ou pile. Le plus simple si vraiment c'est un nombre fixe c'est ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    section .bss
    resb nombre 1 
     
    section .code
    Start:
           .....
           push  word [nombre] ; architecture  32 bits oblige
           call ma_fonction
     
           ; à partir d'ici utiliser EAX comme contenant le nombre
     
    ma_fonction:
                      pop EAX ;
    j'ai juste rendu le code fonctionnel sans vouloir optimiser ou critiquer. Maintenant; je connais pas ton besoin, mais es-tu sûr que tu as besoin de cette procédure ?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Programmeur
    Inscrit en
    Novembre 2018
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : Novembre 2018
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    Oui oui, j'ai besoin de retourner un nombre à partir d'une fonction.

  4. #4
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 453
    Points : 43 115
    Points
    43 115
    Par défaut
    Tu as juste à faire :

    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
    
    section .bss
    resb nombre 1 
     
    section .code
    Start:
           .....
           push  word [nombre] ; architecture  32 bits oblige
           call ma_fonction
     
           ; à partir d'ici utiliser EAX comme contenant le nombre
     
    ma_fonction:
                      mov EAX,100
    
                                ret
    Dans ma_fonction, je ne sauvegarde aucun registre car je ne n'en modifie aucun sauf EAX. Tu es censé préserver les registres que tu modifie sauf EAX.

    Ensuite si tu veux utiliser la fonction write pour afficher la valeur, il va d'abord te falloir convertir EAX (100 dans notre cas) en chaine de caractères.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

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

Discussions similaires

  1. Assigner une fonction à une classe? Pas simple!
    Par Spidyy dans le forum Langage
    Réponses: 23
    Dernier message: 10/09/2009, 19h36
  2. [Débutant] Assigner une fonction de la barre de menu à un pushbutton
    Par groovyinstinct dans le forum Interfaces Graphiques
    Réponses: 4
    Dernier message: 21/07/2009, 14h05
  3. Réponses: 3
    Dernier message: 20/02/2009, 17h26
  4. Assigner une fonction a un objet creer dynamiquement?
    Par Draleg dans le forum Windows Forms
    Réponses: 3
    Dernier message: 03/08/2008, 10h48
  5. Assigné une fonction à une touche du clavier
    Par jay1234 dans le forum C++
    Réponses: 5
    Dernier message: 10/10/2006, 22h30

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