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