Tableau en asm [Fermé]

Messages postés
18
Date d'inscription
mercredi 26 janvier 2011
Statut
Membre
Dernière intervention
17 février 2011
- - Dernière réponse : kilian
Messages postés
8896
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?
Afficher la suite 

7 réponses

Messages postés
8896
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1369
0
Merci
Salut,

En asm pour quel type de processeur? Mips? x86? Arm? .....
Messages postés
18
Date d'inscription
mercredi 26 janvier 2011
Statut
Membre
Dernière intervention
17 février 2011
0
Merci
j'utilise le tasm dsl le processeur est Intel
Messages postés
8896
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1369
0
Merci
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.
Messages postés
18
Date d'inscription
mercredi 26 janvier 2011
Statut
Membre
Dernière intervention
17 février 2011
0
Merci
nn je n'ai pas encore commencé je suis débutante pouvez vous au moins me donnez une idée stp
Messages postés
8896
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1369
0
Merci
Tu saurais le faire pour une comparaison de deux tableaux à 1 dimensions?
Messages postés
18
Date d'inscription
mercredi 26 janvier 2011
Statut
Membre
Dernière intervention
17 février 2011
0
Merci
nn
Messages postés
8896
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1369
0
Merci
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?