Pb registre DL

Résolu
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 - 8 août 2004 à 19:05
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 - 12 août 2004 à 00:22
Bonjour,

J'ai un ptit pb avec le code qui suit, au nivo du mov dl, [ecx] :

//Renvoie pointeur sur fin de chaine (permet d'eviter l'utilisation de strcat qui parcourt toute la chaine)

_declspec(naked) char * My_strcpy(char *dest, char *src)
{
//EAX = dest
//ECX = src
__asm {
mov eax, dest
mov ecx, src
Copy:
mov dl, [ecx]
mov [eax], dl
or dl, dl
jz Fin
inc eax
inc ecx
jmp Copy
Fin:
ret 8
}
}

Mais si kelkun pouvait me dire pkoi, jle remercie, paske j'ai maté des codes et ca marche donc pkoi pas ds mon prog, hein ? Bon ben, jvous remercie d'avance et puis bonne soirée

++

Alhexman

15 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
8 août 2004 à 21:23
comme ca ca va:

_declspec(naked) char *My_strcpy(char *dest, char *src)

{
__asm 
{

mov eax, [esp + 4]
mov ecx, [esp + 8]
Copy:
mov dl, [ecx]
mov [eax], dl
test dl, dl
jz Fin
inc eax
inc ecx
jmp Copy
Fin:
ret 0
}
}
3
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
8 août 2004 à 20:59
Salut,
Je dirais qu'il manque le 'byte ptr' avant [ecx].
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
8 août 2004 à 21:05
nop, il est rajouté a la compilation, un desassembly pour verifier..
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
8 août 2004 à 21:25
(évidemment le problème ne venait pas de dl)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
8 août 2004 à 21:34
Ben effectivement, ca marche, mais ca viendrait simplement de la mauvaise initialisation des registres eax et ecx ?
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
8 août 2004 à 21:35
bien surque ca vient de la (t'a pas recu mon mail?), mais aussi du ret 8
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
8 août 2004 à 21:38
Si j'ai recu, mais j'avais apporté les corrections dont tu m'avais parlé, et rien..mais c moi ki devais plus avoir les yeux en face des trous (maman pourra en temoigner..), en tt ka, je te remercie vecchio.

++
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
8 août 2004 à 21:42
voila un cas ou serait parfait en __fastcall, tu n'as aucun besoin de params sur pile, temps perdu en entree comme en sortie.__fastcall te donnera ECX dest, EDX src.
Et la oui que 'ret 0' serait bon.

ciao...
BruNews, Admin CS, MVP Visual C++
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
8 août 2004 à 21:44
Tiens, qu'est ce qui se passe si on a une fonction __fastcall qui prend 4 arguments??
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
8 août 2004 à 21:47
les autres sont sur la pile.

ciao...
BruNews, Admin CS, MVP Visual C++
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
8 août 2004 à 21:48
Les 2 ou les 3 premiers sont dans registre?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
8 août 2004 à 21:50
les suivants des 2 premiers.
Totalement deconseille __fastcall si + de 2 params, tu finirais par devoir les empiler dans la fonction.

ciao...
BruNews, Admin CS, MVP Visual C++
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
8 août 2004 à 21:53
Merci
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
9 août 2004 à 09:12
_declspec(naked) char * __fastcall a_strcpy(char *dest, char *src)
{
//ECX = dest
//EDX = src
__asm {
Copy:
mov al, [edx]
mov [ecx], al
inc ecx
inc edx
or al, al
jz Fin
mov al, [edx]
mov [ecx], al
inc ecx
inc edx
or al, al
jz Fin
mov al, [edx]
mov [ecx], al
inc ecx
inc edx
or al, al
jnz Copy
Fin:
//mov eax, [ecx - 1]
lea eax, [ecx - 1]
ret 0
}
}

Voila a quoi ressemble ma fonction strcpy, les test se revelent 2fois plus rapide quand on a plusieur strcat.

++
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
12 août 2004 à 00:22
J'ai oublié de preciser kel etait pompé a 50% sur la source de Brunews (le "déroulage"), je ne vais pas m'appropprier celle ci, ct juste pour ke d'autres en profitent..
0
Rejoignez-nous