Résumé Génération de code Le code intermédiaire

Dimension: px
Commencer à balayer dès la page:

Download "Résumé Génération de code Le code intermédiaire"

Transcription

1 Résumé Analyse INFO0004 Structure des langages de programmation Génération de code ; liaison et exécution Justus H. Piater Programmation Analyse Compilation Liaison fichier texte Analyse lexicale flux de jetons Analyse syntaxique arbre de syntaxe abstraite Interprétation Exécution Analyse sémantique arbre annoté 2 / 51 Résumé Génération de code Le code intermédiaire arbre annoté Programmation Création de code intermédiaire Analyse pseudo- instructions en blocs élémentaires Compilation Amélioration pseudo- instructions en blocs élémentaires Linkage Génération de code Interprétation Exécution code assembleur Amélioration code assembleur Assemblage code binaire 3 / 51

2 Code intermédiaire Fibonacci ressemble au code assembleur : code linéaire registres (nombre infini) données brutes indépendant d une machine quelconque pour effectuer des optimisations pour réduire au minimum le code spécifique à la machine cible // compute result the nth Fibonacci number void main() { int n, fib0, fib1, temp, result; n = 8; fib0 = 0; fib1 = 1; while (n > 0) { temp = fib0; fib0 = fib1; fib1 = fib0 + temp; n = n 1; result = fib0; Le code intermédiaire 5 / 51 Le code intermédiaire 6 / 51 Fibonacci : code intermédiaire Cf. UASM Block 0: LoadC v0, 8 Store n, v0 LoadC v1, 0 Store fib0, v1 LoadC v2, 1 Store fib1, v2 Block 1: Load v12, n LoadC v13, 0 v11 := v12 > v13 If v11 Goto Block 2 Goto Block 3 Block 2: Load v3, fib0 Store temp, v3 Load v4, fib1 Store fib0, v4 Load v6, fib0 Load v7, temp v5 := v6 + v7 Store fib1, v5 Load v9, n LoadC v10, 1 v8 := v9 v10 Store n, v8 Goto Block 1 Block 3: Load v14, fib0 Store result, v14 Fibonacci : code intermédiaire (suite) Le code intermédiaire 7 / 51 Le code intermédiaire 8 / 51

3 Représenter le code intermédiaire Créer du code intermédiaire Chaque instruction du code intermédiaire est une structure de données qui encode : le type de l instruction (Load, :=, ) le type de chaque opérande (registre virtuel, variable globale, variable locale, ou constante) l opérateur (le cas échéant) des informations sémantiques supplémentaires tout ce qui est utile pour l amélioration et génération du code Formellement : spécification par une grammaire attribuée (attribute grammar) Pour nous : Très similaire à l interprétation du code (voir les méthodes sémantiques) : On parcourt l arbre de syntaxe abstraite; à chaque nœud, on crée des instructions. En vue d une amélioration du code par la suite, on ne réutilise jamais des registres ; un nouveau registre virtuel est prévu chaque fois. Le code intermédiaire 9 / 51 Le code intermédiaire 10 / 51 Les blocs élémentaires Assignment Pour gérer des sauts, il faut insérer des étiquettes. Le morceau de code entre une étiquette et le prochain saut constitue un bloc élémentaire (basic block). Nous allons couper le code en blocs élémentaires (pas essentiel ici, mais pour l amélioration du code plus tard). Ainsi, on crée un graphe de flot de contrôle (control flow graph). BasicBlock* generate(const Assignment* s, BasicBlock* bb) { bb >vec.push_back(new MStore(s >target, generate(s >source, bb))); return bb; Il faut passer le bloc pour savoir où ajouter le code. La source est un registre virtuel. Il faut renvoyer le bloc parce qu une instruction peut rompre le bloc élémentaire actuel. Note Cette implémentation fonctionne parce qu ici, une expression ne rompt jamais le bloc élémentaire actuel. Le code intermédiaire 11 / 51 Le code intermédiaire 12 / 51

4 Binary Loop VirtualRegister* generate(const Binary* e, BasicBlock* bb) { VirtualRegister* target = newregister(); bb >vec.push_back(new MBinary(e >op, target, generate(e >term1, bb), generate(e >term2, bb) )); return target; BasicBlock* generate(const Loop* s, BasicBlock* bb) { BasicBlock* bbtest = basicblocks >getnewbasicblock(); bb >vec.push_back(new MGoto(bbTest)); BasicBlock* bbbodybeg = basicblocks >getnewbasicblock(); BasicBlock* bbbodyend = generate(s >body, bbbodybeg); bbbodyend >vec.push_back(new MGoto(bbTest)); VirtualRegister* test = generate(s >test, bbtest); BasicBlock* bbnext = basicblocks >getnewbasicblock(); bbtest >vec.push_back(new MCondGoto(test, bbbodybeg)); bbtest >vec.push_back(new MGoto(bbNext)); return bbnext; Le code intermédiaire 13 / 51 Le code intermédiaire 14 / 51 La génération du code assembleur Allocations familières arbre annoté Création de code intermédiaire pseudo- instructions en blocs élémentaires Génération de code code assembleur Allocation des registres Allocation des variables locales Allocation des variables globales Allocation des constantes La génération du code assembleur 16 / 51

5 Allocation des registres Allocation de ressources Équivalent à la coloration de graphe (NP-hard) L idée : Nœuds sont registres virtuels, arêtes connectent des nœuds simultanément actifs. Couleurs sont registres réels. Faisons-le pour Fibonacci en regardant les plages actives (live ranges) des registres virtuels Simplification bloc-par-bloc : Sans plages actives inter-blocs élémentaires, un algorithme d allocation de ressources convient. Problème : Nous avons un ensemble de tâches. Chaque tâche a une heure de début et une heure de fin avec. Chaque tâche doit être exécutée sur une machine ; une machine ne peut exécuter qu une tâche à la fois. Deux tâches et ne sont pas en conflit si ou. Il s agit d exécuter toutes les tâches sur un nombre minimal de machines. La génération du code assembleur 17 / 51 Algorithme La génération du code assembleur 18 / 51 Correction Temps d exécution? Algorithm resourceallocation( ): Input: A set of tasks with start and end times and. Output: A minimal, nonconflicting allocation of machine for all tasks in. // minimal number of machines while do remove from the task with smallest if there is a machine with no task conflicting with then schedule task on machine else // add a new machine schedule task on machine Proposition : L algorithme resourceallocation() est correct. Preuve (par contradiction) : Supposons que l algorithme trouve une solution avec machines, alors qu il existe une solution avec machines. Soit la première tâche allouée sur la machine. Quand l algorithme traita la tâche, toutes les machines contenaient des tâches en conflict avec et aussi (par le même argument) entre elles, ce qui implique la présence dans de tâches en conflit entre elles. La génération du code assembleur 19 / 51 La génération du code assembleur 20 / 51

6 Nombre insuffisant de registres? Déborder des registres vers la pile. Avant d allouer les registres, diviser la durée de vie d un registre virtuel en plusieurs intervalles. Défi : Minimiser le coût des Store/Load. Trois registres réels suffisent toujours. Trivial : L allocation des variables et constantes Parcourir toutes les instructions intermédiaires pour créer le tableau de symboles (normalement c est déjà fait lors de l analyse syntaxique). À chaque variable locale, affecter une adresse relative au frame pointer dans le cadre de pile. À chaque variable et constante statique, affecter une adresse relative au début de la section des données statiques. On parlera plus tard des variables globales. La génération du code assembleur 21 / 51 La génération du code assembleur 22 / 51 Créer du code assembleur Créer du code assembleur (suite) Chaque instruction intermédiaire est traduite en une ou plusieurs instructions assembleur, en utilisant les registres réels / adresses des variables allouées. (On peut laisser tomber les petites constantes si elles sont toutes utilisées en tant qu argument immédiat.) Cas spéciaux : des constantes suffisamment petites pour les intégrer dans une instruction immédiate des opérateurs du code intermédiaire sans équivalent en assembleur (toutes les variantes de <, >, immédiat ou non, existent-elles?) On crée un bloc élémentaire à la fois, chacun précédé par son étiquette. Finalement, on crée les variables statiques et les constantes, chacune précédée par son étiquette. La génération du code assembleur 23 / 51 La génération du code assembleur 24 / 51

7 La machine Beta Fibonacci : UASM architecture RISC, 32 bits Toute opération sur des valeurs se fait entre registres. 32 registres, dont : R0 valeur de retour R27 BP base (frame) pointer R28 LP linkage pointer R29 SP stack pointer R30 XP exception pointer R31 toujours zéro Pas de caches, délais, Cf. IMF.include beta.uasm.options annotate.protect prologue: CMOVE(stack,SP) MOVE(SP,BP) ALLOCATE(5) block0: CMOVE(8, r7) 8 ST(r7, 12, BP) n CMOVE(0, r6) 0 ST(r6, 8, BP) fib0 CMOVE(1, r5) 1 ST(r5, 4, BP) fib1 BR(block1) block1: La génération du code assembleur 25 / 51 Fibonacci : UASM (suite) La génération du code assembleur 26 / 51 Fibonacci : UASM (suite) LD(BP, 12, r10) n CMOVE(0, r9) 0 CMPLE(r10, r9, r11) XORC(r11, 1, r11) BT(r11, block2) BR(block3) block2: LD(BP, 8, r4) fib0 ST(r4, 16, BP) temp LD(BP, 4, r3) fib1 ST(r3, 8, BP) fib0 LD(BP, 8, r1) fib0 LD(BP, 16, r15) temp ADD(r1, r15, r2) ST(r2, 4, BP) fib1 LD(BP, 12, r13) n CMOVE(1, r12) 1 SUB(r13, r12, r14) ST(r14, 12, BP) n BR(block1) block3: LD(BP, 8, r8) ST(r8, 0, BP) fib0 result epilogue: don't clean up stack for debugging.breakpoint HALT().unprotect stack: La génération du code assembleur 27 / 51 La génération du code assembleur 28 / 51

8 Goto BR, Load LD L assemblage void generatecode(const MGoto* ii, ofstream& outfile) const { outfile << indent << "BR(block" << ii >bb >getid() << ")\n"; void generatecode(const MLoad* ii, ofstream& outfile) const { outfile << indent << "LD(BP, " << VAR_SIZE * dict >getoffset(*(ii >source)) << ", r" << dict >getoffset(*(ii >target)) << ")\t " << ii >source >id << "\n"; Expansion de macros Remplacer les mnémoniques et les opérandes par le code binaire de la machine Remplacer des étiquettes symboliques par des adresses Parfois, amélioration du code. La génération du code assembleur 29 / 51 La génération du code assembleur 30 / 51 La liaison Résumé Liaison et exécution fichiers objet, librairies Programmation Réadressage Analyse Résolution de noms Compilation fichier exécutable Liaison Chargement Interprétation Exécution processus Liaison dynamique La liaison 32 / 51

9 La liaison Une illustration Placement des fichiers objet dans un ordre quelconque 2. Réadressage (relocation) insertion des bonnes adresses des destinations internes 3. Résolution de noms insertion des bonnes adresses des destinations externes a. Recherche d un nom non résolu dans les librairies b. Procédure récursive pour des objets des librairies Imports M M Exports X Réadressage Code r1 := &M call M Données X: Fichiers objets réadressables Imports X Exports M Réadressage Code L: M: Données Y: r1 := &L(1000) r2 := Y(400) r3 := X Fichier objet exécutable Code r1 := &M(2300) call M(2300) r1 := &L(1800) r2 := Y(3900) r3 := X(3300) L: M: Données X: Y: [Adapté de Scott 2000 Fig. 9.10] La liaison 33 / 51 Le contrôle de types La liaison 34 / 51 Un exemple: fibonacci.cc Par inclusion d un symbole fictif qui représente une définition d interface (p.ex., checksum) Par codage de la signature d une méthode dans son nom (name mangling) // compute result the nth Fibonacci number #include <cstdio> static int lastfib; int fibonacci(int n) { int fib0 = 0, fib1 = 1, temp; for (; n > 0; n ) { printf("%d iterations to go\n", n); temp = fib0; fib0 = fib1; fib1 = fib0 + temp; return lastfib = fib0; La liaison 35 / 51 La liaison 36 / 51

10 fibonacci.cc compilé, désassemblé 0: 55 push %ebp 1: 89 e5 mov %esp,%ebp 3: 83 ec 18 sub $0x18,%esp 6: c7 45 fc movl $0x0,0xfffffffc(%ebp) d: c7 45 f movl $0x1,0xfffffff8(%ebp) 14: 83 7d cmpl $0x0,0x8(%ebp) 18: 7f 02 jg 1c <_Z9fibonaccii+0x1c> 1a: eb 2d jmp 49 <_Z9fibonaccii+0x49> 1c: 83 ec 08 sub $0x8,%esp 1f: ff pushl 0x8(%ebp) 22: push $0x0 27: e8 fc ff ff ff call 28 <_Z9fibonaccii+0x28> 2c: 83 c4 10 add $0x10,%esp 2f: 8b 45 fc mov 0xfffffffc(%ebp),%eax 32: f4 mov %eax,0xfffffff4(%ebp) 35: 8b 45 f8 mov 0xfffffff8(%ebp),%eax 38: fc mov %eax,0xfffffffc(%ebp) 3b: 8b 45 f4 mov 0xfffffff4(%ebp),%eax fibonacci.cc compilé, désassemblé (suite) 3e: fc add 0xfffffffc(%ebp),%eax 41: f8 mov %eax,0xfffffff8(%ebp) 44: ff 4d 08 decl 0x8(%ebp) 47: eb cb jmp 14 <_Z9fibonaccii+0x14> 49: 8b 45 fc mov 0xfffffffc(%ebp),%eax 4c: a mov %eax,0x0 51: c9 leave 52: c3 ret La liaison 37 / 51 fibonacci.cc compilé, optimisé, désassemblé 0: 55 push %ebp 1: 89 e5 mov %esp,%ebp 3: 57 push %edi 4: 56 push %esi 5: 53 push %ebx 6: 83 ec 0c sub $0xc,%esp 9: 8b 5d 08 mov 0x8(%ebp),%ebx c: be mov $0x0,%esi 11: bf mov $0x1,%edi 16: 85 db test %ebx,%ebx 18: 7e 1d jle 37 <_Z9fibonaccii+0x37> 1a: 83 ec 08 sub $0x8,%esp 1d: 53 push %ebx 1e: push $0x0 23: e8 fc ff ff ff call 24 <_Z9fibonaccii+0x24> 28: 89 f0 mov %esi,%eax 2a: 89 fe mov %edi,%esi 2c: 8d 3c 38 lea (%eax,%edi,1),%edi La liaison 38 / 51 fibonacci.cc compilé, optimisé, désassemblé (suite) 2f: 83 c4 10 add $0x10,%esp 32: 4b dec %ebx 33: 85 db test %ebx,%ebx 35: 7f e3 jg 1a <_Z9fibonaccii+0x1a> 37: mov %esi,0x0 3d: 89 f0 mov %esi,%eax 3f: 8d 65 f4 lea 0xfffffff4(%ebp),%esp 42: 5b pop %ebx 43: 5e pop %esi 44: 5f pop %edi 45: 5d pop %ebp 46: c3 ret La liaison 39 / 51 La liaison 40 / 51

11 Tableaux de réadressage et de symboles objdump -r fibonacci.o RELOCATION RECORDS FOR [.text]: OFFSET TYPE VALUE f R_386_32.rodata.str R_386_PC32 printf R_386_32.bss nm fibonacci.o b lastfib U printf T _Z9fibonaccii Les différentes sections du fichier objet objdump -h fibonacci.o Idx Name Size VMA LMA File off Algn 0.text **2 CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE 1.data c 2**2 CONTENTS, ALLOC, LOAD, DATA 2.bss c 2**2 ALLOC 3.rodata.str c 2**0 CONTENTS, ALLOC, LOAD, READONLY, DATA 4.note.GNU-stack **0 CONTENTS, READONLY 5.comment **0 CONTENTS, READONLY La liaison 41 / 51 La liaison 42 / 51 Le chargement Lancer un processus avec mémoire virtuelle 1. S il n y est pas encore, charger le programme dans la mémoire 2. Prévoir une petite pile 3. Prévoir un petit tas 4. Démarrer le programme à l adresse zéro Le chargement 44 / 51

12 Lancer un processus sans mémoire virtuelle 1. S il n y est pas encore, charger le programme dans la mémoire, à une adresse donnée 2. Réadressage 3. Prévoir la pile 4. Prévoir le tas 5. Démarrer le programme à l adresse donnée La liaison dynamique Observation : Beaucoup de programmes et de processus partagent de grosses librairies. Idée : Créer une seule copie de ce code les librairies partagées. Problème : Le même code peut se trouver à des différentes adresses pour différents processus! Solution : PIC (Position-Independent Code) pour éviter le réadressage : toutes les adresses relatives au PC accès aux données non-partagées par un niveau supplémentaire d indirection le tableau de liaison Le chargement 45 / 51 Le chargement 46 / 51 Une illustration La liaison paresseuse gp(main) C B A main: *(sp+ N) := gp - - call foo: t9 := *(gp+ A) jalr t9 gp := *(sp+ N) - - load X: t0 := *(gp+ C) t0 := *t0 - - load Y: t0 := *(gp+ B) t0 := *t0 gp(foo) D E F G foo: gp := t9+ (E- D) - - load X: t0 := *(gp+ F) t0 := *t0 - - load Y: t0 := *(gp+ G) t0 := *t0 Librairie partagée liée dynamiquement Code partagé (PIC) Tableau de liaison (un par processus) Observation : Idée : Principe : Beaucoup de liaisons ne sont jamais utilisées lors de la durée de vie d un processus. Lier en cas de besoin. Lier des morceaux de code qui appellent le lieur dynamique, qui les remplacera par les vrais liens. X: Données privées Y: (par processus) [Adapté de Scott 2000 Fig. 9.11] Le chargement 47 / 51 Le chargement 48 / 51

13 Résumé Résumé Génération de code : code intermédiaire code assembleur Liaison et chargement : réadressage résolution de noms librairies partagées, PIC, liaison dynamique Résumé 50 / 51 References M. Scott, Programming Language Pragmatics, Morgan Kaufmann Résumé 51 / 51

Édition de liens. 1 Programme unique. Ensimag 1A Apprentissage. 1.1 Listing d assemblage. offset codop. .section.rodata

Édition de liens. 1 Programme unique. Ensimag 1A Apprentissage. 1.1 Listing d assemblage. offset codop. .section.rodata Édition de liens Ensimag 1A Apprentissage 2010 1 Programme unique 1.1 Listing d assemblage offset codop.section.rodata 25 73 20 25 sortie:.asciz "%s %s %c%c%c%c%c%c%c %s%c %s%c\n" 73 20 25 63 25 63 25

Plus en détail

Optimisation de code

Optimisation de code Optimisation de code Brique ASC Samuel Tardieu sam@rfc1149.net École Nationale Supérieure des Télécommunications Samuel Tardieu (ENST) Optimisation de code 1 / 77 But L optimisation cherche à améliorer

Plus en détail

Cours de compilation

Cours de compilation Cours de compilation 1 Introduction Un compilateur est un logiciel de traduction d un langage source vers un langage cible. D ordinaire le langage source est un langage de programmation évolué, comme C++

Plus en détail

Notions de langage machine

Notions de langage machine Notions de langage machine 18 décembre 2009 Rappels et introduction Architecture de Van Neumann : Processeur = UC + UAL Mémoire interne au processeur = les registres (soit seulement l accumulateur, soit

Plus en détail

Architecture des ordinateurs TP 3

Architecture des ordinateurs TP 3 Architecture des ordinateurs ESIPE - IR1 TP 3 Objectif de cette séance L objectif de cette séance est d apprendre à utiliser la pile et à écrire des fonctions en assembleur En particulier, nous verrons

Plus en détail

Instructions assembleur

Instructions assembleur Instructions assembleur 0001011011110110 0001011101101101 10001001 Instruction vue par le programmeur assembleur ou instruction élémentaire cible d'un compilateur Réalise une modification de l'état interne

Plus en détail

Logiciel de base. Première année ENSIMAG

Logiciel de base. Première année ENSIMAG Logiciel de base Première année ENSIMAG 1 Procédures, paramètres, pile En assembleur une fonction est une étiquette, c'est l'adresse de sa première instruction Lors de l'appel d'une fonction, la pile sert

Plus en détail

Compilation (INF 564)

Compilation (INF 564) Présentation du cours Le processeur MIPS Programmation du MIPS 1 Compilation (INF 564) Introduction & architecture MIPS François Pottier 10 décembre 2014 Présentation du cours Le processeur MIPS Programmation

Plus en détail

Objectifs. Architecture des Ordinateurs Partie III : Liens avec le système d exploitation. Au sommaire... Schéma général d un compilateur (1/8)

Objectifs. Architecture des Ordinateurs Partie III : Liens avec le système d exploitation. Au sommaire... Schéma général d un compilateur (1/8) Architecture des Ordinateurs Partie III : Liens avec le système d exploitation 2. Génération de code David Simplot simplot@fil.univ-lille1.fr Objectifs Voir la génération de code ainsi que les mécanismes

Plus en détail

Programmation assembleur sur l architecture x86

Programmation assembleur sur l architecture x86 Mini-projet système : développement d un noyau de système d exploitation Responsable : Christophe Rippert Christophe.Rippert@Grenoble-INP.fr Introduction Programmation assembleur sur l architecture x86

Plus en détail

ASSEMBLAGE ET ÉDITION DES LIENS

ASSEMBLAGE ET ÉDITION DES LIENS ASSEMBLAGE ET ÉDITION DES LIENS Mewtow 11 novembre 2015 Table des matières 1 Introduction 5 2 La chaine d assemblage 7 2.1 Résolution des symboles.............................. 7 2.2 Relocation.....................................

Plus en détail

Assembleur x86. P. Ezéquel

Assembleur x86. P. Ezéquel Assembleur x86 P. Ezéquel 1 TABLE DES MATIÈRES 2 Table des matières 1 Introduction 3 2 Anatomie du x86 3 2.1 Registres généraux.......................... 4 2.2 Registres de base de segments....................

Plus en détail

Algorithmie ISI301 TP 1 : Python et premiers algorithmes

Algorithmie ISI301 TP 1 : Python et premiers algorithmes Algorithmie ISI301 TP 1 : Python et premiers algorithmes 1 Python : apprentissage Pour avoir une vision plus large des différentes possibilités du langage Python, nous ne pouvons que vous conseiller d

Plus en détail

La famille x86. Eduardo Sanchez Laboratoire de Systèmes Logiques. Ecole Polytechnique Fédérale de Lausanne

La famille x86. Eduardo Sanchez Laboratoire de Systèmes Logiques. Ecole Polytechnique Fédérale de Lausanne La famille x86 Laboratoire de Systèmes Logiques Désavantages de l architecture x86 Très vieille architecture: basée sur le 8080 (commercialisé en 1974, 6 000 transistors et 8 registres) Le premier 8086

Plus en détail

Chapitre I. Introduction à la programmation

Chapitre I. Introduction à la programmation Chapitre I Introduction à la programmation Objectif du cours Comprendre ce qu est l algorithmique. Fournir des éléments de bases intervenants en programmation quel que soit le langage employé Variables

Plus en détail

Programmation assembleur : aperçu

Programmation assembleur : aperçu Assembleur : Younès EL AMRANI. 1 Programmation assembleur : aperçu Programmation en assembleur : NASM Module M14 Semestre 4 Printemps 2010 Equipe pédagogique : Younès El Amrani, Abdelhakim El Imrani, Faissal

Plus en détail

Machines virtuelles. Brique ASC. Samuel Tardieu sam@rfc1149.net. Samuel Tardieu (ENST) Machines virtuelles 1 / 40

Machines virtuelles. Brique ASC. Samuel Tardieu sam@rfc1149.net. Samuel Tardieu (ENST) Machines virtuelles 1 / 40 Machines virtuelles Brique ASC Samuel Tardieu sam@rfc1149.net École Nationale Supérieure des Télécommunications Samuel Tardieu (ENST) Machines virtuelles 1 / 40 Machines virtuelles La compilation peut

Plus en détail

J.-M Friedt. FEMTO-ST/département temps-fréquence. jmfriedt@femto-st.fr. transparents à jmfriedt.free.fr. 19 janvier 2015

J.-M Friedt. FEMTO-ST/département temps-fréquence. jmfriedt@femto-st.fr. transparents à jmfriedt.free.fr. 19 janvier 2015 Informatique FEMTO-ST/département temps-fréquence jmfriedt@femto-st.fr transparents à jmfriedt.free.fr 19 janvier 2015 1 / 15 16 séances Plan des cours 1 C pour microcontroleurs : volatile, tailles de

Plus en détail

Types et langages de programmation. Algorithmique et Programmation Unisciel/K.Zampieri

Types et langages de programmation. Algorithmique et Programmation Unisciel/K.Zampieri Types et langages de programmation Algorithmique et Programmation Unisciel/K.Zampieri 1 Généalogie partielle des langages de programmation FORTRAN BASIC PL/1 PROLOG ALGOL60 COBOL C PASCAL ADA MODULA-2

Plus en détail

DS Architecture des Ordinateurs

DS Architecture des Ordinateurs 3IF - Architecture des ordinateurs - DS 2015 page 1/9 NOM, Prénom : DS Architecture des Ordinateurs 21/05/2015 Durée 1h30. Répondez sur le sujet. REMPLISSEZ VOTRE NOM TOUT DE SUITE. Tous documents autorisés,

Plus en détail

Introduction. Les performances d une machine sont liées au: 1. nombre d instructions. 2. temps de cycle horloge

Introduction. Les performances d une machine sont liées au: 1. nombre d instructions. 2. temps de cycle horloge Introduction Les performances d une machine sont liées au: 1. nombre d instructions 2. temps de cycle horloge 3. nombre de cycle horloge par instructions. C est: le compilateur et l architecture du jeu

Plus en détail

Introduction à la rétro-ingénierie de binaires

Introduction à la rétro-ingénierie de binaires Introduction à la rétro-ingénierie de binaires Ge0 27/09/2014 Article Introduction Dans le domaine de l informatique, et plus précisément celui de la programmation, nous développons et utilisons des programmes.

Plus en détail

Architecture matérielle et logicielle

Architecture matérielle et logicielle Architecture matérielle et logicielle Contents I Le Cours 2 1 Généralités 2 2 Micro-processeur 2 3 Mémoire 2 4 Performances 3 II TPs 3 1 Création d un exécutable : 3 2 Les bibliothèques 3 3 Codage de l

Plus en détail

Introduction à l'informatique

Introduction à l'informatique Introduction à l'informatique DEUG Sciences et Technologie Première année Autour de la programmation Catherine Mongenet Pierre Gancarski (supports réalisés par Catherine Mongenet et Pascal Schreck) Rappels

Plus en détail

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test Grandes lignes Analyseur Statique de logiciels Temps RÉel Embarqués École Polytechnique École Normale Supérieure Mercredi 18 juillet 2005 1 Présentation d 2 Cadre théorique de l interprétation abstraite

Plus en détail

Conception et exploitation des processeurs

Conception et exploitation des processeurs Chargés de cours : Frédéric Pétrot et Sébastien Viardot Année universitaire 2011-2012 Structure du cours C1 C2 C3 au VHDL aux langages d'assemblage pour les ISA x86 et MIPS Conventions pour les appels

Plus en détail

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if Pierre Boudes 28 septembre 2011 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike

Plus en détail

Types et performances des processeurs

Types et performances des processeurs Types et performances des processeurs Laboratoire de Systèmes Logiques Structure d un ordinateur contrôle processeur traitement séquenceur registres mémoire entrées/sorties micromémoire opérateurs bus

Plus en détail

Principes de la programmation impérative

Principes de la programmation impérative Séquence d instructions Variables et types Types élaborés Procédures, arguments Gestion de la mémoire Langage compilé, interprété Principes de la programmation impérative Séquence d instructions Variables

Plus en détail

Théorie des Langages

Théorie des Langages Théorie des Langages AntLR - Générateur d analyseurs Claude Moulin Université de Technologie de Compiègne Printemps 2015 Sommaire 1 Introduction 2 AntLR ANTLR : ANother Tool for Language Recognition URL

Plus en détail

Conception de circuits numériques et architecture des ordinateurs

Conception de circuits numériques et architecture des ordinateurs Conception de circuits numériques et architecture des ordinateurs Frédéric Pétrot Année universitaire 2014-2015 Structure du cours C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 Codage des nombres en base 2, logique

Plus en détail

Architecture des Ordinateurs et Systèmes d Exploitation

Architecture des Ordinateurs et Systèmes d Exploitation Architecture des Ordinateurs et Systèmes d Exploitation Cours n 5 Le langage assembleur (2): Pile, Procédures. Les Interruptions 3ème année L assembleur 8086 : la pile = structure de «rangement» de données

Plus en détail

Travail d étude Les techniques de protection du logiciel

Travail d étude Les techniques de protection du logiciel Travail d étude Les techniques de protection du logiciel Julien Burle Présenté par: Térence Scalabre Licence Informatique Comment et pourquoi protéger son logiciel? Tout d abord intéressons-nous aux raisons

Plus en détail

Techniques de compilation

Techniques de compilation Département d Informatique Université de Nice Sophia Antipolis Master 1 Informatique Techniques de compilation XI. Générateurs de générateurs de code Jacques Farré email : Jacques.Farre@unice.fr 1 Introduction

Plus en détail

gcc -Wall ansi o tp fichiers -lfl

gcc -Wall ansi o tp fichiers -lfl FLEX et BISON tp.l tp_l.c : - abréviations - expressions régulières et actions associées. tp.h : - définition de types - définition d étiquettes tp_y.h : codes symboliques pour les tokens FLEX Générateur

Plus en détail

Implantation d une machine virtuelle en C

Implantation d une machine virtuelle en C Implantation d une machine virtuelle en C Cours de Compilation Avancée (MI190) Benjamin Canou Université Pierre et Maire Curie Année 2012/2013 Semaine 3 Interprète de bytecode Interprète de bytecode :

Plus en détail

Rappels d architecture

Rappels d architecture Assembleur Rappels d architecture Un ordinateur se compose principalement d un processeur, de mémoire. On y attache ensuite des périphériques, mais ils sont optionnels. données : disque dur, etc entrée

Plus en détail

Une introduction au langage C++ Marc Jachym, Lurpa

Une introduction au langage C++ Marc Jachym, Lurpa Une introduction au langage C++ Marc Jachym, Lurpa Janvier 2008 À l origine, le langage C Langage procédural créé dans les années 1970 aux laboratoires Bell (ATT : télécoms américains) en vue d écrire

Plus en détail

Programmation en assembleur Gnu sur des microprocesseurs de la gamme Intel (du 80386 au Pentium-Pro) ENSIMAG. Première année

Programmation en assembleur Gnu sur des microprocesseurs de la gamme Intel (du 80386 au Pentium-Pro) ENSIMAG. Première année Programmation en assembleur Gnu sur des microprocesseurs de la gamme Intel (du 80386 au Pentium-Pro) ENSIMAG Première année Année 2009 X. Rousset de Pina Sommaire 1. Introduction......1 2. L architecture

Plus en détail

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP COURS PROGRAMMATION INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC page 1 / 7 INITIATION AU LANGAGE C SUR PIC DE MICROSHIP I. Historique du langage C 1972 : naissance du C dans les laboratoires BELL par

Plus en détail

Noyau d'un système d'exploitation INF2610 Chapitre 7 : Gestion de la mémoire (annexe 2)

Noyau d'un système d'exploitation INF2610 Chapitre 7 : Gestion de la mémoire (annexe 2) INF2610 Chapitre 7 : Gestion de la mémoire (annexe 2) Département de génie informatique et génie logiciel Hiver 2014 Exemple 1 : Espace virtuel d un processus Où seront stockées les données des variables

Plus en détail

Traduction des Langages : Le Compilateur Micro Java

Traduction des Langages : Le Compilateur Micro Java BARABZAN Jean-René OUAHAB Karim TUCITO David 2A IMA Traduction des Langages : Le Compilateur Micro Java µ Page 1 Introduction Le but de ce projet est d écrire en JAVA un compilateur Micro-Java générant

Plus en détail

La vie des programmes

La vie des programmes La vie des programmes Fabienne Carrier Stéphane Devismes Université Joseph Fourier, Grenoble I 2 février 2009 Carrier, Devismes (Grenoble I) La vie des programmes 2 février 2009 1 / 31 Plan 1 Introduction

Plus en détail

Analyse statique de programmes Typage et analyse statique au sein de Java

Analyse statique de programmes Typage et analyse statique au sein de Java Analyse statique de programmes Typage et analyse statique au sein de Java Master Professionnel Informatique spécialité FSIL/FSI Jean-Marc Talbot jean-marc.talbot@lif.univ-mrs.fr Aix-Marseille Université

Plus en détail

Assembleur x86. Eric Cariou. Université de Pau et des Pays de l'adour Département Informatique. Eric.Cariou@univ-pau.fr

Assembleur x86. Eric Cariou. Université de Pau et des Pays de l'adour Département Informatique. Eric.Cariou@univ-pau.fr Assembleur x86 Eric Cariou Université de Pau et des Pays de l'adour Département Informatique Eric.Cariou@univ-pau.fr 1 Niveaux de programmation Du plus bas niveau (1) au plus abstrait (6) 1) Impulsions

Plus en détail

Cours 1 : La compilation

Cours 1 : La compilation /38 Interprétation des programmes Cours 1 : La compilation Yann Régis-Gianas yrg@pps.univ-paris-diderot.fr PPS - Université Denis Diderot Paris 7 2/38 Qu est-ce que la compilation? Vous avez tous déjà

Plus en détail

Compilation. Cours n 3: Architecture du compilateur Sélection d instructions: de PP à UPP. Sandrine Blazy (d après le cours de François Pottier)

Compilation. Cours n 3: Architecture du compilateur Sélection d instructions: de PP à UPP. Sandrine Blazy (d après le cours de François Pottier) Compilation Cours n 3: Architecture du compilateur Sélection d instructions: de PP à UPP Sandrine Blazy (d après le cours de François Pottier) - 2 e année 10 novembre 2008 S.Blazy (ENSIIE) Compilation

Plus en détail

Cycle de vie d un programme

Cycle de vie d un programme Cycle de vie d un programme Ensimag 1A - Préparation au Projet C Année scolaire 2009 2010 Les objectifs de cette séance sont : de comprendre les différentes étapes de la chaîne de compilation d un programme

Plus en détail

Structure d un programme

Structure d un programme Architecture des ordinateurs Cours 6 Structure d un programme 3 décembre 2012 Archi 1/30 Programme en Assembleur Archi 2/30 Sections de données programme en assembleur = fichier texte (extension.asm) organisé

Plus en détail

Paradigme de programmation Impératif

Paradigme de programmation Impératif Paradigme de programmation Impératif La programmation impérative est caractérisée par, la programmation avec un état et des commandes qui modifient l état : Programmation impérative Procédurale = Programmation

Plus en détail

Logiciel de Base : examen de première session

Logiciel de Base : examen de première session Logiciel de Base : examen de première session ENSIMAG 1A Année scolaire 2008 2009 Consignes générales : Durée : 2h. Tous documents et calculatrices autorisés. Le barème est donné à titre indicatif. Les

Plus en détail

Récupération automatique de la

Récupération automatique de la Récupération automatique de la mémoire 1 Plan 1. La gestion du tas. 2. Marquage et balayage. 3. Comptage de références. 4. Récupération par copie. 5. Compléments. 2 Problématique Le code exécutable généré

Plus en détail

Gestion mémoire et Représentation intermédiaire

Gestion mémoire et Représentation intermédiaire Gestion mémoire et Représentation intermédiaire Pablo de Oliveira March 23, 2015 I Gestion Memoire Variables locales Les variables locales sont stockées: Soit dans un registre,

Plus en détail

Sommaire. Introduction à la compilation. Notion de compilation. Notion de compilation. Notion de compilation. Notion de compilation

Sommaire. Introduction à la compilation. Notion de compilation. Notion de compilation. Notion de compilation. Notion de compilation Introduction à la compilation A. DARGHAM Faculté des Sciences Oujda Sommaire Environnement d un compilateur Schéma global d un compilateur Caractéristiques d un bon compilateur Définition Un compilateur

Plus en détail

5.2. Introduction à la programmation en assembleur et en langage machine

5.2. Introduction à la programmation en assembleur et en langage machine 5. Couche conventionnelle. Introduction à la programmation en assembleur et en langage machine. Instructions - types, formats, champs; types d'adressage et utilisation des registres. Branchements, sauts

Plus en détail

Présentation du langage et premières fonctions

Présentation du langage et premières fonctions 1 Présentation de l interface logicielle Si les langages de haut niveau sont nombreux, nous allons travaillé cette année avec le langage Python, un langage de programmation très en vue sur internet en

Plus en détail

L assembleur avec GCC

L assembleur avec GCC L assembleur avec GCC informaticienzero 27/09/2014 Connaissez-vous les fonctions inline? On les utilise pour optimiser un code, puisque l appel de la fonction est remplacé par le corps de la fonction elle-même.

Plus en détail

Les étapes et les outils de développement des programmes

Les étapes et les outils de développement des programmes Les étapes et les outils de développement des programmes L élaboration d un programme est un travail qui se fait en plusieurs étapes nécessitant divers outils que ce chapitre tente de décrire succinctement.

Plus en détail

COMPILATEUR C CC5X POUR PIC UTILISÉ AVEC MPLAB

COMPILATEUR C CC5X POUR PIC UTILISÉ AVEC MPLAB COMPILATEUR C CC5X POUR PIC UTILISÉ AVEC MPLAB Adresse Internet du site de l éditeur : http://www.bknd.com/cc5x/index.shtml 1) GÉNÉRALITÉS Ce document se réfère à la version 3.2. Il est basé sur un autre

Plus en détail

Claude Delannoy. Exercices C++ en langage. 3 e édition. Groupe Eyrolles, 1997, 1999, 2007, ISBN : 978-2-212-12201-5

Claude Delannoy. Exercices C++ en langage. 3 e édition. Groupe Eyrolles, 1997, 1999, 2007, ISBN : 978-2-212-12201-5 Claude Delannoy Exercices en langage C++ 3 e édition Groupe Eyrolles, 1997, 1999, 2007, ISBN : 978-2-212-12201-5 Chapitre 3 Les fonctions Rappels Généralités Une fonction est un bloc d instructions éventuellement

Plus en détail

Architecture des ordinateurs

Architecture des ordinateurs Architecture des ordinateurs Cours 7 17 décembre 2012 Archi 1/1 Fonctions, suite et fin Archi 2/1 Rappel Forme générale d un sous-programme (fonction) : etiquette sousprogramme: push ebp ; empile la valeur

Plus en détail

Mise à niveau en Java

Mise à niveau en Java Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 1 Aujourd hui Eléments de base Variables, opérateurs, type d une expression

Plus en détail

Algorithmique - Techniques fondamentales de programmation Exemples en Python (nombreux exercices corrigés) - BTS, DUT informatique

Algorithmique - Techniques fondamentales de programmation Exemples en Python (nombreux exercices corrigés) - BTS, DUT informatique Introduction à l'algorithmique 1. Les fondements de l informatique 13 1.1 Architecture de Von Neumann 13 1.2 La machine de Turing 17 1.3 Représentation interne des instructions et des données 19 1.3.1

Plus en détail

Initiation au langage d assemblage x86

Initiation au langage d assemblage x86 Initiation au langage d assemblage x86 Emmanuel Saracco Easter-eggs.com esaracco@easter-eggs.com esaracco@free.fr Initiation au langage d assemblage x86 par Emmanuel Saracco Copyright 2002, 2003, 2004

Plus en détail

Code Intermédiaire. Linéarisation Canonisation.

Code Intermédiaire. Linéarisation Canonisation. 2 2 2 s 2 2 s Code Intermédiaire Génération de Code Linéarisation Canonisation. Didier Rémy Octobre 2000 http://cristal.inria.fr/ remy/poly/compil/3/ http://w3.edu.polytechnique.fr/profs/informatique/didier.remy/compil/3/

Plus en détail

Notes sur la compilation séparée

Notes sur la compilation séparée Annexe B Notes sur la compilation séparée Ce document est probablement imparfait, mais il devrait déjà donner une introduction raisonnable au sujet traité... B.1 Introduction La compilation séparée est

Plus en détail

Analyse Statique de Programmes

Analyse Statique de Programmes Analyse statique et application. Typage. Analyse de flots de données. Exemples de transformations simples de programmes au niveau source. Prépa Agreg de Maths, option Info - ENS Cachan-Bretagne Thomas

Plus en détail

Architecture des ordinateurs

Architecture des ordinateurs Architecture des ordinateurs Cours 4 5 novembre 2012 Archi 1/22 Micro-architecture Archi 2/22 Intro Comment assembler les différents circuits vus dans les cours précédents pour fabriquer un processeur?

Plus en détail

Groupe Eyrolles, 2005, ISBN : 2-212-11635-7

Groupe Eyrolles, 2005, ISBN : 2-212-11635-7 Groupe Eyrolles, 2005, ISBN : 2-212-11635-7 Processeurs et jeux d instructions CHAPITRE 4 159 Introduction au langage assembleur Dans le cadre de notre démarche ascendante, nous allons maintenant aborder

Plus en détail

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3. 1. Structure d un programme C Un programme est un ensemble de fonctions. La fonction "main" constitue le point d entrée pour l exécution. Un exemple simple : #include int main() { printf ( this

Plus en détail

Programmation en assembleur

Programmation en assembleur Programmation en assembleur Architecture des Ordinateurs Module M14 Semestre 4 Printemps 2008 Coordinateur du module M14: Younès EL Amrani Formats d'opérandes en assembleur IA32 Modes d'adressage Type

Plus en détail

Conception de circuits numériques et architecture des ordinateurs

Conception de circuits numériques et architecture des ordinateurs Conception de circuits numériques et architecture des ordinateurs Frédéric Pétrot Année universitaire 2014-2015 Structure du cours C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 Codage des nombres en base 2, logique

Plus en détail

graphelf : un outil d aide à la compréhension de fichiers ELF

graphelf : un outil d aide à la compréhension de fichiers ELF Université Paris 8 Département d Informatique 2 rue de la liberté 93526 Saint-Denis Cedex 02 Mémoire de DEA DEA Intelligence Artificielle et Optimisation Combinatoire Paris 8 - Paris 13 graphelf : un outil

Plus en détail

CONTRÔLE HORS-CLASSEMENT ÉCOLE POLYTECHNIQUE INFORMATIQUE COURS INF 431

CONTRÔLE HORS-CLASSEMENT ÉCOLE POLYTECHNIQUE INFORMATIQUE COURS INF 431 CONTRÔLE HORS-CLASSEMENT ÉCOLE POLYTECHNIQUE INFORMATIQUE COURS INF 431 GUILLAUME HANROT ET JEAN-JACQUES LÉVY On se propose de résoudre le problème de l affectation de k tâches à n employés (k > 0, n >

Plus en détail

Notes de cours. Introduction

Notes de cours. Introduction Notes de cours GEI 44 : STRUCTURES DE DONNÉES ET ALGORITHMES Chapitre 5 Application des piles Introduction Piles très utilisées dans les compilateurs Voici deux exemples de composants d un compilateur

Plus en détail

Systèmes à base de règles

Systèmes à base de règles Systèmes à base de règles 1/100 Introduction Méthode classique de représentation de connaissances (1943, règles de production). Souvent utilisé en IA et dans les systèmes experts (semblable aux raisonnements

Plus en détail

Méthodologie de programmation en assembleur. Philippe Preux

Méthodologie de programmation en assembleur. Philippe Preux Méthodologie de programmation en assembleur Philippe Preux 24 novembre 1997 Table des matières 1 Introduction 3 2 Méthodologie 4 2.1 Méthodologie............................................. 4 2.2 Aperçu

Plus en détail

Résumé Introduction Programmation Java

Résumé Introduction Programmation Java Résumé Introduction Programmation Java Concepts Un programme : séquence, test conditionnel, boucles. Objets : Les objets Java modélisent les objets d un problème donné Classe : Les objets sont crées à

Plus en détail

Conception de bases de données relationnelles

Conception de bases de données relationnelles Conception de bases de données relationnelles Langage PL/(pg)SQL Marie Szafranski 2015-2016 ensiie 1 2015-2016 ensiie 1 Aperçu de PL/(pg)SQL Aperçu de PL/(pg)SQL PL/SQL : Procedural Language for SQL (Oracle)

Plus en détail

C, seconde séance. le if then else n est pas une expression, mais une instruction ( Caml) se souvenir de:

C, seconde séance. le if then else n est pas une expression, mais une instruction ( Caml) se souvenir de: C, seconde séance le if then else n est pas une expression, mais une instruction ( Caml) se souvenir de: false, c est 0 ( \0 aussi) test d égalité: == pour printf: %d entier, %f flottant, %c caractère,

Plus en détail

Evaluation paresseuse et structure fonctionnelles persistantes efficaces. La stratégie d évaluation dans les langages fonctionnels

Evaluation paresseuse et structure fonctionnelles persistantes efficaces. La stratégie d évaluation dans les langages fonctionnels Evaluation paresseuse et structure fonctionnelles persistantes efficaces Evaluation stricte et evaluation paresseuse Les Queues de la sémaine passée : efficacité ou persistance? Les Queues révisitéés :

Plus en détail

Assembleur. Faculté I&C, André Maurer, Claude Petitpierre

Assembleur. Faculté I&C, André Maurer, Claude Petitpierre Assembleur Faculté I&C, André Maurer, Claude Petitpierre INTRODUCTION Logiciel utilisé Faculté I&C, André Maurer, Claude Petitpierre MEMOIRE Mémoire Faculté I&C, André Maurer, Claude Petitpierre Mémoire

Plus en détail

COURS PIC16F628A PREMIERE UTILISATION DU MICROCONTROLEUR

COURS PIC16F628A PREMIERE UTILISATION DU MICROCONTROLEUR PREMIERE UTILISATION DU MICROCONTROLEUR 1 Aspect matériel Le microcontrôleur PIC 16F628A est un des modèles (le plus courant et un des plus petits) de la famille des circuits microcontrôleurs de Microchip.

Plus en détail

Cours de Programmation 2

Cours de Programmation 2 Cours de Programmation 2 Programmation à moyenne et large échelle 1. Programmation modulaire 2. Programmation orientée objet 3. Programmation concurrente, distribuée 4. Programmation monadique 5. Les programmes

Plus en détail

Langage Élémentaire Algorithmique Spécifications du langage

Langage Élémentaire Algorithmique Spécifications du langage Langage Élémentaire Algorithmique Spécifications du langage Lionel Clément Version provisoire Novembre 2012 Le but de ce projet est de livrer un compilateur pour un langage élémentaire algorithmique (Léa).

Plus en détail

Informatique III: Programmation en C++ Introduction. Examens. Chargé de cours François Fleuret francois.fleuret@epfl.ch

Informatique III: Programmation en C++ Introduction. Examens. Chargé de cours François Fleuret francois.fleuret@epfl.ch Informatique III: Programmation en C++ Lundi 24 Octobre 2005 Chargé de cours François Fleuret francois.fleuret@epfl.ch Assistant Mathieu Salzmann mathieu.salzmann@epfl.ch Assistants étudiants Ali Al-Shabibi

Plus en détail

SSTIC 2009. Désobfuscation automatique de binaires. Alexandre Gazet. Yoann Guillot. Et autres idyles bucoliques...

SSTIC 2009. Désobfuscation automatique de binaires. Alexandre Gazet. Yoann Guillot. Et autres idyles bucoliques... Désobfuscation automatique de binaires Et autres idyles bucoliques... Alexandre Gazet Sogeti / ESEC R&D alexandre.gazet(at)sogeti.com Yoann Guillot Sogeti / ESEC R&D yoann.guillot(at)sogeti.com SSTIC 2009

Plus en détail

Objectifs du cours d aujourd hui. Informatique I : Cours d introduction à l informatique et à la programmation Structures de Données Abstraites & Tris

Objectifs du cours d aujourd hui. Informatique I : Cours d introduction à l informatique et à la programmation Structures de Données Abstraites & Tris Objectifs du cours d aujourd hui Informatique I : Cours d introduction à l informatique et à la programmation Structures de Données Abstraites & Tris Continuer l approfondissement de la programmation de

Plus en détail

Dépassement de tampon

Dépassement de tampon Dépassement de tampon En informatique, un dépassement de tampon ou débordement de tampon (en anglais, buffer overflow) est un bug par lequel un processus, lors de l'écriture dans un tampon, écrit à l'extérieur

Plus en détail

Tableaux (introduction) et types de base

Tableaux (introduction) et types de base Tableaux (introduction) et types de base A. Motivation..................................................... 4 B. Les tableaux.................................................... 5 C. Construction des tableaux.......................................

Plus en détail

2001-2002. UFR Mathématiques de la Décision. Première Année de DEUG Sciences et Technologie mention MASS. Informatique. Volume I.

2001-2002. UFR Mathématiques de la Décision. Première Année de DEUG Sciences et Technologie mention MASS. Informatique. Volume I. 2001-2002 UFR Mathématiques de la Décision Première Année de DEUG Sciences et Technologie mention MASS Informatique Volume I Fabrice Rossi c Fabrice Rossi, 1997-2002 Conditions de distribution et de copie

Plus en détail

Le langage Forth. Brique ROSE. Samuel Tardieu sam@rfc1149.net. École Nationale Supérieure des Télécommunications

Le langage Forth. Brique ROSE. Samuel Tardieu sam@rfc1149.net. École Nationale Supérieure des Télécommunications Le langage Forth Brique ROSE Samuel Tardieu sam@rfc1149.net École Nationale Supérieure des Télécommunications Samuel Tardieu (ENST) Le langage Forth 1 / 26 Qu est-ce que Forth? Langage sans syntaxe Mots

Plus en détail

FAILLES APPLICATIVES INTRODUCTION & EXPLOITATION. Projet Tutorat Réseau / Sécurité INSA de Lyon 2011

FAILLES APPLICATIVES INTRODUCTION & EXPLOITATION. Projet Tutorat Réseau / Sécurité INSA de Lyon 2011 FAILLES APPLICATIVES INTRODUCTION & EXPLOITATION Projet Tutorat Réseau / Sécurité INSA de Lyon 2011 Lucas Bouillot Arnaud Kleinpeter Gaétan Bouquet Xavier Paquin INTRODUCTION INTRODUCTION Qu est ce qu

Plus en détail

Génération de code : langages objets Gestion mémoire 2 novembre 2011

Génération de code : langages objets Gestion mémoire 2 novembre 2011 Génération de code : langages objets Gestion mémoire 2 novembre 2011 1 Compilation d un langage objet Représentation des classes et des objets Héritage multiple Appartenance à une classe 2 Environnement

Plus en détail

Programmation en assembleur Gnu sur des microprocesseurs de la gamme Intel (du 80386 au Pentium-Pro)

Programmation en assembleur Gnu sur des microprocesseurs de la gamme Intel (du 80386 au Pentium-Pro) Programmation en assembleur Gnu sur des microprocesseurs de la gamme Intel (du 80386 au Pentium-Pro) Ensimag et Section Télécom commune à l Ensimag et l Erg Première année. Brouillon : vendredi 13 octobre

Plus en détail

III - PROGRAMMATION EN ASSEMBLEUR

III - PROGRAMMATION EN ASSEMBLEUR III - PROGRAMMATION EN ASSEMBLEUR 3.1 Introduction à la programmation en assembleur Pour programmer un ordinateur on utilise généralement des langages dits évolués ou de haut niveau : C, C++, Java, Basic,

Plus en détail

Les structures de données. Rajae El Ouazzani

Les structures de données. Rajae El Ouazzani Les structures de données Rajae El Ouazzani La récursivité 2 Définition Une procédure ou une fonction est dite récursive si elle fait appel à elle même, directement ou indirectement. 3 Exemple : Réalisation

Plus en détail

Conception et exploitation des processeurs

Conception et exploitation des processeurs Chargé de cours : Frédéric Pétrot Équipe pédagogique : Stéphane Mancini, Luc Michel, Olivier Muller, Christophe Rippert, Sebastien Viardot Année universitaire 2012-2013 Structure du cours C1 C2 C3 C4 aux

Plus en détail

FSAB 1402 - Suggestions de lecture

FSAB 1402 - Suggestions de lecture FSAB 1402 - Suggestions de lecture 2006 Concepts, techniques and models of computer programming Cours 1 - Intro Chapitre 1 (sections 1.1, 1.2, 1.3, pages 1-3) Introduction aux concepts de base Chapitre

Plus en détail