La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

1 École des Mines de Saint-Etienne. 158, cours Fauriel. 42 023 Saint-Etienne Cedex 2. Tél. 04 77 42 01 23. Fax. 04 77 42 66 66. Jean-Jacques Girardot

Présentations similaires


Présentation au sujet: "1 École des Mines de Saint-Etienne. 158, cours Fauriel. 42 023 Saint-Etienne Cedex 2. Tél. 04 77 42 01 23. Fax. 04 77 42 66 66. Jean-Jacques Girardot"— Transcription de la présentation:

1 1 École des Mines de Saint-Etienne. 158, cours Fauriel. 42 023 Saint-Etienne Cedex 2. Tél. 04 77 42 01 23. Fax. 04 77 42 66 66. Jean-Jacques Girardot girardot@emse.fr http://kiwi.emse.fr/ASI Cinquième séance Langages de Programmation Cours Architecture des Systèmes Informatiques

2 2 École des Mines de Saint-Etienne. 158, cours Fauriel. 42 023 Saint-Etienne Cedex 2. Tél. 04 77 42 01 23. Fax. 04 77 42 66 66. Plan  Introduction aux langages de programmation  Compilation et génération de code Expressions arithmétiques, boucles, sous-programmes Module objet, exécutable  Allocation des variables Statique, automatique, dynamique  Utilisation de la pile Notion de cadre

3 3 École des Mines de Saint-Etienne. 158, cours Fauriel. 42 023 Saint-Etienne Cedex 2. Tél. 04 77 42 01 23. Fax. 04 77 42 66 66. Les langages de programmation Une classification  Assembleurs : “bien” utiliser les ressources de la machine  Premiers langages compilés : FORTRAN (scientifique), COBOL (gestion) : écrire des applications “portables”  Langages de programmation structurée : ALGOL, PASCAL : programmes aisés à concevoir et maintenir  Langages à objets : C++ : programmation “dans le large”  Langages fonctionnels : LISP, Caml… vers des programmes plus faciles à prouver  Langages déclaratifs : Prolog…  Langages spécialisés : SQL (bases de données), sh, ksh, perl (shell scripts), etc…

4 4 École des Mines de Saint-Etienne. 158, cours Fauriel. 42 023 Saint-Etienne Cedex 2. Tél. 04 77 42 01 23. Fax. 04 77 42 66 66. Technologies d'implantation  Langages compilés Un outil (compilateur) transforme le programme source en un programme objet, ou un programme “core image” Le résultat est directement exécutable par la machine Exemples : C, C++, Pascal, FORTRAN, ADA, COBOL, etc.  Langage interprété Un outil (interprète) lit le programme source et (après transformations diverses) l’exécute directement. Exemples : APL, LISP, Perl, CAML, etc.  Approches intermédiaires - ex: SIM Source -> code machine virtuelle, interprétation du code

5 5 École des Mines de Saint-Etienne. 158, cours Fauriel. 42 023 Saint-Etienne Cedex 2. Tél. 04 77 42 01 23. Fax. 04 77 42 66 66. Étapes de l’exécution d’un programme compilé  Compilation : traduction d’un langage source vers un langage d'assemblage ou un langage objet  Assemblage : traduction d’un programme source en assembleur vers un langage objet  Édition de liens : création d’un programme exécutable, rassemblant des modules objets et les sous-programmes de bibliothèque nécessaires à l’exécution  Exécution : chargement en mémoire centrale du programme exécutable ; le “chargeur” lui “donne la main”

6 6 École des Mines de Saint-Etienne. 158, cours Fauriel. 42 023 Saint-Etienne Cedex 2. Tél. 04 77 42 01 23. Fax. 04 77 42 66 66. Compilateur  Lit un programme en un langage dit “de haut niveau” C, C++, Pascal, Fortran, Ada : langage source  Opère en plusieurs “phases” : analyse lexicale, analyse syntaxique, génération de code  Convertit les instructions du programme en commandes pour la machine : langage machine, dit langage cible  A une instruction du langage source correspondent en général plusieurs instructions du langage cible.

7 7 École des Mines de Saint-Etienne. 158, cours Fauriel. 42 023 Saint-Etienne Cedex 2. Tél. 04 77 42 01 23. Fax. 04 77 42 66 66. Traduction  Comment réalise-t-on sur la machine la représentation des éléments du langage source ? Génération du code :  Utilisation et gestion des registres  Création du code machine Représentation des variables  Cours 5, TP 5  variables globales statiques, variables locales automatiques Sous-programmes  Représentation  Appel et retour.

8 8 École des Mines de Saint-Etienne. 158, cours Fauriel. 42 023 Saint-Etienne Cedex 2. Tél. 04 77 42 01 23. Fax. 04 77 42 66 66. Module objet  Résultat d’une compilation ou d’un assemblage Structure de données  segments de code machine  valeurs d’initialisation données  liste des “externes” et “points d’entrée”  informations de contrôle / mise au point Format d’entrée pour l’éditeur de liens

9 9 École des Mines de Saint-Etienne. 158, cours Fauriel. 42 023 Saint-Etienne Cedex 2. Tél. 04 77 42 01 23. Fax. 04 77 42 66 66. Module exécutable  Résultat d’une édition de liens Structure de données  segments de code machine  valeurs d’initialisation des données  liste des “externes” et “points d’entrée”  les externes sont “résolus”  informations de contrôle / mise au point Format d’entrée du chargeur Peut contenir des “externes” non résolus  chargement dynamique

10 10 École des Mines de Saint-Etienne. 158, cours Fauriel. 42 023 Saint-Etienne Cedex 2. Tél. 04 77 42 01 23. Fax. 04 77 42 66 66. Un langage et son compilateur : mcc  mcc : “mini C compiler” Sous-ensemble du langage C  types de données : entiers 16 bits, caractères 8 bits  structures de données : scalaires, tableaux et pointeurs Compilateur minimal  pas de pré processeur  pas d'optimisation du code généré  fournit de l'assembleur en format source Utilisation  compilation => assemblage => simulation

11 11 École des Mines de Saint-Etienne. 158, cours Fauriel. 42 023 Saint-Etienne Cedex 2. Tél. 04 77 42 01 23. Fax. 04 77 42 66 66. Compilation - 1  Expressions arithmétiques int a,b,c; /* var. globales */ a = 2; b = 5; c = (a+3)*(b-1); ld r2,#2 mul r3 st.l r2,@a ld r2,r1 ld r2,#5 st.l r2,@c st.l r2,@b ld.l r2,@a add r2,#3 ld.l r3,@b @a: data 0 sub r3,#1 @b: data 0 ld r0,r2 @c: data 0

12 12 École des Mines de Saint-Etienne. 158, cours Fauriel. 42 023 Saint-Etienne Cedex 2. Tél. 04 77 42 01 23. Fax. 04 77 42 66 66. Compilation - 1 : notes  Intervention nécessaire des registres Le compilateur traite chaque instruction de manière séparée Le compilateur utilise R2, R3… selon les besoins  Renommage des variables : a devient @a dans le code assembleur produit ceci permet d'utiliser r2, r3 comme noms de variables  Code produit correct, mais médiocre génération indépendante de chaque instruction C pas d'optimisation spécifique mise en place

13 13 École des Mines de Saint-Etienne. 158, cours Fauriel. 42 023 Saint-Etienne Cedex 2. Tél. 04 77 42 01 23. Fax. 04 77 42 66 66. Compilation - 2  Expressions logiques int i,j; j = i<10; ld.l r2,@i ld r3,#10 cmp r2,r3 jlt @1002 ld r2,#0 jmp @1003 @1002: ld r2,#1 @1003: st.l r2,@j  Génération explicite d'une valeur logique : 0 ou 1  Création d'étiquettes par le compilateur : @1002

14 14 École des Mines de Saint-Etienne. 158, cours Fauriel. 42 023 Saint-Etienne Cedex 2. Tél. 04 77 42 01 23. Fax. 04 77 42 66 66. Compilation - 3  Boucles int i; i=0; while (i<10) i=i+1; ld r2,#0 ld r2,#1 st.l r2,@i @1005: @1003: jeq.l @1002 ld.l r2,@i ld.l r2,@i ld r3,#10 add r2,#1 cmp r2,r3 st.l r2,@i jlt @1004 jmp.l @1003 ld r2,#0 @1002: jmp @1005 @1004: @i: data 0

15 15 École des Mines de Saint-Etienne. 158, cours Fauriel. 42 023 Saint-Etienne Cedex 2. Tél. 04 77 42 01 23. Fax. 04 77 42 66 66. Compilation - 4  Programme complet main() { 2+3; } @1001: ld r2,#2 add r2,#3 halt @main: ld r14,#0 ld r15,#0 jmp.l @1001 start @main  Notes positionnement des registres R14 et R15 instruction d'arrêt

16 16 École des Mines de Saint-Etienne. 158, cours Fauriel. 42 023 Saint-Etienne Cedex 2. Tél. 04 77 42 01 23. Fax. 04 77 42 66 66. Compilation - 5  Variables globales ; initialisation int a=5, b; main() { b=3; } @1001: ld r2,#3 st.l r2,@b halt @main: ld r14,#0 ld r15,#0 jmp.l @1001 start @main @a: data 5 @b: data 0

17 17 École des Mines de Saint-Etienne. 158, cours Fauriel. 42 023 Saint-Etienne Cedex 2. Tél. 04 77 42 01 23. Fax. 04 77 42 66 66. Compilation - 6  Variables locales ; initialisation main() { int a=5,b; b=3; } @1001: ld r2,#5 st.l r2,-2(r14) ld r2,#3 st.l r2,-4(r14) halt @main: ld r14,#0 ld.l r15,#-4 jmp.l @1001 start @main  Utilisation de R14 comme “registre de base”

18 18 École des Mines de Saint-Etienne. 158, cours Fauriel. 42 023 Saint-Etienne Cedex 2. Tél. 04 77 42 01 23. Fax. 04 77 42 66 66. Structure du programme en mémoire R14 R15 Programme et données statiques Variables locales 0x0000 0xFFFE 0xFFFC Zone utilisée par la pile 0005 0003

19 19 École des Mines de Saint-Etienne. 158, cours Fauriel. 42 023 Saint-Etienne Cedex 2. Tél. 04 77 42 01 23. Fax. 04 77 42 66 66. Compilation - 7 Un exemple : PGCD de 2 nombres int x, y, z; main() { x = 7953; y = 12291; while (x != y) { if (x > y) { z=x; x=y; y=z; } y = y-x; } out (x); }

20 20 École des Mines de Saint-Etienne. 158, cours Fauriel. 42 023 Saint-Etienne Cedex 2. Tél. 04 77 42 01 23. Fax. 04 77 42 66 66. Le code assembleur @1001: ld.l r2,#7953 st.l r2,@x ld.l r2,#12291 st.l r2,@y @1004: ld.l r2,@x ld.l r3,@y cmp r2,r3 jne @1005 ld r2,#0 jmp @1006 @1005: ld r2,#1 @1006: jeq.l @1003 ld.l r2,@x ld.l r3,@y cmp r2,r3 jgt @1007 ld r2,#0 jmp @1008 @1007: ld r2,#1 @1008: jeq.l @1002 ld.l r2,@x st.l r2,@z ld.l r2,@y st.l r2,@x ld.l r2,@z st.l r2,@y @1002: ld.l r2,@y ld.l r3,@x sub r2,r3 st.l r2,@y jmp.l @1004 @1003: ld.l r2,@x ld r0,r2 trap 13,3 trap 13,2 halt @main: ld r14,#0 ld r15,#0 jmp.l @1001 start @main @x: data 0 @y: data 0 @z: data 0

21 21 École des Mines de Saint-Etienne. 158, cours Fauriel. 42 023 Saint-Etienne Cedex 2. Tél. 04 77 42 01 23. Fax. 04 77 42 66 66. Compilation des sous-programmes  Choix et contraintes Passages des paramètres, retour du résultat : où, et comment ?  Possibilités : registres, pile  Choix : paramètres dans les registres R2, R3, R4… résultat dans R0 Représentation des variables locales du sous-programme  Initialisation des variables ? Représentation des variables statiques  Initialisation ? Préservation des registres ?  Qui doit le faire : appelant ou appelé ?  Choix : appelé

22 22 École des Mines de Saint-Etienne. 158, cours Fauriel. 42 023 Saint-Etienne Cedex 2. Tél. 04 77 42 01 23. Fax. 04 77 42 66 66. Compilation - 8  Sous-programmes - Arguments int incr(int x) { return x+1; } main() { incr(3); } @1001: ld.l r2,-2(r14) @1003: ld r2,#3 add r2,#1 jsr.l @incr ld r0,r2 ld r2,r0 jmp.l @1000 halt @1000: pop r2 @main: ld r14,#0 ld r15,r14 ld r15,#0 pop r14 jmp.l @1003 ret start @main @incr: push r14 ld r14,r15 push r2 jmp.l @1001

23 23 École des Mines de Saint-Etienne. 158, cours Fauriel. 42 023 Saint-Etienne Cedex 2. Tél. 04 77 42 01 23. Fax. 04 77 42 66 66. Compilation - 8 : Notes - 1  Appel du sous-programme : paramètre dans R2  Prologue du sous-programme : Avant appel :  R2=3, R14=0, R15=0 Appel : empile adresse retour (0x24)  R15=0xFFFE Exécution du Prologue push r14 ld r14,r15 push r2 Après le prologue :  R14=0xFFFC, R15=0xFFFA R14 R15 0x0000 0xFFFE 0xFFFC0000 00030xFFFA 0024

24 24 École des Mines de Saint-Etienne. 158, cours Fauriel. 42 023 Saint-Etienne Cedex 2. Tél. 04 77 42 01 23. Fax. 04 77 42 66 66. Compilation - 8 : Notes - 2  Épilogue du sous-programme : Avant retour :  R0=4, R2=3, R14= 0xFFFC, R15= 0xFFFA Exécution de l'épilogue pop r2 ld r15,r14 pop r14 Après l'épilogue  R0=4, R2=3, R14=0, R15=0xFFFE  Retour du sous-programme : résultat dans R0  R0=4, R2=3, R14=0, R15=0

25 25 École des Mines de Saint-Etienne. 158, cours Fauriel. 42 023 Saint-Etienne Cedex 2. Tél. 04 77 42 01 23. Fax. 04 77 42 66 66. Compilation - 8 : Notes - 3  Registre R14 : accès aux arguments  premier argument = -2(R14), deuxième = -4(R14), etc…  La pile contient : Adresse de retour  ici 0x0024 Sauvegarde registre R14 (registre de base de l'appelant…) Valeur des paramètres  ici, un seul, R2 [ Sauvegarde des registres modifiés par l'appelé ]  aucune sauvegarde nécessaire dans le cas présent [ Variables locales de l'appelé ]  aucune dans le cas présent

26 26 École des Mines de Saint-Etienne. 158, cours Fauriel. 42 023 Saint-Etienne Cedex 2. Tél. 04 77 42 01 23. Fax. 04 77 42 66 66. Compilation - 9  Sous-programmes - Variables locales int sub() { int x=3; return x+1; } main() { sub(); } @1001: ld r2,#3 st.l r2,-2(r14) ld.l r2,-2(r14) add r2,#1 ld r0,r2 jmp.l @1000 @1000: pop r2 add r15,#2 ld r15,r14 pop r14 ret @sub: push r14 ld r14,r15 sub r15,#2 push r2 jmp.l @1001

27 27 École des Mines de Saint-Etienne. 158, cours Fauriel. 42 023 Saint-Etienne Cedex 2. Tél. 04 77 42 01 23. Fax. 04 77 42 66 66. Compilation - 9 : Notes  Le sous-programme n'a pas de paramètre, mais une variable locale ; il a besoin d'un registre de travail Prologue :  Sauvegarde R14 de l'appelant  Positionne R14 de l'appelé  Réserve 2 octets pour x  Sauvegarde R2 Épilogue :  Opérations inverses push r14 ld r14,r15 sub r15,#2 push r2 pop r2 add r15,#2 ld r15,r14 pop r14

28 28 École des Mines de Saint-Etienne. 158, cours Fauriel. 42 023 Saint-Etienne Cedex 2. Tél. 04 77 42 01 23. Fax. 04 77 42 66 66. Compilation - 10  Sous-programmes - Variables locales statiques int sub() { static int x=3; return x+1; } main() { sub(); } @1001: ld.l r2,@1002 add r2,#1 ld r0,r2 jmp.l @1000 @1000: pop r2 ld r15,r14 pop r14 ret @sub: push r14 ld r14,r15 push r2 jmp.l @1001 @1002: data 3

29 29 École des Mines de Saint-Etienne. 158, cours Fauriel. 42 023 Saint-Etienne Cedex 2. Tél. 04 77 42 01 23. Fax. 04 77 42 66 66. Compilation 10 - Notes  Une variable locale statiques est similaire à une variable globale  Le compilateur génère un nom “unique” ici, “ @1002 ” remplace le nom “ x ” choisi par l'utilisateur

30 30 École des Mines de Saint-Etienne. 158, cours Fauriel. 42 023 Saint-Etienne Cedex 2. Tél. 04 77 42 01 23. Fax. 04 77 42 66 66. Compilation - 11  Tableau global int tab[10]; main() { tab[3]=5; } @1001: ld r2,#5 ld r3,#3 sll r3,#1 st.l r2,@tab(r3) halt @main: ld r14,#0 ld r15,#0 jmp.l @1001 start @main @tab: bss 20 Notes : “sll r3,1” permet de passer de l'indice de l'élément à un déplacement en octets à l'intérieur du tableau utilisation de l'adressage indexé

31 31 École des Mines de Saint-Etienne. 158, cours Fauriel. 42 023 Saint-Etienne Cedex 2. Tél. 04 77 42 01 23. Fax. 04 77 42 66 66. Compilation - 12  Tableau local main() {int tab[10]; tab[3]=5; } @1001: ld r2,#5 ld r3,#3 sll r3,#1 add r3,r14 st.l r2,-20(r3) halt @main: ld r14,#0 ld.l r15,#-20 jmp.l @1001 start @main Notes : Le tableau est réservé dans la pile “sll r3,1” permet de passer de l'indice de l'élément à un déplacement en octets à l'intérieur du tableau utilisation de l'adressage indexé ; une instruction machine supplémentaire est nécessaire pour accéder à l'élément

32 32 École des Mines de Saint-Etienne. 158, cours Fauriel. 42 023 Saint-Etienne Cedex 2. Tél. 04 77 42 01 23. Fax. 04 77 42 66 66. Compilation - 13  Tableau passé en paramètre int sub(int tab[10]) { return tab[3]; } int tab[10]; main() { tab[3]=5; sub(tab); } @1001: ld r2,#3 sll r2,#1 add.l r2,-2(r14) ld r3,(r2) ld r0,r3 jmp.l @1000 @1000: pop r3 pop r2 ld r15,r14 pop r14 ret @sub: push r14 ld r14,r15 push r2 push r3 jmp.l @1001 @1003: ld r2,#5 ld r3,#3 sll r3,#1 st.l r2,@tab(r3) la.l r2,@tab jsr.l @sub ld r2,r0 halt @main: ld r14,#0 ld r15,#0 jmp.l @1003 start @main @tab: bss 20


Télécharger ppt "1 École des Mines de Saint-Etienne. 158, cours Fauriel. 42 023 Saint-Etienne Cedex 2. Tél. 04 77 42 01 23. Fax. 04 77 42 66 66. Jean-Jacques Girardot"

Présentations similaires


Annonces Google