Correction - MIAGE de Nantes
Transcription
Correction - MIAGE de Nantes
Université de Nantes Région des Pays de La Loire Feuille de travaux dirigés no 3 Codage des instructions Exercice 3.1 On souhaite pouvoir programmer un petit robot-tortue comprenant les instructions suivantes : – avancer n, où n est un entier positif correspondant au nombre de pas à effectuer en ligne droite sur une grille (voir dessin ci-dessous) ; – gauche a et droite a, où a est un entier positif compris entre 0 et 180 représentant un angle exprimé en degrés ; – trace b, demandant à la tortue de laisser une trace sur le sol (b = 1) ou pas (b = 0). Un exemple de programme correspondant au dessin ci-dessous est le suivant : trace 1; avancer 5; droite 90; avancer 4; droite 90; avancer 2; droite 90; droite 90; avancer 4; droite 90; avancer 3; droite 90; avancer 1 avancer 5; droite 90; avancer 3; droite 90; avancer 2; 1. Proposer un codage binaire de taille minimale pour les instructions reconnues par la tortue ; 2. Écrire le programme ci-dessus en binaire avec le codage proposé à la question précédente ; 3. On veut étendre les possibilités de l’instruction trace pour que la trace laissée puisse désormais être le dessin d’une lettre codée en ASCII. Que faut-il changer au codage précédent pour prendre en compte cette extension ? 4. On veut désormais pouvoir utiliser des structures de boucle de façon à réécrire le code précédent de la façon suivante : trace 1; r0 <- 5; répéter avancer r0; droite 90; avancer r0; droite 90; dec r0; jusqu’à r0 = 1; avancer 1; Pour cela, on ajoute au processeur de la tortue un banc de 4 registres r0 , r1 , r2 , r3 de 8 bits et on étend le jeu d’instructions de la tortue pour obtenir celui ci-dessous : Sens avancer n gauche n droite n trace n load ri , n dec ri bne ri , n, a avancer ri gauche ri droite ri trace ri ri ← n ri ← ri − 1 sauter à l’adresse a si ri 6= n Projet soutenu par le Conseil Régional Des Pays de La Loire dans le cadre des projets ENRC 2008-2009 1/3 où n est une constante entière positive sur 8 bits, ri est le registre i et a est une adresse relative dans la mémoire de la tortue, codée en complément à 2 sur 6 bits. Proposer un nouveau codage permettant de représenter en mémoire un tel programme ; 5. Donner la représentation du programme précédent en mémoire ; 6. Quelle est la taille maximale d’une boucle avec le codage utilisé ? 5 Correction 1. Codage sur 10 bits : op instr 0 avancer gauche droite trace 1 2 3 10 bits op n/d/0/1 2. Programme : 1100000001 0000000101 1001011010 0000000101 1001011010 0000000100 1001011010 0000000100 1001011010 0000000011 1001011010 0000000011 1001011010 0000000010 1001011010 0000000010 1001011010 0000000001 # # # # # # # # # # # # # # # # # # trace 1 avancer 5 droite 90 avancer 5 droite 90 avancer 4 droite 90 avancer 4 droite 90 avancer 3 droite 90 avancer 3 droite 90 avancer 2 droite 90 avancer 2 droite 90 avancer 1 3. Rien. Il suffit que le paramètre de trace soit désormais un entier sur 8 bits codé dans la partie données de l’instruction. Cela suppose cependant que l’on considère les caractères de code ASCII 0 et 1 comme invalides ; 4. Codage sur 20 bits : op instr 0 avancer n 1 avancer r 2 gauche n 3 gauche r 4 droite n 20 bits 5 droite r 6 trace n 4 2 8 6 7 trace r 8 load ri, n 9 dec ri op ri n a 10 bne ri, n, a 5. Programme : 0110 00 00000001 000000 # trace 1 1000 00 00000101 000000 # r0 <- 5 0001 00 00000000 000000 # avancer r0 Projet soutenu par le Conseil Régional Des Pays de La Loire dans le cadre des projets ENRC 2008-2009 2/3 0100 0001 0100 1001 1010 0000 00 00 00 00 00 00 01011010 00000000 01011010 00000000 00000001 00000001 000000 000000 000000 000000 111011 000000 # # # # # # droite 90 avancer r0 droite 90 dec r0 bne r0, 1, -5 (en complément à 2 sur 6 bits = 59) avancer 1 6. Avec une adresse relative sur 6 bits, on peut sauter en arrière de 32 instructions et en avant de 31 instructions. Donc, on ne peut avoir plus de 32 instructions dans une boucle. Projet soutenu par le Conseil Régional Des Pays de La Loire dans le cadre des projets ENRC 2008-2009 3/3