Chapitre 9
Structure et données
Jean Privat
Université du Québec à Montréal
INF2170 — Organisation des ordinateurs et assembleur Automne 2013
Plan
1 Données
2 Structures
3 Tas et allocation dynamique
4 Listes
Plan
1 Données
2 Structures
3 Tas et allocation dynamique
4 Listes
Données
Donnés simples
Entier (8 bits, 16 bits Charactères
Pointeurs
Flotants (pas encore) Instructions
Données complexes
Tableaux (dont chaînes de caractères) Tableaux à plusieurs dimentions
Structures (enregistement) Objets (instances de classes)
En assembleur
Principe
Tout n’est que bits
Le sens des tas de bits est la manipulation qui en est faite
Et mes données complexes alors ?
Au programmeur assembleur de se débrouiller
Plan
1 Données
2 Structures
3 Tas et allocation dynamique
4 Listes
Structures
Définiton
Un agrégat de données
Exemples (à peu près) Une structure C
Un tuple de base de donnée Un objet Java (sans méthode)
Structures en assembleur
En mémoire
Les champs en mémoire En séquence
La taille de la structure vaut (au moins) la somme de la taille des éléments
Accès aux champs
On connaît l’adresse mémoire de la structure On connaît la position relative du champ Donc, on somme
Exemple
Structure produit
Un code (entier 16 bits)
Un prix en cents (entier 16 bits)
Un nom (pointeur vers une chaîne de caractère)
Caractéristique
Taille d’un produit : 6 octets Position du code : +0 octets Position du prix : +2 octets
Position de l’adresse de la chaîne : +4 octets
Exemple en Pep/8
Utiliser .EQUATE
p r C o d e : . EQUATE 0 ; #2d Le c o d e p r o d u i t
p r P r i x : . EQUATE 2 ; #2d Le p r i x du p r o d u i t ( en c e n t s ) prNom : . EQUATE 4 ; #2h Le nom du p r o d u i t ( c h a î ne )
Utiliser l’adressage indexé
LDX p r P r i x , i
DECO p r o d u i t , x ; A f f i c h e l e p r i x
Utiliser le débogeur
p r o d u i t : . BLOCK 6 ; #p r C o d e #p r P r i x #prNom
Exercice
Sur les produits
Afficher le prix d’un produit initialisé
Afficher un produit en entier (sous-programme) Initialiser un produit vide
Initialiser un produit interactivement (sous-programme)
Tableaux et structures
Un tableau
Des données concaténées
Un tableau de structures Des structures concaténées Accéder à un champ
C’est de l’arithmétique d’adresse
Plan
1 Données
2 Structures
3 Tas et allocation dynamique
4 Listes
Tas
Définition
Zone mémoire réservée aux allocations dynamiques malloc, new, etc.
Concrètement
C’est dans la mémoire Gérée par le programme
Pas de gestions spécifique de l’UCT
Tas dans les langages de haut niveau
Pas gérée pas le programme Gérée par bibliothèque (C)
Gérée par le compilateur (C++)
Gérée par la machine virtuelle/interpréteur (Java et autres)
Et les détails ?
Cachés au programmeur
Tas en assembleur
Do It Yourself
On se déclare une zone de tas On se fait un sous-programme new
New
Entrée A : nombre d’octets à allouer Sortie X : pointeur vers la zone allouée
Désallocation
Manuelle
On fait un sous-programme free
Une structure permettant de savoir ce qui est libre ou pas
new et free mettent à jour la structure
Automatique (Ramasse-miettes)
Quelque chose fait des free tout seul Les détails quand vous serez plus grands En Pep/8
Exercice
Des tas de produits
Allouer des produits dans le tas Les initialiser
Les afficher
Plan
1 Données
2 Structures
3 Tas et allocation dynamique
4 Listes
Liste
Définition
Des maillons chaînés ensembles
Une structure contenant l’adresse de la structure suivante (voire de la précédente)
Exemple
c l a s s P r o d u i t { i n t c o d e ; i n t p r i x ; S t r i n g nom ; P r o d u i t n e x t ; }
Exercice
Des listes de produits
Allouer et initialiser une liste de produits Les afficher tous mais dans l’ordre inverse Afficher seulement ceux dont le prix est > 10