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   -
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. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
     
    Salut,

    En asm pour quel type de processeur? Mips? x86? Arm? .....
    0
  2. keli1 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
     
    j'utilise le tasm dsl le processeur est Intel
    0
  3. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   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
  4. keli1 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
     
    nn je n'ai pas encore commencé je suis débutante pouvez vous au moins me donnez une idée stp
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
     
    Tu saurais le faire pour une comparaison de deux tableaux à 1 dimensions?
    0
  7. keli1 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
     
    nn
    0
  8. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   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