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 32-bits / 64-bits Assembleur Discussion :

[RadAsm] Erreur de compilation dans squelette de fenêtre du cours d'initiation à l'Assembleur


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Membre à l'essai
    Homme Profil pro
    autonome
    Inscrit en
    Octobre 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : autonome
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2013
    Messages : 35
    Points : 18
    Points
    18
    Par défaut [RadAsm] Erreur de compilation dans squelette de fenêtre du cours d'initiation à l'Assembleur
    Bonjour,

    je viens en train de suivre le tutoriel "Pas à pas vers l'Assembleur" de Lord Northworthy et j'ai des problèmes de compilation avec le code squelette de fenêtre !

    Mon code :

    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    .386
    .model flat, stdcall
    option casemap:none
     
    include windows.inc
     
    include user32.inc
    includelib user32.lib
     
    include kernel32.inc
    includelib kernel32.lib
     
    WinMain PROTO :DWORD, :DWORD, :DWORD, :DWORD 
     
    .data
     
    ClassName BYTE "SimpleWinClass",0		;classe de fenetre
    AppName   BYTE "Fenetre!",0				;string titre!
     
    .data?
     
    hInstance	HINSTANCE  	?
    CommandLine LPSTR		?
     
    .code
     
    start:
     
    invoke GetModuleHandle, NULL
    mov GetModuleHandle, eax
     
    invoke GetCommandLine
    mov CommandLine, eax
     
    invoke WinMain, hInstance, NULL, CommandLine, SW_SHOWDEFAULT
     
    invoke ExitProcess, eax
     
    WinMain proc hInst:HINSTANCE, hPrevInst:HINSTANCE,
    			CmdLine:LPSTR,cMDSHOW:DWORD
     
    		LOCAL wc:WNDCLASSEX								;wc, classe de fenetre 
    		LOCAL msg:MSG									;message systeme (communique entre l<utilisateur et les fenetres!)
    		LOCAL  hwnd:HWND								;handle de fenetre ?
    														;44-59 initialise la windowsClass
    	mov		wc.cbSize,SIZEOF WNDCLASSEX					;cbSize, taille en octets de WNDCLASSEX
    	mov		wc.style, CS_HREDRAW or CS_VREDRAW			
    	mov		wc.lpfnWndProc, OFFSET wndProc				;pointe vers la fonction qui traite les evenements utilisateurs
    	mov		wc.cbClsExtra, NULL							;nombre d'octets supplementaire en fonction de la structure 
    	mov     wc.cbWndWxtra, NULL							;nombre d'octets supplementaire en fonction de window instance!
    	push	hInstance
    	pop		wc.hInstance
    	mov		wc.hbrBackground, COLOR+WINDOW+1
    	mov		wc.lpszMenuName,NULL
    	mov 	wc.lpszClassName, OFFSET ClassName
    	invoke	LoadIcon, NULL, IDI_APPLICATION
    	mov		wc.hIcon,eax
    	mov		wc.hIconSm,eax
    	invoke 	LoadCursor, NULL, IDC_ARROW
    	mov 	wc.hCursor, eax
    	invoke	RegisterClassEx, addr wc
     
    	invoke	CreateWindowEx, Null,\		; structure de fenetre (default dans ce cas ci)
    					ADDR ClassName,\
    					ADDR AppName,\
    					WS_OVERLAPPEDWINDOW,\
    					CW_USEDEFAULT,\
    					CW_USEDEFAULT,\
    					CW_USEDEFAULT,\
    					CW_USEDEFAULT,\
    					NULL,\
    					NULL,\
    					hInst,\
    					NULL,
    	mov 	hwnd,eax
    	invoke	ShowWindow, hwnd,CmdShow
    	invoke	UpdateWindow, hwnd
     
    	.WHILE TRUE
     
    			invoke GetMessage, ADDR msg, NULL,0,0
    			.BREAK .IF (!eax)
    			invoke TranslateMessage, ADDR msg
    			invoke DispachMessage, ADDR msg
    	.ENDW
    	mov 	eax, msg.wParam
    	ret
     
    WinMain endp
     
    WndProc pric hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
     
    	.IF uMsg==WM_DESTROY
     
    	.ELSE
    		invoke DefWindowProc, hWd,uMsg,wParam, lParam
    		ret
     
    	.ENDIF
    		xor eax,eax
    		ret
    WndProc endp
     
    end start
    Et les erreurs :

    C:\Users\usert61\Desktop\fenetre.asm(64) : error A2008: syntax error : mov
    C:\Users\usert61\Desktop\fenetre.asm(77) : error A2006: undefined symbol : CmdShow
    C:\Users\usert61\Desktop\fenetre.asm(77) : error A2114: INVOKE argument type mismatch : argument : 2
    C:\Users\usert61\Desktop\fenetre.asm(85) : error A2006: undefined symbol : DispachMessage
    C:\Users\usert61\Desktop\fenetre.asm(92) : error A2008: syntax error : pric
    C:\Users\usert61\Desktop\fenetre.asm(97) : error A2006: undefined symbol : lParam
    C:\Users\usert61\Desktop\fenetre.asm(97) : error A2114: INVOKE argument type mismatch : argument : 4
    C:\Users\usert61\Desktop\fenetre.asm(97) : error A2006: undefined symbol : wParam
    C:\Users\usert61\Desktop\fenetre.asm(97) : error A2114: INVOKE argument type mismatch : argument : 3
    C:\Users\usert61\Desktop\fenetre.asm(97) : error A2006: undefined symbol : uMsg
    C:\Users\usert61\Desktop\fenetre.asm(97) : error A2114: INVOKE argument type mismatch : argument : 2
    C:\Users\usert61\Desktop\fenetre.asm(97) : error A2006: undefined symbol : hWd
    C:\Users\usert61\Desktop\fenetre.asm(97) : error A2114: INVOKE argument type mismatch : argument : 1
    C:\Users\usert61\Desktop\fenetre.asm(103) : fatal error A1010: unmatched block nesting : WndProc
    Pourriez-vous m'éclairer svp, pendant que je cherche mes erreurs ?

  2. #2
    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
    quel est le compilateur que tu utillise?

    pour commencer ligne 30 la notation de l'instruction "mov CommandLine, eax" me semble incorrecte car en assembleur on note la destination avant la source, donc impossible de changer une constante. si CommandLine est une variable il aurait fallu le noter entre crochet "mov [CommandLine], eax"

  3. #3
    Membre à l'essai
    Homme Profil pro
    autonome
    Inscrit en
    Octobre 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : autonome
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2013
    Messages : 35
    Points : 18
    Points
    18
    Par défaut
    Salut,

    Je me sers de Radasm!

    Pour la commandLine, je pense que c est parce que en principe c'est untutoriel masm et l'option casemap:none, indique a masm que c'est bien de cette facons qu'il faut caller les fonction? Bref corrigez moi si je me trompe!

    Merci pour vos réponses!

  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
    pour appeller la sous fonction commandLine je fais plutôt "call commandLine" parc que j'uttilise jamais la pile pour passer mes argument mais dans ton cas tu dois uttiliser "invoke commandLine, paramètre1, ..etc" car tes fonction sont dans une bibliothèque qui uttilise la pile pour passer les arguments et ce genre de méthode évite de faire des erreurs

    si commandLine est bien une fonction, il ne me semble pas possible d'uttiliser mov car cette instuction sert a déplacer des données (mais je peut me tromper, je ne susi pas famillier de l'uttilisation de invoke pour appeler des fonctions)

    bizzarement j'arrive pas a faire le liens entre le code que tu as posté et le l'extrait de log de tes erreurs de compilation, les numéros de ligne ne semble pas correspondre aux erreurs

  5. #5
    Membre à l'essai
    Homme Profil pro
    autonome
    Inscrit en
    Octobre 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : autonome
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2013
    Messages : 35
    Points : 18
    Points
    18
    Par défaut
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    .386
    .model flat, stdcall
    option casemap:none
     
    include windows.inc
     
    include user32.inc
    includelib user32.lib
     
    include kernel32.inc
    includelib kernel32.lib
     
    WinMain PROTO :DWORD, :DWORD, :DWORD, :DWORD 
     
    .data
     
    ClassName BYTE "SimpleWinClass",0		;classe de fenetre
    AppName   BYTE "Fenetre!",0				;string titre!
     
    .data?
     
    hInstance	HINSTANCE  	?
    CommandLine LPSTR		?
     
    .code
     
    start:
     
    invoke GetModuleHandle, NULL
    mov ModuleHandle, eax
     
    invoke GetCommandLine, 
    call CommandLine, eax
     
    invoke WinMain, hInstance, NULL, CommandLine, SW_SHOWDEFAULT
     
    invoke ExitProcess, eax
     
    WinMain proc hInst:HINSTANCE, hPrevInst:HINSTANCE,
    			CmdLine:LPSTR,cMDSHOW:DWORD
     
    		LOCAL wc:WNDCLASSEX								;wc, classe de fenetre 
    		LOCAL msg:MSG									;message systeme (communique entre l<utilisateur et les fenetres!)
    		LOCAL  hwnd:HWND								;handle de fenetre ?
    														;44-59 initialise la windowsClass
    	mov		wc.cbSize,SIZEOF WNDCLASSEX					;cbSize, taille en octets de WNDCLASSEX
    	mov		wc.style, CS_HREDRAW or CS_VREDRAW			
    	mov		wc.lpfnWndProc, OFFSET wndProc				;pointe vers la fonction qui traite les evenements utilisateurs
    	mov		wc.cbClsExtra, NULL							;nombre d'octets supplementaire en fonction de la structure 
    	mov     wc.cbWndWxtra, NULL							;nombre d'octets supplementaire en fonction de window instance!
    	push	hInstance
    	pop		wc.hInstance
    	mov		wc.hbrBackground, COLOR+WINDOW+1
    	mov		wc.lpszMenuName,NULL
    	mov 	wc.lpszClassName, OFFSET ClassName
    	invoke	LoadIcon, NULL, IDI_APPLICATION
    	mov		wc.hIcon,eax
    	mov		wc.hIconSm,eax
    	invoke 	LoadCursor, NULL, IDC_ARROW
    	mov 	wc.hCursor, eax
    	invoke	RegisterClassEx, addr wc
     
    	invoke	CreateWindowEx, Null,\		; structure de fenetre (default dans ce cas ci)
    					ADDR ClassName,\
    					ADDR AppName,\
    					WS_OVERLAPPEDWINDOW,\
    					CW_USEDEFAULT,\
    					CW_USEDEFAULT,\
    					CW_USEDEFAULT,\
    					CW_USEDEFAULT,\
    					NULL,\
    					NULL,\
    					hInst,\
    					NULL,
    	mov 	hwnd,eax
    	invoke	ShowWindow, hwnd, CmdShow
    	invoke	UpdateWindow, hwnd
     
    	.WHILE TRUE
     
    			invoke GetMessage, ADDR msg, NULL,0,0
    			.BREAK .IF (!eax)
    			invoke TranslateMessage, ADDR msg
    			invoke DispachMessage, ADDR msg
    	.ENDW
    	mov 	eax, msg.wParam
    	ret
     
    WinMain endp
     
    WndProc pric hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
     
    	.IF uMsg==WM_DESTROY
     
    	.ELSE
    		invoke DefWindowProc, hWd,uMsg,wParam, lParam
    		ret
     
    	.ENDIF
    		xor eax,eax
    		ret
    WndProc endp
     
    end start
    C:\Users\usert61\Desktop\fenetre.asm(33) : error A2008: syntax error : call
    C:\Users\usert61\Desktop\fenetre.asm(64) : error A2008: syntax error : mov
    C:\Users\usert61\Desktop\fenetre.asm(77) : error A2006: undefined symbol : CmdShow
    C:\Users\usert61\Desktop\fenetre.asm(77) : error A2114: INVOKE argument type mismatch : argument : 2
    C:\Users\usert61\Desktop\fenetre.asm(85) : error A2006: undefined symbol : DispachMessage
    C:\Users\usert61\Desktop\fenetre.asm(92) : error A2008: syntax error : pric
    C:\Users\usert61\Desktop\fenetre.asm(97) : error A2006: undefined symbol : lParam
    C:\Users\usert61\Desktop\fenetre.asm(97) : error A2114: INVOKE argument type mismatch : argument : 4
    C:\Users\usert61\Desktop\fenetre.asm(97) : error A2006: undefined symbol : wParam
    C:\Users\usert61\Desktop\fenetre.asm(97) : error A2114: INVOKE argument type mismatch : argument : 3
    C:\Users\usert61\Desktop\fenetre.asm(97) : error A2006: undefined symbol : uMsg
    C:\Users\usert61\Desktop\fenetre.asm(97) : error A2114: INVOKE argument type mismatch : argument : 2
    C:\Users\usert61\Desktop\fenetre.asm(97) : error A2006: undefined symbol : hWd
    C:\Users\usert61\Desktop\fenetre.asm(97) : error A2114: INVOKE argument type mismatch : argument : 1
    C:\Users\usert61\Desktop\fenetre.asm(103) : fatal error A1010: unmatched block nesting : WndProc

    Make error(s) occured.
    Total compile time 561 ms
    En fait, à la ligne 33, que je call ou que je move, il me sort la même erreur ! Y a-t-il des cours que je peu suivre en ligne, je checke pour des cours MSDN ou quelque chose de reconnu !

  6. #6
    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
    pour faire un call correct il faut faire: pour faire un mov correct il faut faire: mais dans ton cas il semble plutot que tu doivent faire un invoke:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    invoke CommandLine, eax

Discussions similaires

  1. Erreur de compilation dans le module caché
    Par Kalvin_20 dans le forum VBA Access
    Réponses: 4
    Dernier message: 27/05/2008, 15h03
  2. erreur de compilation dans la création d'un crosstab
    Par longuele dans le forum iReport
    Réponses: 7
    Dernier message: 29/10/2007, 10h13
  3. Erreur de compilation dans Struts (Wsad/Eclips)
    Par machipot dans le forum Struts 1
    Réponses: 8
    Dernier message: 26/07/2007, 16h14
  4. [Simulink][Débutante] Erreur de compilation dans un code
    Par karamellati dans le forum MATLAB
    Réponses: 4
    Dernier message: 30/05/2007, 11h47
  5. [Servlet][Compilation] Erreur de compil dans code servlet
    Par gandalf_le_blanc dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 13/05/2004, 10h17

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