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