ZuperIndex
ZINDEX
ZuperIndex
ZDICO
ZuperIndex
ZUPERINDEX
Tableaux Fonction TI-92 Introduction
Fonction TI-92 Création dans le programme
Fonction TI-92 Création avec un bloc mémoire
Fonction TI-92 Tableau à une dimension
Fonction TI-92 Tableau à deux dimensions Barre

Page précédente

Monter Descendre Retour Introduction

puce Cette page explique comment créer et surtout utiliser des tableaux en assembleur.

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

puce 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 :

$74922E10
$A38B547E
$98A25F22
$62E78A99

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 :

$74922E10A38B547E
$98A25F2262E78A99

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

Barre



Monter Descendre Retour Création dans le programme

puce Vous connaissez déjà la pseudo instruction dc. 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 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 :-)


Barre



Monter Descendre Retour Création avec un bloc mémoire

puce En utilisant un bloc mémoire, vous pouvez créer un tableau sans que cela prenne de place dans le programme. Il faudra juste vérifier s'il y assez de RAM disponible pour créer le bloc mémoire.

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 !


Barre



Monter Descendre Retour Tableau à une dimension

puce Pour accéder à un élément du tableau, en sachant que le premier possède l'indice 0 (situé à l'intersection des colonne 0 et ligne 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 tableau> + <indice valeur> * <taille>

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

$7A922E10A38B547E98A25F2262E78A99

PROGRAMMATION
					; 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

PROGRAMMATION
					; 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

Barre



Monter Retour Tableau à deux dimensions

puce Pour accéder à un élément du tableau, en sachant que le premier en haut à gauche possède l'indice 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 tableau> + <indice ligne * nombre élément par ligne> + <indice colonne>

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

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		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


Barre



 

 

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

Zguide © 1998 - 1999 par Florian DREVET. Tous droits réservés