begin process at 2008 08 28 22:02:20
1 233 395 membres
487 nouveaux aujourd'hui
14 291 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : inverser une chaine [ Archives / c, c++ et asm ] (MrdJack)

inverser une chaine le 12/05/2006 19:46:12

MrdJack
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.

merci d'apporter votre point de vue.


Re : inverser une chaine le 12/05/2006 19:47:19

MrdJack
oups c'est __inline char *asmReverse(char *psz)



Re : inverser une chaine le 12/05/2006 21:13:28

BruNews
(Admin CS)
C'est clair qu'on peut optimiser, je te laisse traduire:

void ReverseStr(char *psz)
{
  char *c = psz, a;
  while(*c) c++; // c FINIT SUR LE ZERO FINAL
  while(psz < --c) {a = *psz; *psz++ = *c; *c = a;}
}

ciao...
BruNews, MVP VC++

Re : inverser une chaine le 12/05/2006 21:15:22

BruNews
(Admin CS)
M'étonnerait aussi que ce soit là que tu gagnes quoi que ce soit par rapport au compilo.

ciao...
BruNews, MVP VC++


Classé sous : chaine, mov, eax, ebx, psz

Participer à cet échange

Livres en rapport

Pub



Appels d'offres

Recherche developpeur ...
Budget : 700€
SITE MARCHAND LOCATION...
Budget : 3 000€
SITE MARCHAND POUR HOTEL
Budget : 4 000€

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Boutique

Boutique de goodies CodeS-SourceS