Tableau en asm
keli1
Messages postés
20
Statut
Membre
-
kilian Messages postés 8854 Statut Modérateur -
kilian Messages postés 8854 Statut Modérateur -
Bonjour,
comment faire pour comparer deux tableaux de chaines de caracteres l'un de deux dimensions et l'autre d'une dimension(ligne par ligne pour le tableau de 2 dimension)et s'il ya égalité on affiche l'indice de la ligne?
comment faire pour comparer deux tableaux de chaines de caracteres l'un de deux dimensions et l'autre d'une dimension(ligne par ligne pour le tableau de 2 dimension)et s'il ya égalité on affiche l'indice de la ligne?
A voir également:
- Tableau en asm
- Tableau word - Guide
- Tableau ascii - Guide
- Trier un tableau excel - Guide
- Imprimer un tableau excel - Guide
- Tableau croisé dynamique - Guide
7 réponses
Je ne connais pas la syntaxe de tasm mais si tu as déjà fait quelque chose je peux y jeter un coup d'oeil.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Pour comparer deux chaines voilà un exemple.
Dans esi on a le pointeur vers la première chaine et dans edi le pointeur vers la deuxième.
Donc ça c'est pour des chaines sous forme de tableau à une dimension.
Maintenant pour un tableau en deux dimensions ce n'est pas beaucoup plus différent.
Il suffit d'utiliser le code du dessus, mais charger dans esi le tableau à une dimension et dans edi une ligne du tableau à deux dimensions.
Si ton tableau est de taille n * m, si tu veux te rendre à tab[x][y], l'emplacement se trouve à tab + (x * y) + y.
En fait tab[x] est un tableau à une dimension. A l'adresse de tab[x], qui est tab + (x * y), tu as un tableau de 1 dimension de taille y. Une ligne quoi.
Donc si par exemple tu as le tableau à une dimension
src[8]
et le tableau à deux dimensions dst[3][8]
Il faut que tu appelles "compare" 3 fois en chargeant l'adresse de src dans le registre esi, et dst[0] dans edi la première fois, dst[1] dans edi la deuxième fois, et dst[2] la troisième.
Hm?
Dans esi on a le pointeur vers la première chaine et dans edi le pointeur vers la deuxième.
compare:
; charge caractères en cours
mov eax, [esi]
mov ebx, [edi]
; compare caractère en cours
cmp eax, ebx
; inégaux, alors saute vers le label "inegal" (à implémenter)
jnz inegal
; les caractères sont égaux
; fin de chaine?
cmp eax, 0
; alors on termine et on saute vers le label "egal" (à implémenter)
jz egal
; jusau'ici les chaines sont égales. On pointe vers leur prochain caractère
inc esi
inc edi
jmp compare
Donc ça c'est pour des chaines sous forme de tableau à une dimension.
Maintenant pour un tableau en deux dimensions ce n'est pas beaucoup plus différent.
Il suffit d'utiliser le code du dessus, mais charger dans esi le tableau à une dimension et dans edi une ligne du tableau à deux dimensions.
Si ton tableau est de taille n * m, si tu veux te rendre à tab[x][y], l'emplacement se trouve à tab + (x * y) + y.
En fait tab[x] est un tableau à une dimension. A l'adresse de tab[x], qui est tab + (x * y), tu as un tableau de 1 dimension de taille y. Une ligne quoi.
Donc si par exemple tu as le tableau à une dimension
src[8]
et le tableau à deux dimensions dst[3][8]
Il faut que tu appelles "compare" 3 fois en chargeant l'adresse de src dans le registre esi, et dst[0] dans edi la première fois, dst[1] dans edi la deuxième fois, et dst[2] la troisième.
Hm?