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