Bonjour, j'ai un soucis sur les valeurs négatives avec la fonction ci-dessous.
Le rôle de la fonction est en gros de faire ce que "string compare" fait en C, c'est-à-dire renvoyer un entier égal à 0 si str1 = str2, positif si str str1 < str2 et négatif si str1 > str2.
Cette fonction fonctionne correctement lorsque les chaînes sont équivalentes ou le résultat renvoyez est positif, mais lorsqu'il est négatif, ça renvoie quelque chose comme 65530...
Une idée ?
Voici le code :
Valeurs renvoyées par la fonction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 global mystrcmp mystrcmp: push ebp ; sauvegarde d'EBP mov ebp, esp ; copie d'ESP dans EBP mov esi, [ebp + 8] ; str1 mov edi, [ebp + 12] ; str2 loop: mov al, [esi] ; *str1 mov bl, [edi] ; *str2 sub al, bl ; AL -= BL jne end ; si AL et BL differents > jmp end cmp bl,0 ; si BL = 0 jz end ; donc AL et BL = 0 > jmp end! inc esi inc edi jmp loop end: cbw ; extend al à 16 bits et met le resultat dans ax cwd ; converti la valeur d'AX en 32bits et la met dans EAX mov esp, ebp pop ebp ; restaure EBP ret ; return (EAX)
String compare en ASM :
(a) et (a) return : 0
(c) et (b) return : 1
(b) et (c) return : 65535
String compare en C :
(a) et (a) return : 0
(c) et (b) return : 1
(b) et (c) return : -1
Merci d'avance pour votre aide.
Partager