[MASM32][Débutant] Coder un strlen
Bonjour à tous,
Je suis débutant dans ce langage.
Je ne saisis pas tout xD, je ne vois pas à quoi servent les registres, comment traiter des chaînes de caractères genre strlen en asm.
J'ai essayé de faire strlen, donc la chaîne se termine par 0 comme en C, mais faut-il que je declare un int comme compteur ou je dois-je utiliser un registre, registre compteur => ECX, et je peux traiter ma chaîne directement avec szString ? Ou je dois la copier dans un registre ?
Voilà le code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| .386
.model flat,stdcall
option casemap:none
;include \masm32\include\windows.inc
;include \masm32\include\user32.inc
;include \masm32\include\kernel32.inc
;includelib \masm32\lib\user32.lib
;includelib \masm32\lib\kernel32.lib
.data
szString db "toto",0
.code
start:
push ebp ; Declaration ebp
mov ebp, esp ; Copie esp dans ebp
mov esi, szString ; Recupere l'argv0 et le Copie ebp+8 dans esi
mov ecx, 0 ; Copie 0 dans ecx
boucle:
mov al, [esi] ; Copie valeur de esi dans al
cmp al, 0 ; Compare 0 a al
je fin ; Jump if Equal a fin
add ecx, 1 ; ecx = ecx + 1
add esi, 1 ; esi = esi + 1
jmp boucle ; Saut inconditionnel au label
fin:
mov eax, ecx ; Copie ecx dans eax
mov esp, ebp ; restor esp
pop ebp ; Supprime ebp
ret
end start |
Merci pour votre aide