Un tableau de dimension en assembleur

Fermé
chimo - 30 juin 2015 à 21:35
 chimo - 10 juil. 2015 à 03:14
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

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
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
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
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
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
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228 > Utilisateur anonyme
1 juil. 2015 à 10:58
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