![]() ![]() ![]() |
Comme vous le savez déjà, la mémoire de n'importe quel système informatique est une succession d'octets,
par conséquent c'est à nous de définir si une certaine portion de mémoire devra être considérée (ou non) comme un tableau à 1, 2 ou même 3 dimensions (je vous conseille de lire le cours sur l'écran, ce dernier étant un tableau à deux dimensions).
Dites-vous bien qu'un tableau n'est rien d'autre qu'une manière subjective (une sorte de vue de l'esprit) de se représenter la mémoire comme vous pourrez vous en rendre compte, par définition un tableau est une suite d'octets, mots ou double mots contigus, c'est à dire qui se suivent.
N'oubliez pas que l'adresse de départ d'un tableau, dont les éléments sont des mots ou double mots, doit être toujours paire, pour en être sûr définissez le avant toute variable de type octet.
Voici un exemple pour vous aider à comprendre ce que je viens de vous dire, considérons que nous allouons 16 octets de mémoire pour créer un tableau à 2 dimensions (par exemple une matrice de 4x4), établissons l'hypothèse selon laquelle nous avons les valeurs $7A 92 2E 10 A3 8B 54 7E 98 A2 5F 22 62 E7 8A 99, mais nous considérons d'une manière subjective que cette mémoire doit s'ordonner de la façon suivante :
$74 | 92 | 2E | 10 |
$A3 | 8B | 54 | 7E |
$98 | A2 | 5F | 22 |
$62 | E7 | 8A | 99 |
$74 | 92 | 2E | 10 | A3 | 8B | 54 | 7E |
$98 | A2 | 5F | 22 | 62 | E7 | 8A | 99 |
![]() ![]() ![]() |
Pour aller plus vite, utilisez la pseudo instruction ds. qui permet de générer un espace mémoire constitué d'un certains nombre d'éléments (de type octet, mot ou double mot), mais remplie de 0 par défaut.
Nous utiliserons, pour le même exemple que précédemment, la pseudo instruction matrice ds.b 16 qui est bien plus satisfaisante :-)
![]() ![]() ![]() |
Créer un bloc mémoire permet donc de créer un espace mémoire d'une taille voulue, mais aussi de le détruire, de le redimensionner… ce qui est très appréciable !
![]() ![]() ![]() |
Si mon tableau constitué de mots commence à l'adresse $0B376C et que je veux le 5ème élément (indice 4), alors l'adresse de cette élément sera $0B376C + 4 * 2 = $0B3774
$7A92 | 2E10 | A38B | 547E | 98A2 | 5F22 | 62E7 | 8A99 |
; pour enregistrer une valeur LEA dimension_un(PC),A0 ; on charge l'adresse du tableau dans A0 MOVE.l #4,D0 ; on veut la 5ème valeur LSL.l #1,D0 ; notre tableau est composé de mots MOVE.w #$3F25,0(A0,D0) ; on enregistre la valeur #$3F25 à 0+A0+D0 ; ligne suivante dans les variables dimension_un dc.w $7A92,2E10,A38B,547E,98A2,5F22,62E7,8A99
; pour lire une valeur LEA dimension_un(PC),A0 ; on charge l'adresse du tableau dans A0 MOVE.l #4,D0 ; on veut la 5ème valeur LSL.l #1,D0 ; ceci est plus rapide que MULU.w #2,D0 MOVE.w 0(A0,D0),D1 ; on enregistre le contenu de la 5ème valeur dans D1 ; ligne suivante dans les variables dimension_un dc.w $7A92,2E10,A38B,547E,98A2,5F22,62E7,8A99
![]() ![]() |
Si mon tableau, qui est une matrice de 8 colonnes sur 2 lignes, constitué de mots, commence à l'adresse $0B376C et que je veux l'élément à la colonne 6 et ligne 1 (indice 8 * 1+6 = 14), alors l'adresse de cette élément sera $0B376C + 14 * 2 = $0B3794
PROGRAMMATION
; pour enregistrer une valeur LEA dimension_un(PC),A0 ; on charge l'adresse du tableau dans A0 MOVE.l #6,D0 ; on veut la 6ème colonne MOVE.l #1,D1 ; on veut la 1ère ligne MULU.w #8,D1 ; il y a 8 éléments par ligne ADD.l D1,D0 ; on ajoute les indices de ligne et colonne LSL.l #1,D0 ; notre tableau est composé de mots ADD.l D0,A0 ; on ajoute l'offset de l'élément MOVE.w #$3F25,0(A0,D0) ; on enregistre la valeur #$3F25 aux coordonnées (8,1) ; ligne suivante dans les variables dimension_un dc.w $7A92,2E10,A38B,547E,98A2,5F22,62E7,8A99
; pour enregistrer une valeur LEA dimension_un(PC),A0 ; on charge l'adresse du tableau dans A0 MOVE.l #6,D0 ; on veut la 6ème colonne MOVE.l #1,D1 ; on veut la 1ère ligne MULU.w #8,D1 ; il y a 8 éléments par ligne ADD.l D1,D0 ; on ajoute les indices de ligne et colonne LSL.l #1,D0 ; notre tableau est composé de mots ADD.l D0,A0 ; on ajoute l'offset de l'élément MOVE.w 0(A0,D0),D2 ; on lit le contenu aux coordonnées (8,1) dans D1 ; ligne suivante dans les variables dimension_un dc.w $7A92,2E10,A38B,547E,98A2,5F22,62E7,8A99
Zguide © 1998 - 1999 par Florian DREVET. Tous droits réservés