//Le prototype de cette fonction
int est_dans_tableau(char *tableau, int taille, char c);
//Exemple d'utilisation:
char tab[] = {'n', 'e', 'u', 'e'};
est_dans_tableau(tab, sizeof(tab), 'u'); //Retournera autre chose que 0
est_dans_tableau(tab, sizeof(tab), 'a'); //Retournera 0
extern printf
section .data
tableau db 'dadedidadedavivoufufifamasibifisaz'
oui db 'oui', 10, 0
non db 'non', 10, 0
section .text
global main
est_dans_tableau:
;Insérez votre code ici!!
main:
push ebp
mov ebp, esp
;On va tester si m est présent dans le tableau
push dword 'm'
;La longueur du tableau (ici 34)
push dword 34
;Adresse de chaine dans eax
push tableau
;Appel de est_dans_tableau avec l'adresse du tableau,
;sa taille, et la valeur à chercher
call est_dans_tableau
test eax, eax
jnz est_dedans ;Si eax != 0 alors on affiche oui
push non ;Sinon on affichera non
jmp affichage
;Affichage de la chaine avec printf
est_dedans:
push oui
affichage:
call printf
mov eax, 0
leave
ret
est_dans_tableau: ;On récupère l'adresse du tableau (premier paramètre) dans edi mov edi, [esp + 4] ;On récupère la taille du tableau (second paramètre) dans ecx mov ecx, [esp + 8] ;On récupère le caractère à trouver (troisième paramètre) dans eax mov eax, [esp + 12] ;Recherche du caractère repne scasb ;Si le flag ZERO (ZF) est à 1 c'est qu'on a trouvé le caractère ;Sinon c'est qu'on ne l'a pas trouvé ;Il nous suffit donc de mettre la valeur de ZF dans eax mov eax, 0 ;Si ZF = 1 alors al = 1 (al étant les 8 bits de poid faible d'eax) setz al ret
ZF = 0
ecx = longueur
eax = caractère
edi = tableau
//Boucle qui représente le "repne scasb"
Tant que ecx != 0 ET ZF = 0 Faire
Si al == [edi] Alors
ZF = 1
FinSi
ecx = ecx - 1
edi = edi + 1
FinTantQue
eax = 0
//Condition qui représente le "setz"
Si ZF = 1 Alors
eax = 1
FinSi
Autres Astuces dans la catégorie x86