belette321
Messages postés100Date d'inscriptionsamedi 3 mai 2008StatutMembreDernière intervention 9 mars 2011
-
16 août 2008 à 03:42
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 2014
-
17 août 2008 à 18:31
Bon, je suis en plein creation d'un petit dll qui utilise
le ASM inline, j'ai plusieur fonction qui on touts les meme
erreur. Cependant je ne trouve pas le moyen de corriger
tout sa. alor voilla tout ...
L'Erreure :
-----------------------------------------------------------
-----------------------------------------------------------
'pushad'
Too many memory references for 'mov'
Too many memory references for 'add'
'popad'
-----------------------------------------------------------
-----------------------------------------------------------
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 17 août 2008 à 18:31
Salut,
Sauf erreur de ma part, l'assembleur que tu nous montre ici n'est pas du tout inévitable.
asm("pushad"); // Sauvegarde du contexte. On s'en fou un peu
asm("mov eax,ZPostShotMeleeAddress"); // On met une adresse dans eax
asm("PUSH 7"); // On pousse 7
asm("PUSH MyPos"); // On pousse l'adresse du tableau MyPos (On passe un paramètre)
asm("call eax"); // On appel l'adresse précédement mise dans eax (On passe un autre paramètre)
asm("add esp,8"); // On dépile les paramètres, typique d'un appel en cdecl
asm("popad"); // On restaure le context
Cela ressemble beaucoup à un appel d'une fonction de convention cdecl, prenant deux paramètres, un pointeur sur un tableau de float et un entier, et ne renvoyant rien (Ou du moins on se fiche du résultat).
En cdecl, les paramètres sont poussés de droite à gauche. Donc je dirais que la fonction appelée à le prototype suivant :
void __cdelc ZPostShotMeleeAddress(float* lpPos, int val)
On ne peut pas deviner le type de retour, mais ça n'a pas d'importance.
Le code ci-dessus revient à l'appeler en lui passant (MyPos, 7).
Par contre, tu travailles avec une adresse (ZPostShotMeleeAddress) que je ne sais pas comment tu la récupères...
Il faudra donc peut être que tu déclare un pointeur sur fonction et que tu récupère l'adresse de ta fonction dans ce pointeur.
Mais bon, peut être que tu as pas mal d'asm à traduire...
Si la méthode de Neo_Fr ne fonctionne pas, tu peux essayer de traduire en AT&T. Pour traduire, tu peux commencer par regarder ce source par exemple.