Pb registre DL [Résolu]

Signaler
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
-
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
-
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

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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
}
}
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
Salut,
Je dirais qu'il manque le 'byte ptr' avant [ecx].
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
nop, il est rajouté a la compilation, un desassembly pour verifier..
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
(évidemment le problème ne venait pas de dl)
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
Ben effectivement, ca marche, mais ca viendrait simplement de la mauvaise initialisation des registres eax et ecx ?
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
bien surque ca vient de la (t'a pas recu mon mail?), mais aussi du ret 8
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
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.

++
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
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++
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Tiens, qu'est ce qui se passe si on a une fonction __fastcall qui prend 4 arguments??
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
les autres sont sur la pile.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Les 2 ou les 3 premiers sont dans registre?
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
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++
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Merci
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
_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.

++
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
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..