Tableau en asm

keli1 Messages postés 20 Statut Membre -  
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?
A voir également:

7 réponses

kilian Messages postés 8854 Statut Modérateur 1 526
 
Salut,

En asm pour quel type de processeur? Mips? x86? Arm? .....
0
keli1 Messages postés 20 Statut Membre
 
j'utilise le tasm dsl le processeur est Intel
0
kilian Messages postés 8854 Statut Modérateur 1 526
 
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 20 Statut Membre
 
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 8854 Statut Modérateur 1 526
 
Tu saurais le faire pour une comparaison de deux tableaux à 1 dimensions?
0
keli1 Messages postés 20 Statut Membre
 
nn
0
kilian Messages postés 8854 Statut Modérateur 1 526
 
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