TABLEAUX Fonction Introduction
Fonction Création dans le programme
Fonction Création avec un bloc mémoire
Fonction Tableau à une dimension
Fonction Tableau à deux dimensions

Page précédente



 

Monter Descendre Retour Introduction
puce Cette page explique comment créer et surtout utiliser des tableaux en assembleur.
Un tableau est un manière subjective de représenter la mémoire comme vous pourrez vous en rendre compte...

puce N'oubliez surtout pas que l'adresse de départ d'une table doit être toujours paire (vous aurez ADDRESS ERROR avec l'utilisation de mots et doubles mots !), pour en être sûr, définissez la avant toute variable de type octet.

puce Comme vous le savez déjà, la mémoire de n'importe quel sytème informatique est une succession d'octets, par conséquent c'est nous qui définnissons à tout moment si une certaine portion de mémoire devra être considéré comme un tableau à 1, 2 ou même 3 dimensions (je vous conseille de lire le cours sur l'écran, qui est une matrice).

puce Voici un exemple pour vous aider à comprendre ce que je viens de dire, considérons que nous allouons 16 octets de mémoire pour créer un tableau à 2 dimensions (par exemple une matrice de 4x4), en mémoire nous aurons peut être $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 :
$74922E10
$A38B547E
$98A25F22
$62E78A99

puce Et maintenant, considérons que nous voulons une matrice de 8x2, c'est à dire toujours composée de 16 octets, en mémoire nous avons toujours $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 :
$74922E10$A38B547E
$98A25F22$62E78A99

puce Pour créer des tableaux, vous pouvez utiliser de l'espace mémoire directement dans votre programme (celui-ci n'en sera que plus important !) ou utiliser des blocs mémoire.





 

Monter Descendre Retour Création dans le programme
puce Vous connaissez déjà la syntaxe dc.<taille> <valeur(s)> qui permet de créer un espace mémoire, de cette façon vous pouvez créer un tableau mais écrire par exemple matrice dc.b $0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 n'est pas des plus rapide...

puce Pour aller plus vite, utilisez la syntaxe ds.<taille> <taille tableau> qui permet de créer un espace mémoire plus ou moins grand, seulement constitué de 0.





 

Monter Descendre Retour Création avec un bloc mémoire
puce Une façon très simple pour créer un tableau sans que cela prenne de la place dans le programme (d'une façon permanente) est d'utiliser un bloc mémoire.

puce 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 redimmensionner....





 

Monter Descendre Retour Tableau à une dimension
puce Pour accéder à une donnée, en sachant que la première porte le numéro 0, il suffit d'additionner à l'adresse de départ du tableau le résultat de la multiplication du numéro de la valeur voulue par la taille des valeurs du tableau.
<adresse valeur>=<adresse table>+<numéro valeur>*<taille>

PROGRAMMATION
; pour enregistrer une valeur
LEA dimension_un(PC),A0 ; on charge l'adresse de la table dans A0
MOVE.l #4,D0 ; on veut la 5ème valeur
LSR #1,D0 ; on multiplie par 2^1=2 (mot), ceci est plus rapide que MULU #2,D0
MOVE.w #$3F25,0(A0,D0) ;on enregistre la valeur $3F25 à 0+A0+D0
; dans les variables dimension_un dc.w $7A92,2E10,A38B,547E,98A2,5F22,62E7,8A99

PROGRAMMATION
; pour lire une valeur
LEA dimension_un(PC),A0 ; on charge l'adresse de la table dans A0
MOVE.l #4,D0 ; on veut la 5ème valeur
LSR #1,D0 ; on multiplie par 2^1=2 (mot), ceci est plus rapide que MULU #2,D0
MOVE.w 0(A0,D0),D1 ;on enregistre le contenu de la 5ème valeur dans D1
; dans les variables dimension_un dc.w $7A92,2E10,A38B,547E,98A2,5F22,62E7,8A99





 

Monter Retour Tableau à deux dimensions
puce Pour accéder à une donnée, en sachant que la première en haut à gauche porte le numéro 0, il suffit d'additionner à l'adresse de départ du tableau le résultat de la multiplication du numéro de la valeur voulue par la taille des valeurs du tableau. <adresse valeur>=<adresse table>+<numéro valeur x>*<taille>+<numéro valeur y>*<taille>*<nombre de valeur en x>

PROGRAMMATION
; pour enregistrer une valeur
; nous considérons que la matrice est constitué de 4 colonnes et 2 lignes
LEA dimension_deux(PC),A0 ; on charge l'adresse de la table dans A0
MOVE.l #2,D0 ; on veut la valeur sur la 3ème colonne...
MOVE.l #1,D1 ;... on veut la valeur sur la 2ème ligne
MULU #8,D1 ; on multiplie y par le nombre d'éléments en x (ici 4*2 octets)
ADD D1,A0 ; on saute du nombre de ligne voulu
MOVE.w $3F25,0(A0,D0) ; on enregistre la valeur $3F25 aux coordonnées (3,2)
; dans les variables
dimension_deux dc.w $7A92,2E10,A38B,547E,98A2,5F22,62E7,8A99

PROGRAMMATION
; pour lire une valeur
; nous considérons que la matrice est constitué de 4 colonnes et 2 lignes
LEA dimension_deux(PC),A0 ; on charge l'adresse de la table dans A0
MOVE.l #2,D0 ; on veut la valeur sur la 3ème colonne...
MOVE.l #1,D1 ;... on veut la valeur sur la 2ème ligne
MULU #8,D1 ; on multiplie y par le nombre d'éléments en x (ici 4*2 octets)
ADD D1,A0 ; on saute du nombre de ligne voulu
MOVE.w 0(A0,D0),D2 ; on enregistre le contenu de la valeur (3,2) dans D2
; dans les variables
dimension_deux dc.w $7A92,2E10,A38B,547E,98A2,5F22,62E7,8A99





 

 

Lisez la section sur les droits d'auteur et la license d'utilisation avant de distribuer Zguide.

Zguide © 1998, Florian DREVET. Tous droits réservés à l'échelle mondiale