Programmation bas niveau Contrôle continu TP

publicité
Programmation bas niveau
Contrôle continu TP
L2 informatique
1
Consignes
– À réaliser en monome ou en binome.
– À rendre par e-mail au plus tard le dimanche 16 novembre 2014 à minuit :
– Sujet de l’e-mail : [Prog. bas niveau] Devoir TP
– Corps de l’e-mail : Prénom-NOM du ou des étudiants concernés
– Pièces jointes : le fichier jasmin.
2
Sujet
Le chiffrement de César est une technique de cryptographie qui permet de coder des messages
de la façon suivante. Étant donné un entier n, on décale chaque lettre du message de n positions
en avant dans l’alphabet. Par exemple, pour n = 3, le message programmation bas niveau est
codé en surjudppdwlrq edv qlyhdx.
Écrivez en jasmin un programme nommé Cesar.j qui permet de coder ou de décoder un
message donné en utilisant un décalage donné. Le programme devra être lancé d’une des façons
suivantes : pour coder avec un décalage de 3,
% java Cesar -c 3 "programmation bas niveau"
et pour décoder avec un décalage de 3,
% java Cesar -d 3 "surjudppdwlrq edv qlyhdx"
Vous prévoirez les éléments suivants :
– si le nombre d’arguments sur la ligne de commandes est strictement plus petit que 3, alors
afficher le message :
usage : java Cesar <-c ou -d> <decalage> <message>
et quitter le programme ;
– si le premier argument sur la ligne de commandes est différent de -c et de -d, alors afficher
le message précédent et quitter le programme ;
– respecter la casse : pour un décalage de 3, la lettre p est codée par s et la lettre P par S,
idem pour le décodage ;
– tout caractère du message qui n’est pas une lettre ne doit pas être codé ou décodé.
3
Quelques éléments techniques
– Transformation de la chaı̂ne de caractères "3" en l’entier 3 : placer la chaı̂ne au sommet de
la pile et faire appel à l’instruction
invokestatic java/lang/Integer/parseInt(Ljava/lang/String;)I
– Les caractères sont manipulés au moyen de leur code ASCII. Par exemple,
1
–
–
–
–
–
getstatic java/lang/System/out Ljava/io/PrintStream;
bipush 65
invokevirtual java/io/PrintStream/println(C)V
affiche la lettre A (code ASCII de A = 65) et
getstatic java/lang/System/out Ljava/io/PrintStream;
bipush 65
iconst_3
iadd
invokevirtual java/io/PrintStream/println(C)V
affiche la lettre D (code ASCII de D = 68).
Table ASCII : taper ascii table dans Google.
Test d’égalité de deux chaı̂nes de caractères : placer les deux chaı̂nes au sommet de la pile
et faire appel à l’instruction
invokevirtual java/lang/String/equals(Ljava/lang/Object;)Z
qui renvoie 0 si le test est faux et 1 si le test est vrai.
Les éléments d’une chaı̂ne de caractères sont indicés comme ceux d’un tableau : le premier
caractère a pour indice 0, le second a pour indice 1, . . ., le dernier a pour indice n − 1, où n
est le nombre de caractères de la chaı̂ne.
Le nombre de caractères d’une chaı̂ne est obtenu de la façon suivante : placer la chaı̂ne au
sommet de la pile et faire appel à l’instruction :
invokevirtual java/lang/String/length()I
Obtention du caractère d’indice i d’une chaı̂ne : placer la chaı̂ne au sommet de la pile, puis
l’indice, et faire appel à l’instruction
invokevirtual java/lang/String/charAt(I)C
2
Téléchargement