Tableau en asm

Fermé
keli1 Messages postés 18 Date d'inscription mercredi 26 janvier 2011 Statut Membre Dernière intervention 17 février 2011 - 27 janv. 2011 à 14:31
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 - 27 janv. 2011 à 23:54
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?

7 réponses

kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
27 janv. 2011 à 20:07
Salut,

En asm pour quel type de processeur? Mips? x86? Arm? .....
0
keli1 Messages postés 18 Date d'inscription mercredi 26 janvier 2011 Statut Membre Dernière intervention 17 février 2011
27 janv. 2011 à 20:14
j'utilise le tasm dsl le processeur est Intel
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
27 janv. 2011 à 20:52
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.
0
keli1 Messages postés 18 Date d'inscription mercredi 26 janvier 2011 Statut Membre Dernière intervention 17 février 2011
27 janv. 2011 à 22:04
nn je n'ai pas encore commencé je suis débutante pouvez vous au moins me donnez une idée stp
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
27 janv. 2011 à 22:13
Tu saurais le faire pour une comparaison de deux tableaux à 1 dimensions?
0
keli1 Messages postés 18 Date d'inscription mercredi 26 janvier 2011 Statut Membre Dernière intervention 17 février 2011
27 janv. 2011 à 22:17
nn
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
27 janv. 2011 à 23:54
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?
0