begin process at 2012 02 07 10:20:49
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Assembleur

 > 

Processeurs

 > 

X86

 > 

[ASM] Strcmp, prob evec la valeur de retour.


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

[ASM] Strcmp, prob evec la valeur de retour.

dimanche 26 avril 2009 à 14:49:45 | [ASM] Strcmp, prob evec la valeur de retour.

Ilsundal

Bonjour a tous, j'ai réaliser la fonction strlen en ASM x86. tout fonctionne parfaitement sauf pour la valeur de retour, je souhaiterait qu'elle corresponde a la différence des 2 caractères qui changent.   ex ( strcmp("coucou", "coutou") renvoie  -17   (man ascii pour les valeurs)).


voici deja mon code.

si quelq'un a une idee de comment faire, merci, jai tester plusieur truc sans success. merci d'avance !

===== STRLEN ASM =====
global  strcmp

strcmp:
        push    ebp
        mov     ebp,            esp

        push    edi
        push    esi
        push    ecx

        mov     edi,            [ebp + 8]       ; ARGU. 1 DANS EDI (CHAR * DESTINATION)
        mov     esi,            [ebp + 12]      ; ARGU. 2 DANS ESI (CHAR * SOURCE)
        mov     ecx,            0               ; COMPTEUR

_loop:
        mov     al,             [esi + ecx]     ; MOVE DANS BON REGISTRE POUR LES TEST
        mov     ah,             [edi + ecx]     ; MOVE DANS BON REGISTRE POUR LES TEST


        cmp     ah,             al              ; COMPARE EDI ET ESI : Whouhouuu !
        jl      _not                            ; SI INFERIEUR
        jg      _not_sup                        ; SI SUPERIEUR

        cmp     al,             0               ; TEST FIN DE CHAINE POUR ESI
        je     _end                             ; ALORS SE BARRER
        cmp     ah,             0               ; TEST FIN DE CHAINE POUR EDI
        je      _end                            ; ALORS SE CASSER

        inc     ecx                             ; INCREMENT ECX
        jmp     _loop                           ; SINON ON REFAIT UN TOUR DE MANEGE

_not:
        mov     eax,            -1               ; PARAM DE RETOUR

        pop     ecx
        pop     esi
        pop     edi

        leave
        ret

_not_sup:
        mov     eax,            1               ; PARAM DE RETOUR

        pop     ecx
        pop     esi
        pop     edi

        leave
        ret

_end:
        mov     eax,            0               ; PARAM DE RETOUR

        pop     ecx
        pop     esi
        pop     edi

        leave
        ret

____________________
Ma Quete n'est pas Terminee
dimanche 26 avril 2009 à 16:36:11 | Re : [ASM] Strcmp, prob evec la valeur de retour.

ToutEnMasm

Il faut deja savoir ce que l'on veut faire.Les fonctions de traitement de chaines sont légions,j'ai les miennes.
Strlen renvoie une longueur.
Strcmp compare deux chaines.
Trim coupe les espaces tab......
Il faut déja savoir quel résultat on veut,après l'écriture n'est pas difficile.
dimanche 26 avril 2009 à 17:27:48 | Re : [ASM] Strcmp, prob evec la valeur de retour.

Ilsundal

mille excuse, c'est bien strcmp que je veux, je me suis trpomper en tqpqn t le header

____________________
Ma Quete n'est pas Terminee
dimanche 26 avril 2009 à 23:05:47 | Re : [ASM] Strcmp, prob evec la valeur de retour.

BruNews

Administrateur CodeS-SourceS

Je t'ai deja donné strcmp() ici il y a qlqs jours:
http://www.asmfr.com/forum.v2.aspx?ID=1300200

r = strcmp(s1, s2);
SI r == 0 ALORS s1 = s2
SI r < 0 ALORS s1 < s2
SI r > 0 ALORS s1 > s2
Tourne précisément comme strcmp() du C.

On veut bien aider gratos mais faudrait tout de même voir à lire les réponses, on aura moins l'impression de perdre notre temps.

strlen est encore plus trivial.
Pour avoir des perfs, faut surtout pas en faire une fonction mais mettre le code là où on en a besoin (inline).
admettons adresse chaine en EDX:
lea eax, [edx - 1]
goLEN:
  add eax, 1
  cmp byte ptr[eax], 0
  jne short goLEN ; BOUCLE PLUS COURTE, TU MEURS
sub eax, edx
C'est fini, EAX contient strlen(edx)

ciao...
BruNews, MVP VC++



Cette discussion est classée dans : pop, mov, edi, esi, ecx


Répondre à ce message

Sujets en rapport avec ce message

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 mon code ne marche pas [ par mohoguess ] Bonjour a tous,je suis débutant en asembleur, et j'ai écrit un code qui sert a additionner le chiffre 1 jusqu'à 999999 fois (mon code ne sert à rien j Program received signal SIGFPE,Arithmetic exception. [ par petitete ] Bonjour!! J'aimerais solliciter votre aide pour me débloquer. Je dois écrire un programme en nasm pour connaître le nombre d'éléments pairs et impairs assembleur [ par rojbeni ] bonjour tous,comment  faire pour  saisie une suite de nombre  a stocker  dans un tableau   . le nombre maximum de nombre que l'on peut saisir est de 1 aide pour code [ par marooh ] Bonjour, j'ai un code assembleur qui permet de trouver le maximum d'un tableau.En le compilant, la premiere phase passe avec succès mais en créant l 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], addition d'entier [ par rhumsek ] bonjourvoici un programme qui doit additionné les nombres d'un tableau, celui doit afficher comme résultat 1500 mais il affiche 1600, pouvez vous m'ai Parcours tableau de HWND [ par AlexMAN ] Bonjour, Voila mon pb : Je declare un tableau de HWND comme suit :hwndCmd HWND 10 dup (?)Ensuite, je veux créer 10 boutons et stocker leur handle ds c 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 mon programme bloque [ par rhumsek ] slt j'ai améliore mon programme mais il provoque une erreure lorsdu calcul de la somme des entiers saisi (sommeentier)POURTANT il exécute bien les de


Nos sponsors


Sondage...

Comparez les prix

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

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