Modes d`adressage - Idir AIT SADOUNE

Transcription

Modes d`adressage - Idir AIT SADOUNE
1/24
5 : Modes
d’Adressage
I. Ait Sadoune
Architecture des systèmes informatiques
Chapitre 5 : Modes d’adressage
Idir AIT SADOUNE
CentraleSupélec - Département Informatique
3, rue Joliot-Curie, 91192 Gif-sur-Yvette cedex
<[email protected]>
Année scolaire 2015-2016, Séquence 5
Modes
d’adressage
Sous-programmes
Outline
5 : Modes
d’Adressage
I. Ait Sadoune
Modes
d’adressage
Sous-programmes
Modes d’adressage
Sous-programmes
2/24
Mode d’adressage immédiat
5 : Modes
d’Adressage
I. Ait Sadoune
AQ := arg
Modes
d’adressage
Sous-programmes
I
Intérêt
I
I
Inconvénient
I
3/24
donner des constantes
uniquement pour les constantes
Mode d’adressage direct
5 : Modes
d’Adressage
I. Ait Sadoune
AQ := Mem[arg]
Modes
d’adressage
Sous-programmes
I
Intérêt
I
I
Inconvénient
I
4/24
manipuler des variables
le programme est lié à la variable
Mode d’adressage indirect
5 : Modes
d’Adressage
I. Ait Sadoune
AQ :=Mem[Mem[arg]]
Modes
d’adressage
Sous-programmes
I
Intérêt
I
I
Inconvénient
I
5/24
pointeurs/références, travail générique sur plusieurs variables
une indirection supplémentaire
Mode d’adressage relatif
5 : Modes
d’Adressage
I. Ait Sadoune
AQ :=Mem[CO + arg]
Modes
d’adressage
Sous-programmes
I
Intérêt
I
6/24
code indépendant de sa position (utile surtout pour les
branchements)
Mode d’adressage indexé : indicé
5 : Modes
d’Adressage
I. Ait Sadoune
AQ :=Mem[TAB + arg] (AQ := TAB[X])
I
Intérêt
I
7/24
parcours d’un tableau en faisant varier la valeur de l’index
Modes
d’adressage
Sous-programmes
Mode d’adressage indexé : pointé
5 : Modes
d’Adressage
I. Ait Sadoune
AQ :=Mem[X+2] (AQ := X.(attribut num 3))
Modes
d’adressage
Sous-programmes
I
Intérêt
I
8/24
accès à un attribut d’un objet désigné par le registre X
Récapitulatif indicé / pointé
9/24
5 : Modes
d’Adressage
I. Ait Sadoune
Modes
d’adressage
Sous-programmes
indicé (accès tableau)
pointé (accès objet)
Partie fixe
–> argument
adresse du tableau
position de l’attribut
Partie variable
–> registre d’index X
indice
adresse de l’objet
Variante indexé : post-incrément
5 : Modes
d’Adressage
I. Ait Sadoune
AQ :=Mem[0+X] puis X := X+1
Modes
d’adressage
Sous-programmes
I
Autres variantes
I
I
Intérêt
I
10/24
pré-incrément, post-décrément, pré-décrément, ...
gestion de pile
Manipulation d’une pile
11/24
5 : Modes
d’Adressage
I. Ait Sadoune
Modes
d’adressage
Sous-programmes
I
Convention pour cette pile :
I
I
I
Le pointeur de pile pointe sur la première place libre
La pile progresse vers les adresses croissantes
Autres conventions possibles
Indirect et indexé : pré-indexé
5 : Modes
d’Adressage
I. Ait Sadoune
AQ :=Mem[Mem[arg+X]]
Modes
d’adressage
Sous-programmes
I
Intérêt
I
I
12/24
combinaison des avantages de l’indexé et de l’indirect
tableau contenant des adresses de variables (tableau de
pointeurs/références)
Indirect et indexé : post-indexé
5 : Modes
d’Adressage
I. Ait Sadoune
AQ :=Mem[Mem[arg]+X]
Modes
d’adressage
Sous-programmes
I
Intérêt
I
13/24
programme pouvant travailler sur différents tableaux (référence à
un tableau)
Sous-programmes
5 : Modes
d’Adressage
I. Ait Sadoune
Modes
d’adressage
Sous-programmes
I
14/24
Mécanisme classique dans les langages évolués
(appel d’une méthode en Java ...)
Sous-programmes
5 : Modes
d’Adressage
I. Ait Sadoune
Modes
d’adressage
Sous-programmes
14/24
I
Mécanisme classique dans les langages évolués
(appel d’une méthode en Java ...)
I
Mécanisme indispensable (modularité)
Sous-programmes
15/24
5 : Modes
d’Adressage
I. Ait Sadoune
Modes
d’adressage
Sous-programmes
I
Appel de sous programme (JSR)
I
I
mémoriser l’adresse de retour (l’adresse de l’instruction située
après le JSR)
Retour du sous-programme (RTS)
I
restaurer l’adresse de retour
Sous-programmes
5 : Modes
d’Adressage
I. Ait Sadoune
Modes
d’adressage
Sous-programmes
I
Appel de sous programme (JSR)
I
I
mémoriser l’adresse de retour (l’adresse de l’instruction située
après le JSR)
Retour du sous-programme (RTS)
I
restaurer l’adresse de retour
I Machine à 8 accumulateurs (R0, ..., R7)
I R0, ..., R6 sont utilisés pour les arguments de la fonction
I R0 est utilisé pour le résultat de la fonction
15/24
Sous-programmes
5 : Modes
d’Adressage
I. Ait Sadoune
Modes
d’adressage
solution 1
16/24
Sous-programmes
I Lors du JSR, l’adresse de retour est stockée dans un registre interne au
processeur (R7 := CO)
I Lors du RTS : (CO := R7)
@incr
MOV
JSR
MOV
...
ADD
RTS
R0,
incr
R1,
#5
R0,
#1
% R7 := CO et CO := @incr
R0
% CO := R7
Sous-programmes
5 : Modes
d’Adressage
I. Ait Sadoune
Modes
d’adressage
solution 1
Sous-programmes
I Lors du JSR, l’adresse de retour est stockée dans un registre interne au
processeur (R7 := CO)
I Lors du RTS : (CO := R7)
@incr
MOV
JSR
MOV
...
ADD
RTS
R0,
incr
R1,
#5
R0,
#1
% R7 := CO et CO := @incr
R0
% CO := R7
Problème : que faire quand SP1 appelle SP2 ?
16/24
Sous-programmes
5 : Modes
d’Adressage
I. Ait Sadoune
Modes
d’adressage
Sous-programmes
solution 2
I Lors du JSR, l’adresse de retour est stockée dans un mot mémoire
spécifique au sous-programme (par exemple : mot situé juste avant le
sous-programme)
I Problème : que faire quand SP1 appelle SP1 (récursion) ?
17/24
Sous-programmes
5 : Modes
d’Adressage
I. Ait Sadoune
solution 3
Modes
d’adressage
I Utilisation d’une pile et d’un registre pointeur de pile (SP) interne au
processeur
I lors du JSR, l’adresse de retour est empilée (PUSH CO)
I lors du RTS, l’adresse de retour est dépilée (PULL CO)
@pgcd
@else
@fpgcd
18/24
MOV
MOV
JSR
...
CMP
JEQ
JAN
SUB
JSR
JMP
SUB
JSR
RTS
R0,
R1,
pgcd
#24
#16
R0,
fpgcd
else
R0
pgcd
fpgcd
R1
pgcd
R1
% PUSH CO et CO := @pgcd
R1
% PUSH CO et CO := @pgcd
R0
% PUSH CO et CO := @pgcd
% PULL CO
Sous-programmes
Communication entre sous-programmes
5 : Modes
d’Adressage
I. Ait Sadoune
Problème à résoudre
19/24
I passage des arguments et retour du résultat
Modes
d’adressage
Sous-programmes
Communication entre sous-programmes
5 : Modes
d’Adressage
I. Ait Sadoune
Problème à résoudre
I passage des arguments et retour du résultat
mêmes problèmes...
19/24
I Registres internes
I que faire quand SP1 passe des arguments à SP2 ?
I Mots réservé
I récursion ?
Modes
d’adressage
Sous-programmes
Communication entre sous-programmes
5 : Modes
d’Adressage
I. Ait Sadoune
Problème à résoudre
I passage des arguments et retour du résultat
mêmes problèmes...
I Registres internes
I que faire quand SP1 passe des arguments à SP2 ?
I Mots réservé
I récursion ?
... même solution
I Les arguments sont empilés
I Une place est réservée dans la pile pour la valeur de retour
I La pile est aussi utilisée pour les variables locales, la sauvegarde de
registres ...
19/24
Modes
d’adressage
Sous-programmes
Appel d’un sous-programme
5 : Modes
d’Adressage
I. Ait Sadoune
Modes
d’adressage
Example
20/24
int a = 5 ;
int b = 15 ;
int res = PGCD(a, b) ;
Sous-programmes
Appel d’un sous-programme
5 : Modes
d’Adressage
I. Ait Sadoune
Modes
d’adressage
Example
Sous-programmes
int a = 5 ;
int b = 15 ;
int res = PGCD(a, b) ;
PUSH
PUSH
PUSH
JSR
PULL
PULL
PULL
20/24
b
a
#0
PGCD
res
a
b
% PUSH CO et CO := @pgcd
Exécution d’un sous-programme
5 : Modes
d’Adressage
I. Ait Sadoune
Modes
d’adressage
Sous-programmes
Example
int PGCD(int a, int b) {
if (a == b) return a ;
if (a > b) return PGCD(a-b,b) ;
if (a < b) return PGCD(a,b-a) ;
}
21/24
Exécution d’un sous-programme
5 : Modes
d’Adressage
I. Ait Sadoune
Modes
d’adressage
PUSH
MOV
PUSH
MOV
SUB
PUSH
LDA
MOV
SUB
PUSH
LDA
...
MOV
PULL
PULL
PULL
PULL
RTS
22/24
R7
R7
R6
R6
R6
R0
R0
R6
R6
R1
R1
SP
R1
R0
R6
R7
Sous-programmes
, SP
% récupérer l’adresse de la tête de pile
, R7
, #2
, [R6]
, R7
, #3
% récupérer a
, [R6]
% récupérer b
, R7
% restituer l’adresse de la tête de pile
% PULL CO
Processeurs actuels
23/24
5 : Modes
d’Adressage
I. Ait Sadoune
Modes
d’adressage
Sous-programmes
I
Certains registres sont réservés pour le passage
d’arguments
Processeurs actuels
23/24
5 : Modes
d’Adressage
I. Ait Sadoune
Modes
d’adressage
Sous-programmes
I
Certains registres sont réservés pour le passage
d’arguments
I
Si des arguments supplémentaires sont nécessaires,
ils sont empilés
Processeurs actuels
5 : Modes
d’Adressage
I. Ait Sadoune
Modes
d’adressage
Sous-programmes
23/24
I
Certains registres sont réservés pour le passage
d’arguments
I
Si des arguments supplémentaires sont nécessaires,
ils sont empilés
I
Si SP1 appelle SP2 (ou SP1), il doit sauvegarder
(dans la pile !) les valeurs des registres dédiés
Exemple : ARM (embarqué)
24/24
5 : Modes
d’Adressage
I. Ait Sadoune
Modes
d’adressage
Sous-programmes
I
Utilisations
I
I
I
mobiles (Android, iPhone, BlackBerry...)
consoles, tablettes (iPad...), baladeurs (iPod...)
équipements réseau (routeurs, set-top-boxes)
Exemple : ARM (embarqué)
5 : Modes
d’Adressage
I. Ait Sadoune
Modes
d’adressage
Sous-programmes
I
Utilisations
I
I
I
I
mobiles (Android, iPhone, BlackBerry...)
consoles, tablettes (iPad...), baladeurs (iPod...)
équipements réseau (routeurs, set-top-boxes)
Architecture « RISC »
I
16 registres : r0 à r15
I
I
I
I
I
24/24
r15 : compteur ordinal
r14 : link register (adresse de retour lors d’un appel)
r13 : pointeur de pile
r4 à r12 : variables de travail (locales) lors d’un calcul
r0 à r3 : arguments transmis à un sous-programme ... le
reste est placé sur la pile !