Chapitre 3

publicité
1
CHAPITRE 3
L’accès aux données
2
Les mémoires
• Toute information est représentée sous forme binaire
• Un prix, un texte légal, une image, du son, etc.
• Transformée en binaire, on l’appelle des données.
• Pour utiliser les données stockées en mémoire secondaire
(disque, ruban, etc.) elles doivent passer par le bus
• C’est le goulot d’étranglement
• Afin d’assurer un accès rapide, on utilise plusieurs unités
de stockage.
3
Les mémoires
• Registre
• Plus rapide, plus couteux, plus petit
• Mémoire cache
• Jusqu’à dix fois plus rapides que la mémoire principale, plusieurs
niveaux
• Mémoire centrale (RAM, ROM, VRAM)
• Plus volatile
• Disque et ruban (disque/SSD/CD, DVD, …)
• Permet de garder des données sur une plus longue période
• Coût très faible, très grande capacité, très lent
• Dois transiter par la mémoire centrale pour être utilisée
4
Les données
• Chaque cellule de mémoire peut contenir une donnée
binaire
• Entier
• Nombre virgule flottante
• Caractères
• Bits et chaînes de bits
• Adresses
• L’interprétation est laissée au programme qui l’utilise.
5
Les adresses
• Chaque cellule de mémoire est désignée par une adresse.
• Entier binaire de longueur « n »  2𝑛 cellules  0 à 2𝑛 − 1
• Dans le code d’un programme
• Adresse numérique
• Adresse symbolique
• Adresse effective
• Obtenue à partir de transformations sur une adresse initiale
• Adresse indexée
• Adresse indirecte
• Adresse relative
• Mémoire virtuelle  Adresse virtuelle
6
Vie d’un programme
Création
(Éditeur de texte)
Adresses numériques (rares),
Adresses symboliques,
Modes d’adressage
Traduction
(Assembleur)
Adresses numériques,
Adresses symboliques (rares),
Modes d’adressage
Programme source
Code Objet
Librairies statiques
Édition des liens
(Éditeur de liens)
Adresses numériques,
Modes d’adressage
Module chargeable
Chargement
(Chargeur)
Adresses numériques,
Modes d’adressage
Processus
Exécution
(Processeur)
Mode d’adressage(Adresses numériques) = Adresse effective
Physique
Physique
Virtuelle
Unité de gestion
mémoire
7
Modification d’une adresse
Module
chargeable
Code Objet
0
0
c
l
a
Mémoire
0
donnée
l
a
𝑎+𝑙
donnée
a
𝑎+𝑙+𝑐
donnée
8
Mode d’adressage
• Adressage immédiat
• L’opérande est dans l’instruction
Code Op
Opérande
• Utilisé lorsque la valeur de l’opérande est constante
• Valeur généralement petite (RISC)
9
Mode d’adressage
• Adressage par registre
• L’opérande est dans un registre
Code Op
Registres
Numéro de registre
Opérande
• Pratique lorsqu’un même opérande est utilisé constamment par une
suite d’instruction
• L’instruction contient le numéro du registre
10
Mode d’adressage
• Adressage direct
• L’opérande est en mémoire
Code Op
Mémoire
Adresse
Opérande
• L’adressage est limité dans une architecture RISC
• L’instruction contient l’adresse de l’opérande
11
Mode d’adressage
• Adressage indexé
• L’opérande est en mémoire
Code Op
Adresse indexée
Mémoire
Index
+
Opérande
• L’instruction contient le repère (adresse indexée) et un index
• Le repère et l’index peuvent être dans des registres, l’instruction
contient alors les numéros de registre
12
Mode d’adressage
• Adressage relatif
• L’opérande est en mémoire
Code Op
Instruction
Déplacement
PC
Déplacement
Mémoire
+
Opérande
• Le repère est variable (contenu du PC)
• Le déplacement est contenu dans l’instruction
• C’est l’assembleur qui s’occupe de calculer le déplacement
• Très pratique  Indépendant de l’emplacement du programme en mémoire
13
Mode d’adressage
• Adressage base et déplacement
• L’opérande est en mémoire
Code Op
Registre
Mémoire
Adresse
de base
Déplacement
Déplacement
Registres
Adresse de base
+
Opérande
• Le repère (base) est dans un registre
• L’instruction donne le numéro de registre
• Le déplacement est contenu dans l’instruction
14
Mode d’adressage
• Adressage immédiat différé
• Équivalent au mode direct
Code Op
Mémoire
Adresse
Opérande
• Différé  Au lieu d’avoir l’opérande, on a l’adresse de l’opérande
• L’opérande est donc toujours en mémoire
15
Mode d’adressage
• Adressage par registre différé
• Le registre contient l’adresse de l’opérande
Code Op
Mémoire
Registre
Registres
Adresse
Opérande
16
Mode d’adressage
• Adressage indirect
• Adresse qui contient une adresse
Code Op
Adresse
Mémoire
Adresse
Opérande
17
Mode d’adressage
• Adressage indexé différé
Mémoire
Adresse
indexée
Code Op
Adresse indexée
Index
Index
Adresse
+
Opérande
18
Mode d’adressage
• Adressage relatif différé
Mémoire
Code Op
Instruction
Déplacement
PC
Déplacement
+
Adresse
Opérande
19
Mode d’adressage
• Adressage auto-incrément
• L’instruction contient un numéro de registre
Code Op
Mémoire
Registre
Registres
Adresse effective
Adresse
Opérande
+𝑖
• Le registre contient l’adresse de l’opérande
• À la fin de l’exécution, la valeur de l’adresse est incrémentée par 𝑖
20
Mode d’adressage
• Adressage auto-décrément
• On décrémente l’adresse en premier
Code Op
Mémoire
Registre
Registres
Adresse
−𝑖
Adresse effective
Opérande
• On peut aussi faire les deux derniers modes en différé
21
Mode d’adressage
• Adressage indirect à 𝑛 niveaux
• L’adresse d’une adresse, d’une adresse…
Mémoire
Adresse
Code Op
Adresse
Adresse
Opérande
Adresse
22
Particularités du SPARC
• 3 modes d’adressage pour accéder aux données
• Mode immédiat
• Mode registre
• Mode indexé
• Adresse indexée est dans un registre
• L’index est dans un autre registre, ou dans l’instruction
• Mode relatif
• Utilisé par les branchements
• Aussi pour les appels de sous-programmes
23
Particularités du SPARC
• Les instructions sont encodées sur 32 bits
• Les registres peuvent contenir des valeurs 64 bits
• Les adresses font 64 bits
• Comment écrire une adresse de 64 bits dans une instruction
longue de 32 bits?
24
Chargement d’une adresse
• L’instruction sethi charge la valeur d’une expression dans
les bits 10 à 31 d’un registre
• Pour mettre une valeur de 64 bits dans un registre, il faut :
sethi
%hh(n), reg’
! %hh conserve les bits 42 à 63
or
reg’, %hm(n), reg’
! %hm conserve les bits 32 à 41
sllx
reg’, 32, reg’
sethi
%lm(n), reg
or
reg, reg’, reg
or
reg, %lo(n), reg
• 6 instructions!
! %lm conserve les bits 10 à 31
! %lo conserve les bits 0 à 9
25
Chargement d’une adresse
• Exemple : 0xBE400F26FA2
sethi %hh(0xBE400F26FA2), %l1
! %hh(n) = 0000000000000000000010
00000000000000000000000000000000
32
64
%l1
00000000000000000000100000000000
0
31
or %hm(0xBE400F26FA2), %l1
! %hm(n) = 1111100100
00000000000000000000000000000000
64
32
%l1
00000000000000000000101111100100
31
0
sllx %l1, 32, %l1
00000000000000000000101111100100
64
32
00000000000000000000000000000000
31
0
%l1
26
Chargement d’une adresse
• Exemple : 0xBE400F26FA2
sethi %lm(0xBE400F26FA2), %l0
! %lm(n) = 0000000011110010011011
00000000000000000000000000000000
32
64
%l0
00000000111100100110110000000000
0
31
or %l0, %l1, %l0
00000000000000000000101111100100
32
64
%l0
00000000111100100110110000000000
0
31
or %l0, %lo(0xBE400F26FA2), %l0
! %lo(n) = 1110100010
00000000000000000000101111100100
64
32
00000000111100100110111110100010
31
0
%l0
27
Chargement d’une adresse
• L’instruction setx remplace les 6 instructions
• Ne jamais la mettre dans la fente de temporisation!
setx n, %l7, %l0
Adresse symbolique
Registre temporaire
Registre destination
• Les données contenues dans le registre temporaire sont perdues
après un setx
28
Instructions de chargement
ldub
Charge un octet non signé dans un registre. Mets les 56 bits de poids
fort à 0
ldsb
Charge un octet signé dans un registre. Si la valeur est positive, met
des 0 dans les 56 bits de poids fort, sinon, met 1.
lduh
Charge un demi-mot non signé dans un registre. Mets les 48 bits de
poids fort à 0.
ldsh
Charge un demi-mot signé dans un registre. Si la valeur est positive,
met des 0 dans les 48 bits de poids fort, sinon, met 1.
lduw
Charge un mot non signé dans un registre. Mets les 32 bits de poids
fort à 0.
ldsw
Charge un mot signé dans un registre. Si la valeur est positive, met
des 0 dans les 32 bits de poids fort, sinon, met 1.
ldx
Charge un mot étendu dans un registre.
29
Instructions de stockage
stb
Copie les 8 bits de poids faible du registre dans la mémoire
sth
Copie les 16 bits de poids faible du registre dans la mémoire
stw
Copie les 32 bits de poids faible du registre dans la mémoire
stx
Copie les 64 bits du registre dans la mémoire
30
Instructions synthétiques
• Remise à zéro d’une cellule mémoire
clrb [%l0]
==
stb
%g0, [%l0]
clrh [%l0]
==
sth
%g0, [%l0]
clr
[%l0]
==
stw
%g0, [%l0]
clrd [%l0]
==
stx
%g0, [%l0]
• Transfert d’un registre vers un registre
mov %l1, %l4
==
or
or
%g0, %l1, %l4
%l1, %g0, %l4
• Remise à zéro d’un registre
clr %l1
==
mov
or
%g0, %l1
%g0, %g0, %l1
31
Instructions synthétiques
• Mettre une valeur dans un registre
• Si la valeur est plus petite que 213
mov 518, %l6 == or
%g0, 518, %l6
• Si la valeur est plus grande que 213
setx 234567890, %l7, %l0 == suite de 6 instructions
Téléchargement