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 :

Problème fonction include asm 8086


Sujet :

x86 16-bits Assembleur

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Problème fonction include asm 8086
    Bonjour, je dois faire un projet en assembleur 8086, j'ai trouvé ce sujet (http://www.developpez.net/forums/d10...clude-en-8086/) sur la fonction include mais je rencontre un problème lorsque j'exécute mon programme.

    mon main.asm :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ;initialisation du Tamagotchi
    include 'graphisme.asm'
    call drawborder
    call draweggh
    ret
    le fichier "graphisme.asm" est long, mais en lui même il n'a pas de souci.

    quand je lance le programme, la fonction "drawborder" est exécutée (même si je ne l'appelle pas ) et le programme s'arrête là.

    Merci de vos réponses.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 370
    Points : 23 625
    Points
    23 625
    Par défaut
    Bonjour,

    Avec si peu d'infos, il est très difficile de te donner une réponse.

    Cela dit, comme tu as pu le lire dans la discussion dont tu nous donnes le lien, include est une directive d'assemblage et non une fonction. Ça veut dire qu'au moment de la compilation, elle va lire le fichier entier et l'insérer à l'endroit où tu l'as déposée, comme si tu avais directement saisi le code dans ton propre fichier.

    À l'assemblage, il est probable que le point d'entrée soit placé en début de fichier et que, donc, tu rentres directement dans la fonction en question plutôt que dans ton programme qui, lui, est censé l'appeler. Si la fonction se termine par un RET, et si tu travailles sur un émulateur DOS, il y a deux possibilités. Soit le programme plante, mais tu ne t'en rends pas compte car la première fonction a été exécutée, soit le haut de la pile contient zéro, ce qui le renvoie au début du PSP, qui par définition contient « INT 20h » qui était l'interruption historique mais dépréciée de sortie d'un programme D.O.S.

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Merci pour la réponse, mais comment savoir si le programme plante ou pas ?

    Désolée pour les erreurs, je commence à peine et j'avoue que je ne comprends pas tout..

  4. #4
    Membre confirmé Avatar de bifur
    passe le balais et l'aspirateur
    Inscrit en
    Mars 2008
    Messages
    314
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : passe le balais et l'aspirateur

    Informations forums :
    Inscription : Mars 2008
    Messages : 314
    Points : 550
    Points
    550
    Par défaut
    main.asm ne fait que 5 ligne? et puis c'est pour quel os? c'est compilé comment?

    sinon ça ne m'étonne pas que la fonction "drawborder" soit exécuté vu qu'elle est appellé (call) ligne 3

  5. #5
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Pour l'instant oui, il ne fait que 5 lignes, je suis au début, j'ai surtout fait les graphismes.

    Je dois utiliser emu8086.

    Et je voulais dire que lorsque je n'appelle pas la fonction "drawborder" elle s'exécute quand même.

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 370
    Points : 23 625
    Points
    23 625
    Par défaut
    Montre-nous le contenu de « graphisme.asm ».

  7. #7
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    voilà graphisme.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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    name "GraphismeTamagotchi"
     
    drawborder proc      ; affichage des bordures
    mov cx,25
    mov bx, 0
    leftb:mov [00h+bx], 219
    inc bx
    mov [00h+bx], 00001111b
    add bx,159
    loop leftb
     
    mov cx,25
    mov bx, 158
    rightb:mov [00h+bx], 219
    inc bx
    mov [00h+bx], 00001111b
    add bx,159
    loop rightb
     
    mov cx,78
    mov bx, 2
    upb:mov [00h+bx], 223
    inc bx
    mov [00h+bx], 00001111b
    inc bx
    loop upb
     
    mov cx,78
    mov bx, 3842
    downb:mov [00h+bx], 220
    inc bx
    mov [00h+bx], 00001111b
    inc bx
    loop downb
    ret
    drawborder endp
     
    draweggh proc      ;affichage de l'oeuf  
      ;ligne 1.1
    mov bx, 1338    
    mov [bx], 220
    ;[...]
    mov bx, 2628
    mov [bx], 223
    ret
    draweggh endp

  8. #8
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 370
    Points : 23 625
    Points
    23 625
    Par défaut
    Essaie dans un premier temps de mettre include après tes appels et non avant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ;initialisation du Tamagotchi
    call drawborder
    call draweggh
    include 'graphisme.asm'
    ret

  9. #9
    Membre confirmé Avatar de bifur
    passe le balais et l'aspirateur
    Inscrit en
    Mars 2008
    Messages
    314
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : passe le balais et l'aspirateur

    Informations forums :
    Inscription : Mars 2008
    Messages : 314
    Points : 550
    Points
    550
    Par défaut
    comme l'as dit obsidian "include" recopie le contenu du fichier la ou est placé l'instruction donc ton compilateur va compiler main.asm comme si c'était graphisme.asm mais avec les lignes 2 à 5 de main.asm rajouté a la fin (ou je sais explication tordu) et comme (je le suppose) emu8086 doit émuler un bon vieux dos et son format d'exécutable .com qui a son point d'entré au début donc drawborder est executé mais pas draweggh car tu a bien fini drawborder par l'instrucion ret (qui visiblement permet de terminer un programme sous emu8086)

    essaye déja dans main.asm:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ;initialisation du Tamagotchi
    call drawborder
    call draweggh
    ret
    include 'graphisme.asm'
    les sous fonction seron enregistré/compilé après la fin du programme


    petite précision si tu compile des executable .com il faut rajouter org100h au début car le programme est chargé en mémoire a cette adresse

  10. #10
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Je peux appeler les autres fonctions.

    Mais si je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ;initialisation du Tamagotchi
    ;call drawborder
    call draweggh
    include 'graphisme.asm'
    ret
    la fonction "drawborder" s'exécute à la fin.

    @bifur : Oui mon code commence par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    name "Tamagotchi"
     
    mov ax, 0b800h
    mov ds, ax
     
    org 100h

  11. #11
    Membre confirmé Avatar de bifur
    passe le balais et l'aspirateur
    Inscrit en
    Mars 2008
    Messages
    314
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : passe le balais et l'aspirateur

    Informations forums :
    Inscription : Mars 2008
    Messages : 314
    Points : 550
    Points
    550
    Par défaut
    il faut donc bien faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    name "Tamagotchi"
     
    mov ax, 0b800h
    mov ds, ax
     
    org 100h
    ;initialisation du Tamagotchi
    ;call drawborder
    call draweggh
    ret
    include 'graphisme.asm'
    pour que drawborder ne soit pas executé

  12. #12
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Oui effectivement ça fonctionne, je n'avais pas vu la nuance entre vos deux codes.

    Merci beaucoup.

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

Discussions similaires

  1. Fonction Include en 8086
    Par Invité dans le forum x86 16-bits
    Réponses: 6
    Dernier message: 22/05/2011, 17h15
  2. [SQL] Problème avec la fonction include
    Par dubailth dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 16/07/2007, 11h34
  3. Réponses: 4
    Dernier message: 21/06/2007, 14h12
  4. Problème avec la fonction include chez ifrance.com
    Par othmane126 dans le forum Langage
    Réponses: 10
    Dernier message: 26/05/2007, 11h56
  5. [Système] problème avec la fonction include()
    Par daemon2a dans le forum Langage
    Réponses: 4
    Dernier message: 10/05/2007, 11h02

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