begin process at 2012 02 09 04:53:04
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Assembleur

 > 

Archives

 > 

c, c++ et asm

 > 

inverser une chaine


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

inverser une chaine

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ée 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 nombre premier en nasm [ par YAWLY ] MED.MERZOUG salut tout le monde vous pouvez m'aider si j le compile sa affiche chaque fois le nbr est non premeir > le code est : Section .date ch un énorme travail de votre part [ par mana ] bonjour, voici un programme écrit en c++ (il permet de passer d'une image en couleur 24bits(ARGB) a une image en 256 niveaux de gris(toujours sur 24bi tasm [ par yosrasouaifi ] DOSSEG ;Modele de segmentation DOS .MODEL SMALL ;Fixe le modele de segmentation :petit modele .STACK 100h .DATA mes out bmp [ par vincent2795 ] Bonjour, dans ma source, j' essaye de faire un screenshot, et de le nommer pas la date et l' heure ou il es pris. mon problème: si le nom du fichier e conversion en syntaxe intel [ par marooh ] bonjour, j'ai un code écrit en syntaxe at&t et je veux le rendre en syntaxe intel.si vous pouvez bien m'aider... voici le code Project title : m Proj


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,655 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales