Bonsoir, j'aimerais réalisé un strlen en ASM et pouvoir affiché ce résultat à l'écran. Il s'agit donc d'un nombre.

Voici la fonction strlen en asm :

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
strlen:
	push ebp
	mov ebp,esp
 
	xor	ecx, ecx
	mov	edi, [ebp+8]
	not	ecx
	xor eax, eax
	cld
	repne	scasb
	not	ecx
	lea	eax, [ecx-1]
 
	mov esp, ebp
	pop ebp
	ret
J'ai essayé de réaliser cette fonction également d'une autre manière, moins efficace, mais plus compréhensible :

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
_start:
mov esi, chaine
xor ecx, ecx
strlen:
mov eax, [esi]
cmp eax, 0x0
je success
inc ecx
inc esi
jmp strlen
 
....
.....
 
.data
chaine    db    "machin",0x0

Le problème est ici : cmp eax, 0x0. Je pensais que le dernier caractère de la chaine serait 0x0 or en debuguant eax ne vaut jamais 0 :S. Comment faire pour savoir quand la chaine se termine et sortir de la boucle ?


Lorsque ce problème est résolu, ecx contient la longueur de la chaine, Comment ferais-je pour afficher "La longueur de %s est %d !\n",chaine,longueur ?

Merci pour votre aide !!