Programmation bas niveau
Contrˆole continu TP
L2 informatique
1 Consignes
`
A r´ealiser en monome ou en binome.
`
A rendre par e-mail au plus tard le dimanche 16 novembre 2014 `a minuit :
Sujet de l’e-mail : [Prog. bas niveau] Devoir TP
Corps de l’e-mail : Pr´enom-NOM du ou des ´etudiants concern´es
Pi`eces jointes : le fichier jasmin.
2 Sujet
Le chiffrement de C´esar est une technique de cryptographie qui permet de coder des messages
de la fa¸con suivante. ´
Etant donn´e un entier n, on d´ecale chaque lettre du message de npositions
en avant dans l’alphabet. Par exemple, pour n= 3, le message programmation bas niveau est
cod´e en surjudppdwlrq edv qlyhdx.
´
Ecrivez en jasmin un programme nomm´e Cesar.j qui permet de coder ou de d´ecoder un
message donn´e en utilisant un d´ecalage donn´e. Le programme devra ˆetre lanc´e d’une des fa¸cons
suivantes : pour coder avec un d´ecalage de 3,
% java Cesar -c 3 "programmation bas niveau"
et pour d´ecoder avec un d´ecalage de 3,
% java Cesar -d 3 "surjudppdwlrq edv qlyhdx"
Vous pr´evoirez les ´el´ements 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´erent de -c et de -d, alors afficher
le message pr´ec´edent et quitter le programme ;
respecter la casse : pour un d´ecalage de 3, la lettre pest cod´ee par set la lettre Ppar S,
idem pour le d´ecodage ;
tout caract`ere du message qui n’est pas une lettre ne doit pas ˆetre coe ou d´ecod´e.
3 Quelques ´el´ements techniques
Transformation de la chaˆıne de caract`eres "3" en l’entier 3: placer la chaˆıne au sommet de
la pile et faire appel `a l’instruction
invokestatic java/lang/Integer/parseInt(Ljava/lang/String;)I
Les caract`eres sont manipul´es 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’´egalit´e de deux chaˆınes de caract`eres : placer les deux chaˆınes au sommet de la pile
et faire appel `a 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 ´el´ements d’une chaˆıne de caract`eres sont indic´es comme ceux d’un tableau : le premier
caract`ere a pour indice 0, le second a pour indice 1, . . ., le dernier a pour indice n1, o`u n
est le nombre de caract`eres de la chaˆıne.
Le nombre de caract`eres d’une chaˆıne est obtenu de la fa¸con suivante : placer la chaˆıne au
sommet de la pile et faire appel `a l’instruction :
invokevirtual java/lang/String/length()I
Obtention du caract`ere d’indice id’une chaˆıne : placer la chaˆıne au sommet de la pile, puis
l’indice, et faire appel `a l’instruction
invokevirtual java/lang/String/charAt(I)C
2
1 / 2 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 !