Précédent   Forum du club des développeurs et IT Pro > Autres langages > Assembleur > x86 32-bits / 64-bits
x86 32-bits / 64-bits Architectures x86 32/64 bits et leurs outils (assembleurs, debuggers, émulateurs...)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 18/03/2012, 05h13   #1
DaFt27
Invité de passage
 
Inscription : 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
DaFt27 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2012, 13h56   #2
Prof
Membre confirmé
 
Inscription : juin 2002
Messages : 113
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : juin 2002
Messages : 113
Points : 217
Points : 217
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.
Prof est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2012, 00h31   #3
a_te_p
Invité de passage
 
Homme
Inscription : 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
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
a_te_p est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 21h14.


 
 
 
 
Partenaires

Hébergement Web