begin process at 2012 05 25 10:24:46
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Assembleur

 > 

Archives

 > 

Newbii

 > 

strrev


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

strrev

samedi 7 août 2004 à 17:46:12 | strrev

vecchio56

Administrateur CodeS-SourceS
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
samedi 7 août 2004 à 19:05:29 | Re : strrev

AlexMAN

Membre Club
A koi te servent les push edx et pop edx, tu ne ten sers pas ! jme trompe ?
Ca faisait un moment kon tavait pas vu, jvois ke ta taffé le boukin d'asm..

++
samedi 7 août 2004 à 19:30:22 | Re : strrev

vecchio56

Administrateur CodeS-SourceS
Oui je crois que tu te tompes: j'utilise dl
samedi 7 août 2004 à 20:21:40 | Re : strrev

BruNews

Administrateur CodeS-SourceS
En voila une autre forme.


__inline char* strrevASM(char *dst, char *src)
{
__asm {
mov eax, dst
mov ecx, src
push eax
xor edx, edx
dec eax
LcpyLoop:
mov dl, [ecx]
inc eax
inc ecx
mov [eax], dl
or dl, dl
jz short LcpyOut
mov dl, [ecx]
inc eax
inc ecx
mov [eax], dl
or dl, dl
jz short LcpyOut
mov dl, [ecx]
inc eax
inc ecx
mov [eax], dl
or dl, dl
jnz short LcpyLoop
LcpyOut:
pop edx ; *dst
dec eax
xor ecx, ecx
strrv:
cmp edx, eax
mov cl, [eax]
mov ch, [edx]
jae short revOut
mov [edx], cl
mov [eax], ch
inc edx
dec eax
jmp short strrv
revOut:
}
}

ATTENTION, je n'ai pas assure le pointeur en retour, sur quoi ?
Tu passes les pointeurs, donc tu les as deja, retour me semble inutile.

ciao...
BruNews, Admin CS, MVP Visual C++
samedi 7 août 2004 à 20:45:03 | Re : strrev

vecchio56

Administrateur CodeS-SourceS
Tiens je remarque que tu écris 3 fois la même chose alors qu'une seule suffirait. C'est vrai que ca a l'air plus rapide, mais je ne comprends pas pourquoi (j'ai vu que tu avais fait pareil dans ta fonction bnstrcpy)
samedi 7 août 2004 à 20:48:42 | Re : strrev

BruNews

Administrateur CodeS-SourceS
deroulage de boucle, vaut mieux effectuer un saut de code 1 fois plutot que 3.
Gaffe le reverse en bas n'est pas terrible, tape a la sauvage va vite. Affecter sur cl puis sur ch en instruction suivante provoque un AGI STALL a tout coup.

ciao...
BruNews, Admin CS, MVP Visual C++
samedi 7 août 2004 à 21:00:39 | Re : strrev

vecchio56

Administrateur CodeS-SourceS
un AGI STALL??
samedi 7 août 2004 à 21:05:16 | Re : strrev

BruNews

Administrateur CodeS-SourceS
cycles de penalite dus a une mauvaise suite des instruction.
Terminologie des manuels Intel.

ciao...
BruNews, Admin CS, MVP Visual C++


Cette discussion est classée dans : code, mov, char, strrev, dl


Répondre à ce message

Sujets en rapport avec ce message

c/c++ et 19h [ par Xs ] salut !je travaille sous VC++ et j'aimerais utiliser une interuption processeur : 19hmon code actuel marche mais au lieu d'eteindre le PC, il le fait Mov mem immediat, immediat [ par Erkson ] Bonjour à tous.J'utilise un Pentium II PC, Windows ME, et un debuggeur qui a un assembleur intégré. Lorsque je veux modifier le programme que je debug Peut on comparer deux binaire avec cmp ? [ par MrNice ] Lo le forum me revoila ave cun new prob...donc en fait g une table de variable, je prends al=0 je fait un xlat et je compare ce resultat avec une entr Conversion hexa vers ascii [ par Cygace ] Bonjour voici un code asm qui convertit un nombre binaire vers de l'ascii. Mais je dois modifiier ce code pour qu'il convertisse de l'hexadecimal vers Question de débutant [ par Laurent1313 ] Voilà je débute avec l'assembleur sous Delphi et il y a un truc que je ne comprends pas. Je voudrais juste savoir quelle est la différence entre :ça : Adresse mémoire d'une chaine [ par moffer ] Bonjour,Je veux pointer sur le premier caractère de ma chaine. Lorsque je compile le code suivant :SEGMENT DATAchaine db 'Hello$'SEGMENT TEX rs232 [ par TRAX44 ] salut,tout premièrement je sais qu'il ya des exemples sur le site!mais mon problème est autre je tiens à comprendre pourquoi mon code ne fonctionne pa pb affichage console [ par mat74 ] voila je cherche a faire un prog qui affiche 0 ou 1 en fonction de la valeur de ax . et le teste est ds une procedure . mais il y a un pb le prog n'af Recuperer le mode Video [ par FearBlue ] Slt a tous !!!!!!!Je souhaite recupérer le mode video g lus dans une doc ca :Cette fonction retourne le numéro de code du mode vidéo en cours et tient Pb registre DL [ par AlexMAN ] Bonjour, J'ai un ptit pb avec le code qui suit, au nivo du mov dl, [ecx] ://Renvoie pointeur sur fin de chaine (permet d'eviter l'utilisation de strca


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
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 : 1,576 sec (3)

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