Précédent   Forum des professionnels en informatique > Autres langages > Assembleur
Assembleur Forum d'entraide Assembleur. Avant de poster -> F.A.Q Assembleur Tutoriels Assembleur
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/12/2011, 13h46   #1
Membre habitué
 
Inscription : janvier 2008
Messages : 384
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 384
Points : 122
Points : 122
Par défaut call en assembleur

Bonjour, j'essaye en vain de faire un petit call de GetCurrentDirectory et d'afficher la valeur mais comme je debute en assembleur je dois surement faire une erreur grossiere...

Voici le code:
Code :
1
2
3
4
5
6
		sub esp, 2048
		push esp
		push 2048
		call GetCurrentDirectory
		invoke MessageBoxW, NULL, esp, esp, MB_OK
		add esp, 2048
Ca m'affiche une chaine avec des caracteres speciaux...

Merci de votre aide.
saturn1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2011, 18h32   #2
Membre expérimenté
 
Avatar de edfed
 
être humain
Inscription : décembre 2007
Messages : 465
Détails du profil
Informations professionnelles :
Activité : être humain

Informations forums :
Inscription : décembre 2007
Messages : 465
Points : 582
Points : 582
call [GetCurrentDirectory] car on appele une fonction via un pointeur en mémoire.

l'equivalent en invoke serait comme ça: invoke GetCurrentDirectory,2048,esp
__________________
http://www.pending.me.uk/nmc/bla_1356091200.png
Vivement 21/12/2012
edfed est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2011, 22h06   #3
Membre habitué
 
Inscription : juin 2002
Messages : 93
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : juin 2002
Messages : 93
Points : 138
Points : 138
Bonjour.

La syntaxe " call GetCurrentDirectory " est tout à fait correcte avec MASM ou TASM.

L'erreur ne vient pas de là, mais du mélange entre une fonction qui retourne une chaîne ANSI et une fonction qui affiche une chaîne UNICODE.

Dans le fichier Kernel32.inc, on trouve " GetCurrentDirectory equ <GetCurrentDirectoryA> ".
Donc " call GetCurrentDirectory " équivaut à " call GetCurrentDirectoryA ".

Pour corriger le programme, il suffit de remplacer le W à la fin de MessageBoxW par un A.
( le A signifie ANSI, le W signifie UNICODE ).

On peut aussi écrire " invoke MessageBox, ... " puisque le fichier User32.inc contient " MessageBox equ <MessageBoxA> ".
Prof est déconnecté   Envoyer un message privé Réponse avec citation 20
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h12.


 
 
 
 
Partenaires

Hébergement Web