Programmation Bas Niveau



Documents pareils
Machines Virtuelles Cours 3 : La machine virtuelle Java

La JVM. La machine virtuelle Java. La JVM. La JVM

Une introduction à Java

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Machines virtuelles. Brique ASC. Samuel Tardieu Samuel Tardieu (ENST) Machines virtuelles 1 / 40

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Plan du cours. Historique du langage Nouveautés de Java 7

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Bases de programmation. Cours 5. Structurer les données

as Architecture des Systèmes d Information

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Programmer en JAVA. par Tama

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

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

JVM. .class, chargeur et instances de Class Jeu d instructions. Cnam NFP121 jean-michel Douin, douin au cnam pt fr version 13 Décembre de l'an 7 JVM

La technologie Java Card TM

Java Avancé. Le langage Java. Rémi Forax

RN2-Programmation Orientée Objet - JAVA CH 1 Introduction à la POO et Java

INITIATION AU LANGAGE JAVA

Java c est quoi? Java pourquoi?

Java Licence Professionnelle CISII,

DG-ADAJ: Une plateforme Desktop Grid

Programmation assembleur : aperçu

Rappels Entrées -Sorties

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

La carte à puce. Jean-Philippe Babau

Java Licence Professionnelle CISII,

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Cours d Algorithmique et de Langage C v 3.0

Étude de l interopérabilité de deux langages de programmation basée sur la machine virtuelle de Java

Langage Java. Classe de première SI

Mécanismes pour la migration de processus

PROGRAMMATION PAR OBJETS

Assembleur i8086. Philippe Preux IUT Informatique du Littoral. Année universitaire 95 96

Programmation Objet Java Correction

UE C avancé cours 1: introduction et révisions

Structure d un programme

Informatique Générale

Cours 1: Java et les objets

TP, première séquence d exercices.

Programmation en Java IUT GEII (MC-II1) 1

DU BINAIRE AU MICROPROCESSEUR - D ANGELIS CIRCUITS CONFIGURABLES NOTION DE PROGRAMMATION


UE Programmation Impérative Licence 2ème Année

Cours d initiation à la programmation en C++ Johann Cuenin

Généralités sur le Langage Java et éléments syntaxiques.

INF 321 : mémento de la syntaxe de Java

Logiciel de Base. I. Représentation des nombres

Architecture des ordinateurs

Introduction au langage C

Vérification formelle de la plate-forme Java Card

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Claude Delannoy. 3 e édition C++

Carte à puce Java Card: Protection du code contre les attaques en faute

TP1 : Initiation à Java et Eclipse

Rappels d architecture

Structure fonctionnelle d un SGBD

Programmation C. Apprendre à développer des programmes simples dans le langage C

Analyse de sécurité de logiciels système par typage statique

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Utilisation d objets : String et ArrayList

Java - la plateforme

LES TYPES DE DONNÉES DU LANGAGE PASCAL

ALGORITHMIQUE ET PROGRAMMATION En C

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Programmation en langage C

Premiers Pas en Programmation Objet : les Classes et les Objets

Programmation Orientée Objet Java

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Chapitre I Notions de base et outils de travail

Architecture de l ordinateur

Machines virtuelles Cours 1 : Introduction

TP1. Outils Java Eléments de correction

Argument-fetching dataflow machine de G.R. Gao et J.B. Dennis (McGill, 1988) = machine dataflow sans flux de données

Initiation. àl algorithmique et à la programmation. en C

Développement Logiciel

ACTIVITÉ DE PROGRAMMATION

V- Manipulations de nombres en binaire

Introduction à Java. Philippe Genoud.

Atelier C TIA Portal CTIA04 : Programmation des automates S7-300 Opérations numériques

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Architecture des ordinateurs

Compilation (INF 564)

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

CM2 L architecture MIPS32

Cours 1 : La compilation

Chapitre VI- La validation de la composition.

Programmation Orientée Objet

Chapitre 10 Arithmétique réelle

Aide mémoire UML & Java 1ère partie : Introduction. marc.lemaire@u-cergy.fr

Techniques de stockage. Techniques de stockage, P. Rigaux p.1/43

Transcription:

Programmation Bas Niveau Basé en grande partie sur les notes de Etienne Payet et Fausto Spoto 1 Université de La Réunion FST - L2 Info Introduction 2

Module Machines virtuelles (Java), bytecode, etc. 30h : 10h CM, 8h TD, 12h TP Evaluation: TP noté + exam final 3 Kezaco? 6 générations de langages de programmation Génération 1 : Langage machine avec Instructions binaires en programmation directe Génération 2 : Instructions sous forme symbolique (mnémoniques) plus compréhensible pour l homme, en programmation indirecte au travers un programme (assembleur) Génération 3 : Langages indépendants du processeur. Proches des langues parlées (anglais). Langages procéduraux, descriptions des opérations à effectuer pour résoudre un problème 4

Kezaco? 6 générations de langages de programmation Génération 4 : Langages descriptifs, très fortement lié à un domaine (base de données, tables de calcul) Génération 5 : Langages descriptifs pour la programmation de systèmes experts Génération 6 : Orienté objet. Toutes les informations nécessaires à la résolution d un problème sont réunies dans un objet 5 Type de langages Langages des générations 1 et 2: langages de bas niveau (orienté machine) - Proche du matériel Langages des générations 3 à 6 : langages de haut niveau (orienté problème) - Eloigné du matériel 6

Machines Virtuelles 7 Exemple 8

Définition Machine virtuelle de haut niveau: programme qui exécute un autre programme avec le fonctionnement et la structure d une machine physique traditionnelle La VM s exécute elle sur une machine physique et est spécifique à chaque plateforme. 9 Exemple 10

Avantages Portabilité Richesse bibliothèque Moins de limitations Facilité de MAJ Sécurité 11 Inconvénients Vitesse d éxécution Impossibilité de contrôler le materiel directement 12

Et nous? Bytecode!!! 13 Bytecode 14

Définition Opcode: (operation code) code d une opération (add, sub, etc.) du langage machine Bytecode: opcode de la taille d un byte (octet) opcode d une VM par extension, langage d une machine virtuelle Ex: Java Virtual Machine 15 Java sans Java? Bytecode sans Java : (Jython, etc.) Assembleur de bytecode : (Jasmin, Oolong) 16

Assembleur Langage d assemblage (Langage assembleur ou encore assembleur): forme plus lisible par un humain du langage machine, associant un mnémonique à chaque opcode (ex: add, sub, etc.) Assembleur: programme qui convertit le mnémonique en langage machine 17 Jasmin http://jasmin.sourceforge.net/ 18

Structure JVM 19 Lire un.class javap -c nomdefichier -c : pour avoir le détail des méthodes nomdefichier : un fichier.class (ne pas ajouter l extension) A tester ;) 20

Types de bases Type Descrip de type - mnémonique 21 Descrip de type - methodes entier signés sur 8 bits byte b B (-2^7 à 2^7-1) entier signés sur 16 bits short s S (-2^15 à 2^15-1) int i I entier signés sur 32 bits long l J entier signés sur 64 bits char c C entiers sur 16 bits (UNICODE : 0 à 65535) float f F flottants 32 bits double d D flottants 64 bits class a L...; référence à un objet Piles La pile est l endroit où sont rangées les frames (cadres) d invocation des méthodes. Elle est gérée par les trois pointeurs frame, vars et optop. Il y a une pile par thread. ex : empiler 5 emplier 10 addition Notation polonaise inverse (notation post-fixée) 22

NPI 3 x (4 + 7) s écrit: 4 [Ent] 7 + 3 x 3 [Ent] 4 [Ent] 7 + x 23 qq bytecode Type Addition Soustraction Multiplication Division Reste div. entière mnémonique iadd, ladd, fadd, dadd isub, lsub, fsub, dsub imul, lmul, fmul, dmul idiv, ldiv, fdiv, ddiv irem, lrem 24

Jasmin 25 Projet Jasmin http://jasmin.sourceforge.net/ 1996 télécharger jasmin-2.4.zip (1.4 MB) Exemples : Helloworld.j, Count.j, etc. java -jar jasmin.jar examples/count.j crée un fichier binaire Count.class (non lisilble directement) qui peut tourner sur une JVM java examples/count Attention : on n écrit pas le.class 26

Syntaxe Jasmin Exemple bipush 5 5 bipush 3 3 5 iadd 8 27 Syntaxe Jasmin Exemple bipush 4 4 bipush 3 3 4 imul (12) / idiv (1) / isub (1) / irem (1) 28

Syntaxe Jasmin Commentaire point-virgule précédé d un caractère blanc (espace, tab, retour à la ligne) Exemple ; addition de deux nbre bipush 4 ; 1ère val bipush 3 ; 2ème val imul ; multiplication 29 Syntaxe Jasmin Format général d une instruction mnémonique paramètre(s) ; commentaire Directives commence par un point exemple:.class public MaClass ;pour indiquer que le fichier définit la class MaClass.limit stack 2 ;fixe la taille maxi de la pile à 2 30

Quelques exemples Expressions arithmétiques (à faire au tableau ^^ )... 31 Rappel Java : 4 type d entiers long (64): 9,223,372,036,854,775,808 à 9, 223,372,036,854,775,807 int (32): 2,147,483,648 to 2,147,483,647 short (16): 32,768 to 32,767 byte (8): 128 to 127 32

Syntaxe b: byte bipush 37 -> ok bipush 300 -> erreur s: short sipush 300 -> ok sipush 50000 -> erreur 33 Constante ldc arg: load constant (byte, short, int et float) ldc 50000, ldc 37, ldc 300, ldc 3.14 -> ok ldc2_w arg: load constant (long et double) ldc2_w 3.1415 xconst_n: (pas d arg) avec x = type, et n = valeur entre -1 (m1) et 5 pour int : iconst_0 n = valeur entre 0 et 1 pour long/double n = valeur entre 0 et 2 pour float aconst_null 34

Affichage en Java java.lang.system.out.println (8) java.lang: package System.out: champ statique «out» de la classe system du package println: nom de la méthode (8): paramètres javap java.lang.system public static final java.io.printstream out; 35 Affichage en Bytecode getstatic java/lang/system/out Ljava/io/PrintStream getstatic : obtenir un champ statique java/lang/system/out : le champ statique Ljava/io/PrintStream : le type de champ statique bipush 8 invokevirtual java/io/printstream/println (I) V invokevirtual : appel de méthode java/io/printstream/println : méthode (I) V : I = type du paramètre (int), V = type du résulat (void) 36

Exemple getstatic java/lang/system/out Ljava/io/PrintStream; bipush 4 bipush 3 idiv invokevirtual java/io/printstream/println(i)v 37 Conversion de type En Java: 2+3.1 -> Ok, 2 est converti automatiquement (promotion de type) en 2.0 puis l addition est faite En Java Bytecode: pas de promotion de type, il faut explicitement faire les conversions avec i2f, i2d, i2l, i2b, i2c, i2s l2f, l2d, l2i f2l, f2d, f2i d2l, d2f, d2i 38

Squelette simple prg.class public examples/addition.super java/lang/object.method public static main([ljava/lang/string;)v ; VOTRE CODE ICI return.end method 39 Fixer la taille pile Directive «.limit stack n» au début de main 40

Dupliquer sommet pile dup dup2 dup_x1 dup_x2 dup2_x1 dup2_x2 41 Manipulation pile pop (supprime) pop2 swap (permute) 42

Etiquettes - Label nomlabel : nomlabel suivi du caractère : nomlabel = séquence de caractères ne commençant pas par un chiffre, sans = ;. -, différent d un nom d une instruction/directive Sert à nommer un point précis du programme Utilisé dans les instructions branchements 43 Branchements Pour aller à un point précis (label) du programme goto <label> ex de boucle infinie Label1 : goto Label1 44

Branchements iftest <label> Va au label si le Test est vrai... (byte, short, int, char) Test = Entre 2 var: _icmpgt (>), _icmplt (<), _icmpge ( ), _icmple ( ), _icmpeq (=), _icmpne (#) Entre var et 0: gt (>), lt (<), ge ( ), le ( ), eq (=), ne (#) 45 Branchements long : lcmp condition : v1 et v2 long resultat: v1 et v2 retiré de la pile et remplacé par: 1 si v1 > v2 0 si v1 = v2-1 si v1 < v2 (à utiliser avec ifgt, iflt, ifeq,...) float : fcmpg fcmpl - double : dcmpg dcmpl 46

Variables locales Stockage de données de la JVM Pile Tableau de variables locales (à la méthode en cours d éxecution) : 65,536 local variables Limitable par «.limit locals 5» 47 Variables locales Tableau de variables locales (à la méthode en cours d éxecution) indexé par des entiers Indice première case : 0 istore, lstore, fstore, dstore retire la valeur au sommet de la pile et la stocke dans une variable locale iload, lload, fload, dload copie le contenu d une variable au sommet de la pile 48

Exemple iconst_2 istore 0... iload 0 49 Notes Double et Long prennent l équivalent de 2 variables De 0 à 3: on peut utiliser «fload_3» au lieu de «fload 3» Variables non typés le slot 2 peut être int au début, float au milieu et 1/2 double à la fin du prg) 50

Char Caractères : UNICODE getstatic java/lang/system/out Ljava/io/PrintStream; ldc 65 ; equivalent de «A» en unicode invokevirtual java/io/printstream/println(c)v 51 String Chaîne de caractères classe string (java.lang.string) liste des méthodes avec «javap java.lang.string» constantes avec les " " ldc "coucou" Affichage avec Ljava/lang/String; invokevirtual java/io/printstream/println(ljava/lang/string;)v Stockage aload, astore 52

Notes 5 types de bases int (32-bit signed integer) long (64-bit signed integer) float (32-bit floating-point number) double (64-bit double precision floating-point number) reference 53 Notes 54

Notes reference (astore, aload) référence à un objet (Car, Rectangle, String, etc...) = pointeur 55 Méthodes Chaque méthode dispose de sa propre pile et tableau de variable locale Définition.method public static nom(type_paramètres) type_résultat.limit stack 99.limit locals 99 ; VOTRE CODE return.end method 56

Méthodes Les paramètres stockés dans les var locales de la méthodes Appel à une méthode Placer les paramètres au sommet de la pile invokestatic nomclass/ nommethod(type_param)type_resul Le résultat (s il y en a un) est stocké au sommet de la pile, en remplacement des paramètres 57 Tableaux (Arrays) Tableau= suite de case mémoire adjacentes En JBC: Tous les éléments d un tableau sont du même type L indice du premier élement est 0 Les tableaux ont une taille fixe et sont de la forme : 4 octets (32 Bits) Taille Type eléments elt0 elt1 elt2... 58

Tableaux Création d un tableau: newarray <type_elements> la taille doit être spécifié avant, les éléments sont initialisés à une valeur par défaut (ex. pour int: 0) bipush 6 newarray int Place en haut de la pile une référence vers le tableau 6 int 0 0 0 0 0 0 59 Tableaux arraylength Prend la référence d un tableau au sommet de la pile et la remplace par la taille du tableau bastore, aastore, fastore, dastore, etc. Ecrit une valeur dans le tableau (voir exemple) baload, aaload, faload, daload, etc. Lis une valeur dans le tableau (voir exemple) 60

Exemples bipush 6 newarray float getstatic java/lang/system/out Ljava/io/PrintStream; swap arraylength invokevirtual java/io/printstream/println(i)v 61 Exemples bipush 6 newarray float ; création d un tableau de 6 floats astore 0 ; pour garder l adresse en mémoire du tableau aload 0 ; pour faire le rappel du tableau iconst_2 ldc 7.0 fastore ; stockage de 7.0 dans la case 2... aload 0 ; pour faire le rappel du tableau iconst_2 faload ; pour mettre au sommet de la pile la valeur de la case 2. 62

Tableaux & méthodes [type_éléments.method public static affichertableaufloat ([F)V.method public static creertableaufloat (IF)[F.method public static main([ljava/lang/string;)v 63 Paramètres en LC % java monfichier test1 test2.method public static main([ljava/lang/string;)v.limit stack 5.limit locals 10 getstatic java/lang/system/out Ljava/io/PrintStream; aload 0 iconst_1 aaload invokevirtual java/io/printstream/println(ljava/lang/string;)v return.end method 64

A vous de jouer TP2 à refaire avec des paramètres en ligne de commandes pour Paques Factorielle Fibonacci Schéma 65 Références 66

A lire... http://flylib.com/books/en/2.354.1.1/1/ http://www.artima.com/insidejvm/ed2/index.html http://www.javafr.com/tutoriaux/java-bytecode-comprendre-resultatvos-compilations_110.aspx http://www.cs.sjsu.edu/~pearce/modules/lectures/co/jvm/jasmin/ http://en.wikipedia.org/wiki/java_bytecode_instruction_listings http://andrei.gmxhome.de/bytecode/index.html 67 Fin 68