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

Messages postés
38
Date d'inscription
mercredi 28 août 2002
Statut
Membre
Dernière intervention
24 janvier 2010
- - Dernière réponse : Calak
Messages postés
38
Date d'inscription
mercredi 28 août 2002
Statut
Membre
Dernière intervention
24 janvier 2010
- 15 sept. 2004 à 07:58
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:

}
}
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
706
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
4
1
Merci
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+ ;)

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 6008 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cosmobob
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
13
0
Merci
MOV eax, [ecx+ebx] ???
un char c'est 8 bits alors AL et non EAX.

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
Messages postés
706
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
4
0
Merci
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 :)
Commenter la réponse de cosmobob
Messages postés
38
Date d'inscription
mercredi 28 août 2002
Statut
Membre
Dernière intervention
24 janvier 2010
0
Merci
*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
Commenter la réponse de Calak
Messages postés
38
Date d'inscription
mercredi 28 août 2002
Statut
Membre
Dernière intervention
24 janvier 2010
0
Merci
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 -_-
Commenter la réponse de Calak