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)

vendredi 12 mai 2006 à 19:46:12 | inverser une chaine

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.


vendredi 12 mai 2006 à 19:47:19 | Re : inverser une chaine

MrdJack

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



vendredi 12 mai 2006 à 21:13:28 | Re : inverser une chaine

BruNews

Administrateur CodeS-SourceS
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++

vendredi 12 mai 2006 à 21:15:22 | Re : inverser une chaine

BruNews

Administrateur CodeS-SourceS
M'étonnerait aussi que ce soit là que tu gagnes quoi que ce soit par rapport au compilo.

ciao...
BruNews, MVP VC++



Cette discussion est classé dans : chaine, mov, eax, ebx, psz


Répondre à ce message

Sujets en rapport avec ce message

Différences ??? [ par Arecibo ] Voila je debute en assembleur et j'aimerais savoir quelles sont les différences entre :-> mov eax, ebx et mov eax, [ebx]-> mov esi, eax et mov [esi], j'ai un prob avec mon buffer ; ya pas d'amuses gueules (masm32) [ par papiboff ] bj si je mets le buffer "somme " en dd avec charge eax et que j'ajoute deux 'dec ebx ' , ben , marche pas correctement ; (pêrqué ???? = en french) sv [linux] read and open [ par sheorogath ] Bonjour,je débute un peu en assembleur et j'essaie de faire un programme qui lit le début d'un fichier dont le nom est entré par l'utilisateur.Voici l Petit problème pour comparer (cmp) [ par smok1360 ] Bonjour à tous,Pour commencer, j'espère de ne pas avoir choisis le mauvais lieu pour poster, j'ai un petit peu hésité Donc, j'ai décidé d'apprendre l' Aligner des données pour le SSE [ par epineurien ] Bonjour à tous !J'ai un petit problème avec du code dont je mesure la vitesse: suivant la compilation, la vitesse varie du simple au double .J'expliqu ecrire dans un fichier avec assembleur [ par karimusthb ] Bonjour, j'essaye d'ecrire dans un fichier avec assembleur,[MASM] le probleme c que en resultat j'ai un fichier ecrit en caractére ASCII comment faire "MOV WORD, EBX" Comment faire ? [ par Nowid50 ] Bonjour,Je suis débtant en assembleur et après quelques recherches, je ne trouve pas mon bonheur.Mon application requiert que je face l'instruction su Masm32 - adressage direct - soucis ! [ par ouadji ] Bonjour à tous,mov eax , [11223344h]cette instruction existe ! registre de segment utilisé ... DS ... par défaut !Code machine de cette instruction : conversion minuscule [ par safwensafwen ] C'est unprogramme qui fair la conversion en minuscule en utilisant la pile je n'arriv Inversion de chaîne [ par Bidou ] Bonjour à tous,A vrai dire je suis plutôt nouveau en asm et pas très bon lol. Mais bon, faut bien commencer un jour hein. Pour me faire la main, j'ai


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

Téléchargements



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,234 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.