Tableau en asm
keli1
Messages postés
5
Date d'inscription
Statut
Membre
Dernière intervention
-
kilian Messages postés 8675 Date d'inscription Statut Modérateur Dernière intervention -
kilian Messages postés 8675 Date d'inscription Statut Modérateur Dernière intervention -
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?
7 réponses
-
Salut,
En asm pour quel type de processeur? Mips? x86? Arm? ..... -
j'utilise le tasm dsl le processeur est Intel
-
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.
-
nn je n'ai pas encore commencé je suis débutante pouvez vous au moins me donnez une idée stp
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Tu saurais le faire pour une comparaison de deux tableaux à 1 dimensions?
-
-
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.
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?