Un tableau de dimension en assembleur

chimo -  
 chimo -
Bonjour,
slvp ....comment on peut faire un tableau de deux dimension en assembleur
par exemple de taille N*N et mercii d'avance !

1 réponse

  1. Utilisateur anonyme
     
    Salut, bah c'est assez simple en termes techniques, il n'existe qu'un type de tableau: 1D.

    C'est dans la manière d'utiliser les indices/offset depuis l'adresse de l'array qui fait quel type de tableau c'est.

    Ex: (tableau 2D ; equation 2D -> 1D = (y * max_x) + x)
    https://pastebin.com/xKMWFLTP

    Basic asm standard: reg(lowercase) instruction(lowercase) -> instruction dest, src
    (\___/)
    (='.'=)
    (")_(")
    This is Bunny. Copy and paste bunny into
    your signature to help him gain world domination
    0
    1. chimo
       
      le problème qu'on n'a pas étudié encore cela on est au premier pas vers l'assembleur et ils nous ont demandé de faire un exercice avec un tableau de deux dimension ! N*N
      0
    2. Utilisateur anonyme
       
      C'est juste une équation mathématique qui crée une équation pour un tableau 1D servant à traduire un array ND en 1D, car la ram n'a que des adresses placées de façon linéaire.

      Si N Dimensions
      Alors N éléments qui sont liés à chacune des dimensions

      1D: tab[a]
      2D: tab[(b * max_a) + a]
      3D: tab[(c * max_a * max_b) + (b * max_a) + a]
      4D: tab[(d * max_a * max_b * max_c) + (c * max_a * max_b) + (b * max_a) + a]
      5D: tab[(e * max_a * max_b * max_c * max_d) + (d * max_a * max_b * max_c) + (c * max_a * max_b) + (b * max_a) + a]
      ...

      En somme quand on a un tableau à dimension <= 2D, on n'a qu'un seul plan et donc on ne sélectionne que le point dans cet unique plan.

      Quand >= 3D, on a plusieurs plans, donc on fait appel à des multiplications pour sélectionner le plan avant de sélectionner le point dans le plan choisi.

      :D j'avoue c'est chiant les maths ^^

      Bon il va sans dire que je n'ai pas vérifié les équations à partir de 3D (pour faire de la 3D dans les jeux vidéo, on fait de la projection dans un tableau 2D), mais si on prend la logique des suites numérique, alors ça devrait être correct.
      0
    3. Utilisateur anonyme
       
      Bon comme je ne peux plus remodifier mon message -_-

      Mise-à-jour de:

      En somme quand on a un tableau à dimension <= 2D, on n'a qu'un seul plan et donc on ne sélectionne que le point dans cet unique plan.

      Quand >= 3D, on a plusieurs plans, donc on fait appel à des multiplications pour sélectionner le plan avant de sélectionner le point dans le plan choisi.

      (En 2D, on as effectivement 2 plans, ligne et colonne ^^)

      En:
      - En somme on sélectionne le plan par la multiplication de l'indice (autre que a) du plan en cours par la dimension des précédents plans et l'ajout à d'autres, pour combiner des plans entre eux.

      Puis on sélectionne le point dans le plan choisi, par l'addition de l'indice final: a.

      Bon je doute que cette explication soit complète et un peu floue, mais bon, l'idée de départ est là ^^
      0
    4. Utilisateur anonyme
       
      Bon je m'aperçois que j'ai fait une petite erreur par contre, car en asm, +1 en mémoire signifie +1 octet et non dépendant du type de la variable.

      Donc cela donne: https://pastebin.com/2at7aYAR
      0
    5. ElementW Messages postés 5690 Statut Contributeur 1 293 > Utilisateur anonyme
       
      la ram n'a que des adresses placées de façon linéaire
      Physiquement oui, virtuellement non: on peut faire de la magie noire avec les pages mémoires et le MMU.
      0