MrdJack
Messages postés146Date d'inscriptionjeudi 22 avril 2004StatutMembreDernière intervention 8 mars 2008
-
12 mai 2006 à 19:46
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019
-
12 mai 2006 à 21:15
salut, je suis sur un projet de calculatrice me permettant de faire des
calculs avec des nombres tres grands. chaque nombre est stocké dans la
memoire sous forme de chaine de caractere.
une étape importante des opération est d'inverser la chaine de caractere du nombre : "0123456789" devient "9876543210"
pour celà, j'ai d'abord programmé ça en c mais sur de tres grands
nombres, ca prends trop de temps à mon gout. j'ai donc commencé à
utiliser l'asm. apres quelques tutos et une bonne doc sous la main,
j'en suis venu à ceci :
__inline int asmReverse(char *psz)
{
int i=strlen(psz)-1,i2=i/2+i%2;
__asm {
mov ecx, i2
mov eax, psz
mov ebx, eax
add ebx, i
loop_start:
mov dl, [eax]
mov dh, [ebx]
mov [eax], dh
mov [ebx], dl
inc eax
dec ebx
loop loop_start
mov eax, psz
}
}
ca fonctionne, mais je me demandais à tout hasard si j'avais
pas oublié un truc fondamental permettant d'optimiser tout ça pour que
ca aille plus vite.
j'ai aussi essayé en faisant un test dl, dh
suivit d'un saut jz si ya pas besoin d'echanger mais c'etait pas
forcément un gain de temps au final avec des nombre aléatoires.