Programmation bas niveau - L2 informatique Premier Contrôle

Nom : N° Etudiant:
1/3
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.
2. Qu’est-ce qu’une machine virtuelle ? Citer au moins deux avantages et un inconvénient d’une telle
machine.
3. Qu’est-ce qu’un bytecode ? Donner la commande Java générant du bytecode à partir d’un fichier écrit
en java.
4. Qu’est-ce qu’un langage assembleur ? Citer un exemple de langage assembleur.
5. Citer quatre types de base de la machine virtuelle Java.
Exercice 2 : Analyse de code (5 points)
Trouver, corriger et expliquer chacune des 5 erreurs du programme ci-dessous.
Un langage de programmation bas niveau est un langage proche du matériel : son jeu dinstruction est
proche de celui de la machine sur lequel il sexécute. Le langage Jasmin est un langage de bas niveau.
Python est un langage de haut niveau.
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 me code quelque soit le système dexploitation considéré) et la richesse des bibliothèques de
fonctions. Linconvénient est la vitesse dexécution : il y a une interprétation supplémentaire du code.
Un bytecode est le code dune opération sur 1 octet (byte). La commande Java générant du bytecode à
partir dune fichier .java est javac.
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.
Types de base de la JVM : byte, short, int, long, char, float, double, class.
Nom : N° Etudiant:
2/3
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
.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 ny a quun 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.
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
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
Nom : N° Etudiant:
3/3
.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
1 / 3 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !