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 !