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 :

Hello world avec MASM32


Sujet :

x86 16-bits Assembleur

  1. #1
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 100
    Points : 77
    Points
    77
    Par défaut Hello world avec MASM32
    Bonjour,

    mon hello world sous MASM32 provoque une erreur windows:
    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
    .386
    .model flat, STDCALL
     
    .data
        message db  "HelloWorld!$"
    .code
     
    start:
     
    mov ax,dx
    mov es,ax
    mov ah,09h
    lea dx,message
    int 21h
     
    end start
    Je crois que c'est dû à l'utilisation de MASM32 et non MASM.
    QQ peut-il m'aider ?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    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 368
    Points : 23 622
    Points
    23 622
    Par défaut
    Déjà, tu peux essayer de coller un « USE16 » en début de programme pour lui dire que tu utilises le mode 16 bits et non 32, mais surtout, il n'y a pas de fonction de sortie dans ton programme ! Passé l'affichage, ton programme continue dans le vide.

    Ajoute les lignes suivantes juste avant le « end » :

    Code asm : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            mov ax,4c00h
            int 21h

  3. #3
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 100
    Points : 77
    Points
    77
    Par défaut
    Merci pour ta réponse mais ça ne fonctionne toujours pas.
    J'ai essayé :

    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
    .386
    .model flat, STDCALL
     
    .data
        message db  "HelloWorld!$"
    .code
     
    start:
     
    mov ax,dx
    mov es,ax
    mov ah,09h
    lea dx,message
    int 21h
     
    mov ax,4c00h
    int 21h
     
    end start
    Comment utilise-t-on USE16 ?

  4. #4
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 100
    Points : 77
    Points
    77
    Par défaut
    J'ai trouvé ceci sur msdn :

    .MODEL

    Initializes the program memory model.

    .MODEL memorymodel [[, langtype]] [[, stackoption]]

    Remarks

    The memorymodel can be TINY, SMALL, COMPACT, MEDIUM, LARGE, HUGE, or FLAT. The langtype can be C, BASIC, FORTRAN, PASCAL, SYSCALL, or STDCALL. The stackoption can be NEARSTACK or FARSTACK. stackoption is not allowed if memorymodel is FLAT.



    J'ai essayé de remplacer flat par tout les types de memoires mais ca ne fonctionne toujours pas.

  5. #5
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    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 368
    Points : 23 622
    Points
    23 622
    Par défaut
    Je n'avais pas vu cela :

    C'est incorrect. La valeur de DX est indéfinie au démarrage, et cela ne sert strictement à rien de la mettre dans ES. C'est la valeur de DS qu'il faut initialiser.

    Remplace ces deux lignes par

    Code asm : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            mov ax,@data
            mov ds,ax

  6. #6
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 100
    Points : 77
    Points
    77
    Par défaut
    Il me semble que mov ax,@data n'est pas de l'asm MASM32.
    Le compilateur affiche cette erreur:

    Interruption.asm(10) : error A2006: undefined symbol : DGROUP

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/04/2010, 12h25
  2. [Visual Web] Mon premier Hello world avec netbeans
    Par programaniac dans le forum NetBeans
    Réponses: 10
    Dernier message: 09/04/2009, 06h24
  3. Hello world avec GAS sous mingw
    Par TheDrev dans le forum Assembleur
    Réponses: 13
    Dernier message: 01/09/2008, 19h22
  4. compiler un hello world avec cl
    Par elekis dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 25/03/2008, 07h40
  5. Hello world avec JCreator
    Par skunkies dans le forum Environnement de Développement Intégré (EDI)
    Réponses: 4
    Dernier message: 22/09/2006, 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