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 :
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 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
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 !!
Partager