Tableau en asm

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

  1. Modérateur
    Salut,

    En asm pour quel type de processeur? Mips? x86? Arm? .....
    1. Modérateur
      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.
      1. nn je n'ai pas encore commencé je suis débutante pouvez vous au moins me donnez une idée stp
        1. Modérateur
          Tu saurais le faire pour une comparaison de deux tableaux à 1 dimensions?
          1. Modérateur
            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?