Je regarde le fichier strrev.asm qui est utilisé au moins pour les debogages et je remarque que c'est une traduction d'un algorithme écrit en C qui est utilisé. Pourtant, j'ai l'impression qu'il serait plus interessant d'utiliser la structure de pile dont on dispose en assembleur, car elle donne de meilleurs résultats d'après mes tests. Est-ce que je me trompe, ou le code fourni par vs pour strrev est il médiocre?
Pour info voici le strrev que j'ai fait, et qui donne le même résultat que l'original si les 2 args sont égaux, mais plus rapidement en version release
inline char* strrev(char *dst, char *src)
{
__asm
{
mov eax, dst
mov ecx, src
mov dl, 0
boucle1:
push edx
mov dl, [ecx]
inc ecx
or dl, dl
jnz boucle1
boucle2:
pop edx
mov [eax], dl
inc eax
or dl, dl
jnz boucle2
}
}
Peut être que le "problème" vient de la taille limitée de la pile et donc ma fonction ne marcherait plus avec de longues chaines