Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

Discussion: Erreur code MASM

  1. #1
    Invité de passage
    Inscrit en
    mars 2012
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : mars 2012
    Messages : 1
    Points : 0
    Points
    0

    Par défaut Erreur code MASM

    Tout d'abord bonjour(soir),

    Voila j'ai un petit soucis au niveau de l'assemblage de mon code, je suit également le cours de Kip Irvine "assembleur x86" avec MASM, voici le code :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    ; TITLE Addition et soustraction (addSub.asm)
     
    ; Addition et soustraction d'entiers sur 32 bits
     
     
    INCLUDE Irvine32.inc
     
     
    .code
    main PROC
     
    mov eax,1000h                     ; EAX = 1000h
    add eax,4000h                     ; EAX = 5000h
    sub eax,2000h                     ; EAX = 3000h
     
    exit
    main ENDP
    END main
    C'est du mot à mot , et voici l'erreur :

    Code :
    1
    2
    3
     
    test.obj : error LNK2001: unresolved external symbol _ExitProcess@4
    test.exe : fatal error LNK1120: 1 unresolved externals
    Je suis vraiment débutant, si je pourrais avoir une réponse clair avec un petit exemple du code ça serait gentil, merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    juin 2002
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : juin 2002
    Messages : 132
    Points : 293
    Points
    293

    Par défaut

    Bonjour.

    Ce problème semble se poser régulièrement avec le livre de Irvine ...
    Voir http://www.winasm.net/forum/index.php?showtopic=586

    Personnellement, je pense que l'instruction " exit " placée à la fin de ce code fait référence à une macro située à l'intérieur du fichier Irvine32.inc.
    ( je précise que je n'ai pas le livre de Irvine ni le CD associé, et donc que je n'ai pas pu consulter le fichier Irvine32.inc )
    Cette macro contient certainement l'appel à ExitProcess, procédure appelée pour quitter un programme Win32.
    Pour que le compilateur fasse son travail, il faut qu'il sache où trouver cette procédure.
    Or cette procédure ExitProcess figure dans Kernel32.dll, librairie faisant partie de Windows.
    Il faut donc signifier au compilateur que cette procédure est une procédure externe au programme, et que l'éditeur de liens la trouvera dans Kernel32.dll.
    Cela se fait avec MASM en ajoutant dans le code la ligne " INCLUDE Kernel32.lib ", ou bien la ligne " INCLUDE Irvine32.lib " si ce fichier existe et contient les informations souhaitées sur la fonction ExitProcess.

    Pour répondre plus précisément à votre question, il faudrait connaître le contenu du fichier Irvne32.inc.
    Et en particulier toutes les références à ExitProcess figurant dans ce fichier.

    Pour finir, je vous conseille de passer à MASM32.
    ( voir http://www.masm32.com/ )
    Les fichiers sont complets, prêts à l'emploi, et il n'y a pas de fichiers propriétaires comme Irvine32.inc, Irvine32.lib ou je ne sais quoi d'autre.

  3. #3
    Invité de passage
    Homme Profil pro
    Inscrit en
    mai 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : mai 2012
    Messages : 3
    Points : 3
    Points
    3

    Par défaut

    Bonjour,

    Code :
    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
    ; TITLE Addition et soustraction (addSub.asm)
     
    ; Addition et soustraction d'entiers sur 32 bits
     
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    .586 ; processeur = Pentium
    .model flat, stdcall ; un seul segment de 4Go, appel standard
    option casemap: none ; l'assembleur respecte les majuscules et minuscules
    include \masm32\include\windows.inc
    include \masm32\include\kernel32.inc
    includelib \masm32\lib\kernel32.lib     
    include \masm32\include\user32.inc
    includelib \masm32\lib\user32.lib       
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
     
    ;INCLUDE Irvine32.inc
     
    .data
    titre db "resultat",0
    zoen_fmt                db "%08lx",0
    caption dd ?,0
    zoen_buf                db 256 dup(0)
    .code
     
     
    main:
     
    mov eax,1000h                     ; EAX = 1000h
    add eax,4000h                     ; EAX = 5000h
    sub eax,2000h                     ; EAX = 3000h
    mov [caption],eax
     
     
                movzx  esi,word ptr[caption]                                                 
                push   esi                                                                
                push   offset zoen_fmt                                                    
                push   offset zoen_buf                                                    
                call   wsprintf                                                           
    invoke MessageBox, NULL, addr zoen_buf, addr titre, MB_OK
    invoke ExitProcess, 0 
    END main

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •