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 16-bits Assembleur Discussion :

Fonction Include en 8086


Sujet :

x86 16-bits Assembleur

  1. #1
    Invité
    Invité(e)
    Par défaut Fonction Include en 8086
    Bonjour,

    j'ai une petite question concernant cette fonction.

    En l'utilisant, j'ai remarqué que si j'utilise un fichier exemple.asm et exemple1.asm, avec un include 'exemple1.asm' dans le fichier exemple.asm, le code de exemple s'exécute jusquà la ligne avec l'include, puis c'est le code de exemple1 qui s'exécute puis ça se fini !

    Comment faire pour revenir là où on en était dans le fichier exemple pour poursuivre son exécution dès la ligne suivant le include 'exemple1.asm' ?

    Merci pour votre aide.

  2. #2
    Membre éclairé
    Avatar de edfed
    Profil pro
    être humain
    Inscrit en
    Décembre 2007
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : être humain

    Informations forums :
    Inscription : Décembre 2007
    Messages : 476
    Points : 701
    Points
    701
    Billets dans le blog
    1
    Par défaut
    include est une directive d'assemblage, pas une fonction.

    cette directive permet d'inclure le code source issu d'un autre fichier.

    ta remarque judicieuse sur le fait que le code 1 s'execute, puis le code 0 est tout à fait normale, vu que le code 0 est inclu dans le fichier 1 à l'endroit exact de l'include.

    pour clarifier:

    1.asm:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    mov eax,1
    mov ebx,2
    include '0.asm'
    0.asm:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    mov ecx,3
    mov edx,4
    donne en résultat la meme chose que si le code etait comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    mov eax,1
    mov ebx,2
    mov ecx,3
    mov edx,4
    pour revenir au code 0, il faut alors reboucler avec l'instruction jmp.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    start:
    include '1.asm'
    include '0.asm'
    jmp start
    mais comme la seconde question n'est pas très claire, je ne peu pas te repondre plus.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Désolé pour le vocabulaire mal employé ^^

    En fait, ce que je cherche à faire

    C'est un programme main.asm comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     start:
    include "windows.asm"
    include "menu.asm"
    touch:
    suite du programme
    qui fait donc appel à 2 autres programmes.

    Seulement, quand je fais une émulation avec Emu8086 du fichier main.asm, il me dit :
    "any code after 'END' directive is ignored."
    (102) undeclared label: je page1,

    (la ligne 102 concerne include "windows.asm")

    Voilà la fin du fichier windows.asm :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    jmp close 
     
    ; -- [ FIN DU PROGRAMME ] --
    close:
    ret
    end main
    Et je ne vois pas pourquoi ça coince en fait ...

  4. #4
    Membre éclairé
    Avatar de edfed
    Profil pro
    être humain
    Inscrit en
    Décembre 2007
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : être humain

    Informations forums :
    Inscription : Décembre 2007
    Messages : 476
    Points : 701
    Points
    701
    Billets dans le blog
    1
    Par défaut
    ça coince pour la bonne raison qu'un include n'est pas une fonction mais une directive d'assemblage.

    donc, pour exploiter un include, il faut tout simplement creer une section include, et de là, il sera possible d'appeler les fonctions incluses avec un call.

    donc,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    start:
    jmp main
    include 'fonction.inc'
    main:
    call fonction
    jmp main.
    et pour conclure, RTFM please.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Merci pour ton aide.
    Une dernière question.

    Quand on utilise un include, comme tu l'as montré plus haut, on insère le bout de code inscrit dans le fichier à la place du include 'fichier.asm'.

    Mais est-ce que cela reste définitif, ou dès que le code concerné est exécuté, il est "effacé" du code du fichier principal ?

    Concrètement, est ce que ce code :

    fichier 1.asm
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    mov eax,1
    mov ebx,2
    include '0.asm'
    jmp test
    fichier 0.asm
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    test:
    mov ecx,3
    mov edx,4
    correspond à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    mov eax,1
    mov ebx,2
    test:
    mov ecx,3
    mov edx,4
    jmp test
    C'est pour savoir si je dois à ce moment là faire appel 1 fois à tel fichier, ou plusieurs sachant qu'il est destiné à être utilisé plusieurs fois.

  6. #6
    Membre émérite
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Points : 2 793
    Points
    2 793
    Par défaut
    Bonjour,

    Comme te l'a dit edfed, il vaut mieux faire des fonctions dans ton include que tu pourras appeler ensuite via un call.

    Je pense que regorge de pas mal d'exemples sur la création de fonctions
    Toute question technique envoyée en MP ira directement à la poubelle

    Un code ne marchera jamais, il n'a jamais reçu la capacité de se déplacer.
    Inutile donc de dire "ça marche pas", donnez plutôt des informations précises afin de mieux pouvoir vous aider.


    Grand gourou de la -attitude

  7. #7
    Invité
    Invité(e)
    Par défaut
    Merci, je suis arrivé à mes fin concernant l'include

Discussions similaires

  1. Problème fonction include asm 8086
    Par Sushiii dans le forum x86 16-bits
    Réponses: 11
    Dernier message: 13/06/2013, 17h50
  2. Fonction include (ou require ?)
    Par Link14 dans le forum Langage
    Réponses: 6
    Dernier message: 04/06/2006, 15h40
  3. [debutant] Fonction include - suite
    Par pierre50 dans le forum Langage
    Réponses: 3
    Dernier message: 02/06/2006, 15h26
  4. [Système] [debutant] Fonction include
    Par pierre50 dans le forum Langage
    Réponses: 7
    Dernier message: 01/06/2006, 19h00
  5. probleme dans l'utilisation de la fonction include
    Par cortex007 dans le forum Langage
    Réponses: 7
    Dernier message: 27/01/2006, 17h37

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