Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parYvain Lamy Modifié depuis plus de 9 années
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
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.