[C + ASM] strchr(const char *s, char c):

Signaler
Messages postés
38
Date d'inscription
mercredi 28 août 2002
Statut
Membre
Dernière intervention
24 janvier 2010
-
Calak
Messages postés
38
Date d'inscription
mercredi 28 août 2002
Statut
Membre
Dernière intervention
24 janvier 2010
-
Voila, j'ai un petit probs...
Je suis en train d'essayer de recoder des fonction de string.h
mais j'ai un probs con (j'en suis sur -_- ) sur le strchr

Il ne trouve jamais le caractère demandé...

Bon, ça fait longtemps que j'ai plus fait d'assembleur, et puis je faisais seulement du 16 bits, mais c'est pas une excuse ^_^;

En fait, c'est assez "urgent" car je me refais une bibliothèques de fonction pour la rentrée scolaire ( demain ), et je bloque...
Ca doit faire bien 2 heures que je me chie sur ce probs -_-

Merci d'avance à tout ceux qui m'aideront :D

unsigned int str_chr(const char *s, int c)
{
__asm {
XOR eax, eax // On met eax à 0
XOR ebx, ebx

MOV ecx,s // On place l'adresse de "s" dans ecx
MOV edx,c

sstr_boucle:
MOV eax, [ecx+ebx]
CMP eax, 0 // Si le caractère pointé est '\0'
JE short sstr_pastrouve // au saute à la fin de la fonction

CMP eax, edx
JZ sstr_fin

INC ebx // et on passe au caractère suivant
JMP short sstr_boucle // puis on recommence la boucle

sstr_pastrouve:
xor eax, eax
sstr_fin:

}
}

5 réponses

Messages postés
706
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
4
unsigned int str_chr(const char *s, int c)
{
__asm {
XOR eax, eax // On met eax à 0
XOR ebx, ebx

MOV ecx,s // On place l'adresse de "s" dans ecx
MOV edx,c

sstr_boucle:
MOV al, byte ptr [ecx+ebx] 
CMP al, 0 // Si le caractère pointé est '\0'
JE short sstr_pastrouve // au saute à la fin de la fonction

CMP al, dl
JE sstr_fin

INC ebx // et on passe au caractère suivant
JMP short sstr_boucle // puis on recommence la boucle

sstr_pastrouve:
xor eax, eax
sstr_fin:

}
} 



voila la au- ca a l'air de marcher...
a+ ;)
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
18
MOV eax, [ecx+ebx] ???
un char c'est 8 bits alors AL et non EAX.

ciao...
BruNews, MVP VC++
Messages postés
706
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
4
MOV eax, [ecx+ebx]
dans eax (registre 32 bits) tu mets 4 caracteres d'un coup, c'est pour ca que ca sera jamais egal à c.

et voila c'etait bete :)
Messages postés
38
Date d'inscription
mercredi 28 août 2002
Statut
Membre
Dernière intervention
24 janvier 2010

*Calak prend son flingue et tir -_-

merci pour vos réponses... je savais que c'était con -_-

je testerai ça tantot en rentrant, là j'ai la rentrée qui m'attend :D
Messages postés
38
Date d'inscription
mercredi 28 août 2002
Statut
Membre
Dernière intervention
24 janvier 2010

bon, je suis incorrigible, j'ai pas pu m'empècher de tester ^^
ça a l'air de marcher /D
merci encore...
Il est temps que les cours recommencent, c'était vraiment une erreur de débutant -_-