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