Programmation bas niveau - L2 informatique Premier Contrôle

publicité
Nom :
N° Etudiant:
Programmation bas niveau - L2 informatique
Premier Contrôle Continu Ecrit - Correction
Jeudi 31 octobre 2013 (1 heure – aucun document autorisé)
Exercice 1 : Questions de cours (5 points)
Répondre en quelques lignes à chacune des questions ci-dessous.
1. Qu’est-ce qu’un langage de programmation bas niveau ? Donner un exemple de langage de bas niveau et
un exemple de langage de haut niveau.
Un langage de programmation bas niveau est un langage proche du matériel : son jeu d’instruction est
proche de celui de la machine sur lequel il s’exécute. Le langage Jasmin est un langage de bas niveau.
Python est un langage de haut niveau.
2. Qu’est-ce qu’une machine virtuelle ? Citer au moins deux avantages et un inconvénient d’une telle
machine.
Une machine virtuelle est un programme exécutant un autre programme avec le fonctionnement et la
structure d’une machine physique traditionnelle. Les avantages sont la portabilité (le programme exécuté
a le même code quelque soit le système d’exploitation considéré) et la richesse des bibliothèques de
fonctions. L’inconvénient est la vitesse d’exécution : il y a une interprétation supplémentaire du code.
3.
Qu’est-ce qu’un bytecode ? Donner la commande Java générant du bytecode à partir d’un fichier écrit
en java.
Un bytecode est le code d’une opération sur 1 octet (byte). La commande Java générant du bytecode à
partir d’une fichier .java est javac.
4.
Qu’est-ce qu’un langage assembleur ? Citer un exemple de langage assembleur.
Un langage assembleur est un langage composé de mnémoniques correspondant à un langage machine
binaire. Il est donc lisible et manipulable par des humains. Le langage Jasmin est un langage
assembleur.
5.
Citer quatre types de base de la machine virtuelle Java.
Types de base de la JVM : byte, short, int, long, char, float, double, class.
Exercice 2 : Analyse de code (5 points)
Trouver, corriger et expliquer chacune des 5 erreurs du programme ci-dessous.
1/3
Nom :
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
N° Etudiant:
.class public prg1
.super java/lang/Object
.method public static main([Ljava/lang/String;)V
.limit stack 35 ; la pile compte 5 éléments max : out, nb1, 5.0, 5.0, 5.0
getstatic java/lang/System/out Ljava/io/PrintStream;
bipush 4
bipush 3
idiv ; ajouter i2f après ça
ldc 3.141593
fmul ; on multiplie un entier par un flottant, on met i2f avant
bipush ldc 5.0 ; bipush ne peut traiter que des entiers
dup
dup
fmul
fmul
fmul
fmul ; ce fmul est en trop : il n’y a qu’un seul nombre dans la pile à ce moment
invokevirtual java/io/PrintStream/println(IF)V ; on affiche un flottant, pas un entier
return
.end method
Exercice 3 : Programmation (3 points)
Le volume V d’un cylindre dont la hauteur est h et dont la base a pour rayon r est
𝑽 = 𝛑 𝐫𝟐 𝐡
Ecrire une suite d’instructions jasmin qui calcule et affiche à l’écran le volume d’un cylindre dont
la hauteur est h = 7 et dont la base a pour rayon r = 3.
getstatic java/lang/System/out Ljava/io/PrintStream;
bipush 3
bipush 3
imul
bipush 7
imul
i2f
ldc 3.1415
fmul
invokevirtual java/io/PrintStream/println(F)V
Exercice 4 : Programmation (7 points)
Ecrire un programme jasmin qui implémente l’algorithme ci-dessous.
n = 135
tant que n > 1 :
afficher n
si n est multiple de 3 alors n = n/3
sinon n = 2 × n + 1
afficher n
2/3
Nom :
N° Etudiant:
.class public Programme
.super java/lang/Object
.method public static main([Ljava/lang/String;)V
.limit stack 2
.limit locals 2
; le nombre dont on part:
sipush 135
istore 1
start:
iload 1
iconst_1
if_icmple end
getstatic java/lang/System/out Ljava/io/PrintStream;
iload 1
invokevirtual java/io/PrintStream/println(I)V
iload 1
iconst_3
irem
ifne calcul2
calcul1:
iload 1
iconst_3
idiv
istore 1
goto start
calcul2:
iload 1
iconst_2
imul
istore 1
iinc 1 1
goto start
end:
getstatic java/lang/System/out Ljava/io/PrintStream;
iload 1
invokevirtual java/io/PrintStream/println(I)V
return
.end method
3/3
Téléchargement