1 École des mines de saint-etienne. 158, cours fauriel. 42 023 saint-etienne cedex 2. tél. 04 77...
TRANSCRIPT
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 [email protected]
http://kiwi.emse.fr/ASI
Quatrième séanceIntroduction à la Compilation
Cours Architecture des Systèmes Informatiques
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
Concepts des processeurs : la pile Le simulateur pédagogique, suite… Langage machine, langage d’assemblage 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É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.
Terminologie Source (code, programme) : texte rédigé par le programmeur
dans un langage de programmation “évolué” Objet (code, programme) : traduction en langage de la
machine d’un texte source Exécutable : programme obtenu en assemblant un programme
objet et l’ensemble des sous-programmes nécessaires à son exécution
Assembleur : génère du code objet à partir d’un programme en langage d’assemblage (source)
Compilateur : génère du code objet à partir d’un programme source en langage de haut niveau (Pascal, C…)
Éditeur de liens : rassemble des modules objets pour constituer un programme exécutable
Chargeur : installe en mémoire centrale un programme en vue de son exécution
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.
La pile du processeur
Qu’est-ce, à quoi sert-elle ?• Portion de la mémoire centrale• Référencée par un registre spécifique, le “pointeur de pile”, stack
pointer• “Empiler” une valeur :
a: déplacer le pointeur de pile de ± un mot b: écrire la valeur dans le mot désigné par le pointeur de pile Note: certaines machines font b, puis a…
• “Dépiler” une valeur : effectuer les opérations inverses : b: lire le mot pointé par le registre de pile a: déplacer le pointeur de pile en sens inverse
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.
La pile : outil des sous-programmes
Gestion des appels et retour de sous-programmes• 2 instructions :
Appel de sous-programme : Empiler la valeur du pointeur programme (PC) Se brancher à l’adresse du sous-programme
Retour de sous-programme : Dépiler une valeur [le pointeur programme sauvegardé avant
l’appel] Affecter cette valeur au pointeur programme
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.
La machine mac :opérations sur la pile
Tout registre peut servir de pointeur de pile Empiler : PUSH, 0x0D
Rx <- [Rx] - 2 MemW[[Rx]] <- valeur
Formats : court/long, immédiat/direct/indirect-indexé Dépiler : POP, 0x0E
destination <- MemW[[Rx]] Rx <- [Rx] + 2
Formats : court/long, direct/indirect-indexé[pas de mode immédiat]
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.
La machine mac : appels et retour de sous-programme
Appel : JSR, Jump to SubRoutine, 0x0C Rx <- [Rx] - 2 MemW[[Rx]] <- PC PC <- adresse-du-sous-programme
Formats : pas de mode court immédiat Retour : RET, Return, 0x1C
PC <- MemW[[Rx]] Rx <- [Rx] + 2
Format : court immédiat : 0 00 11100 xxxx 0000
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.
La machine mac :autres opérations
Appel du superviseur : TRAP, 0x1A Format court immédiat : 0 00 11010 xxxx yyyy Appel niveau X, sous-niveau Y.
c.f. manuel pour les différentes fonctions…
Opération ineffective : NOP, No OPération, 0x1B Format court immédiat : 0 00 11011 0000 0000 Ne modifie ni la mémoire, ni les registres
Arrêt : HALT, 0x1E Format court immédiat : 0 00 11110 0000 0000 Arrêt du calculateur, lève l’exception ErrHalt
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.
Le simulateur sim
Modèle logiciel de la machine mac Émulateur de la machine virtuelle :
• Simule registres et mémoire centrale• Interprète les codes instructions• Gère les erreurs/exceptions
Metteur au point• Visualise et modifie mémoire et registres• Lance et interrompt la machine virtuelle• Trace les instructions • Visualise les registres modifiés en cours d’exécution
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.
Les commandes du simulateur
Syntaxe des commandes• Mot clef: /xxx suivi de compléments éventuels • Ex :
/R2 impression du contenu du registre R2 /PSW impression des drapeaux et de PC /run 2FC0 exécuter le programme débutant en 0x2FC0 /dm 1000 20 imprimer le contenu de la zone de mémoire
de 32 octets débutant en 4096 /R2=237 affectation de la valeur 567 à R2
• c.f. manuel pour l’ensemble des commandes
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.
Exemples
Placer la valeur 3 dans le registre R5• /R5 = 3 • Note : constantes en hexadécimal…
Écrire un programme qui place 3 dans R5• ld r5,#3 code : 0 00 00001 0101 0011 • Placer l'instruction en mémoire, par exemple en 0
/addr 0 /sw 0153 • Exécuter l'instruction
/step 0 • Vérifier
/r5
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.
Exemple d'utilisation :calcul du PGCD de deux
nombres
Programme chargé à l'adresse 1000
TEST: CMP R2,R3 10002523
JEQ FIN 1002 8F10 1016JL SUITE 1006 8F40
1010LD R0,R3 100A 2103LD R3,R2 100C 2132LD R2,R0 100E 2120
SUITE: SUB R3,R2 1010 2432JMP TEST 1012 8F00 1000
FIN: HALT 1016 1E00
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.
Exemple d'utilisation :calcul du PGCD de deux
nombres Mise en mémoire du programme
• /addr 1000 /sw 2523 8f10 1016 8f40 1010 /sw 2103 2132 2120 2432 8f00 1000 1e00
Positionnement des registres• /r2=+7953 /r3=+12291
Lancement de l'exécution• /run 1000• réponse : psw = 0502 1018
Consultation du résultat• /r2• réponse : r2 = 0x02D3 723/723 2,-45 ‘ ‘
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.
Tests sous sim
Créer sous un éditeur le fichier de commandes Utilisation directe du simulateur
• sim < pgcd.sim Utilisation interactive
• sim /rd "pgcd.sim" /run 0
• Mise au point /db 1 : trace des registres modifiés /db 2 : trace des instructions
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.
Langage d’assemblage
Représentation symbolique des instructions• Syntaxe : [étiquette:] opération [opérandes]• Symboles :
registres, ex : R1, R2, R15, étiquettes, variables… opérations LD, ADD, SUB, ST… nombres (décimal, hexadécimal, octal, binaire, caractère)
• Sémantique : combinaison code opération et des opérandes
Une instruction assembleur = une instruction machine
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.
Assembleur
Outil permettant le passage du langage d’assemblage au langage machine ; “machine dependent”• Instructions• Commentaires• Directives ou “pseudo-instructions”
DATA, ORG, BSS, START… Fournit :
• Binaire “absolu”/“core image”/“exécutable” ; ex l’assembleur ASM• Binaire “translatable”, ou programme objet.
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.
L'assembleur asm
Programme réalisant la transformation d'instructions exprimées en assembleur en code chargeable par le simulateur• Syntaxe
Toutes les instructions de la machine (c.f. manuel) Commentaires : * … Directives :
ORG : nouvelle adresse d'implantation des instructions suivantes BSS : réservation d'une zone de mémoire DATA : création d'une donnée initialisée occupant un mot START : définition de l'adresse de début du programme
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.
Transformation de PGCD enun programme assembleur
ORG 0x1000PGCD: CMPR2,R3
JEQ FINJLT SUITELD R0,R3LD R3,R2LD R2,R0
SUITE: SUB R3,R2JMP PGCD
FIN: RET R15
MAIN: LA.LR15,PILE
LD.L R2,#1144LD.L R3,#858JSR R15,PGCD LD.L R3,#1287
JSR R15,PGCDHALT BSS 16
PILE: DATA 0START MAIN
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.
Le code généré et l’exécution/addr 1000/w 2523 8f10 1016 8f40 1010 2103 2132 2120 /w 2432 8f00 1000 1cf0 abf0 1042 8120 0478/w 8130 035a 8cf0 1000 8130 0507 8cf0 1000/w 1e00 /addr 1042/w 0000/run 1018
/rd “pgcd.sim”/run 1018psw = 0501 1032/r2r2 = 0x008f 143/143 0,-113 ‘ ‘
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.
Langages de “haut niveau”
Langages compilés• Un outil (compilateur) transforme le programme source en un
programme objet, ou un programme “core image”• 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
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.
Étapes de l’exécution d’un programme
Compilation : traduction d’un langage source vers 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”
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.
Compilateur
Lit un programme en un langage dit “de haut niveau”C, C++, Pascal, Fortran, Ada : langage source
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.
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.
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
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.
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
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.
Traduction
Comment réalise-t-on sur la machine la représentation des éléments du langage source ?
• Variables TP 4
variables globales statiques, variables locales automatiques
• Sous-programmes Représentation
Appel et retour.
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.
Un langage et son compilateur : mcc
mcc : “mini C compiler”• Sous-ensemble du langage C
type de données unique : entier 16 bits pas de structures de données
• 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
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 - 1 Expressions arithmétiques int a,b,c; a = 2; b = 5; c = (a+3)*(b-1);
ld r2,#2st.l r2,@ald r2,#5st.l
r2,@bld.l r2,@aadd r2,#3ld.l r3,@bsub r3,#1ld r0,r2
mul r3ld r2,r1st.l r2,@c...
@a: data 0@b: data 0@c: data 0
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 - 2 Boucles int i; i=0; while (i<10) i=i+1;
ld r2,#0st.l r2,@i
@1002:ld.l r2,@ild r3,#10cmp r2,r3jlt @1004ld r2,#0jmp @1005
@1004:ld r2,#1
@1005:jeq.l
@1003ld.l r2,@iadd r2,#1st.l r2,@ijmp @1002
@1003:...
@i: data 0
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.
Un exemple : PGCD de 2 nombres Le programme Cint 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);}
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.
Le code assembleur (presque complet)@main:
ld.l r2,#7953st.l r2,@xld.l r2,#12291st.l r2,@y
@1003:ld.l r2,@xld.l r3,@ycmp r2,r3jne @1005ld r2,#0jmp @1006
@1005:ld r2,#1
@1006:jeq.l @1004ld.l r2,@xld.l r3,@ycmp r2,r3jgt @1007ld r2,#0jmp @1008
@1007:ld r2,#1
@1008:jeq.l @1002ld.l r2,@xst.l r2,@zld.l r2,@yst.l r2,@xld.l r2,@zst.l r2,@y
@1002:ld.l r2,@yld.l r3,@xsub r2,r3st.l r2,@yjmp.l @1003
@1004:haltstart @main
@a: data 0@b: data 0@c: data 0
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 : sous-programmes
Passer des paramètres aux sous-programmes• Valeurs transmises dans les registres R2, R3, R4, R5…
Que fait le compilateur ?• Le registre R14 est sauvegardé dans la pile• Le registre R14 pointe sur la pile à l’entrée du sous-programme• Les registres R2, R3, R4… sont empilés• Les paramètres sont désignés par -2(R14), -4(R14)…• Les valeurs des registres sont restaurées à la sortie du sous-programme• Le résultat de la fonction est rendu dans R0 • Les sous-programmes peuvent être récursifs.
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 - 3 Sous-programmes int incr(int x) { return x+1; } main(){ incr(3); }
@1000:ld.l r2,-2(r14)add r2,#1ld r0,r2jmp.l @1001
@1001:pop r15,r2ld r15,r14pop r15,r14ret r15
@incr:push r15,r14ld r14,r15
push r15,r2jmp.l @1000
@1002:ld r2,#3jsr.l r15,incrld r2,r0halt
main:ld r14,#0ld r15,#0jmp.l @1002start main