Univ. Lille 1 - Licence Informatique S3H 2ème année 2013-2014 Programmation TP no 6 1 Introduction Ce tp est la suite du tp05. Il consiste en l’implantation d’un type qui représente une machine virtuelle et de fonctions permettant de manipuler les valeurs de ce nouveau type. Le processeur de la machine virtuelle admet comme jeu d’instructions celui qui a été vu précédemment (tp 05). On réutilisera donc le matériel du tp05. La résolution du tp05 n’est toutefois pas indispensable pour aborder ce tp. Le travail demandé dans ce tp est indépendant du travail demandé dans le tp précédent. 2 Description On définit le type machine de la manière suivante : type machine = { registre mutable pc memoire mutable z mutable c };; : : : : : octet array; mot ; octet array; bool ; bool Le champ registre contient un tableau de 8 octets correspondants respectivement aux registre R0, R1, ... ,R7. On rappelle que les registres 16 bits RX0, RX1, RX2 et RX3, n’ont pas une existence propre, mais sont la concatenation de deux registres 8 bits. Par exemple, pour RX0, l’octet de poids fort est R1 et celui de poids faible R0. Le champ pc contient ce qu’on appelle le compteur ordinal, en anglais program counter (d’où le nom du champ). C’est ce registre qui indique l’adresse de la prochaine instruction à exécuter. Le champ memoire contient un tableau d’octet, comme les adresses mémoires sont codées sur 16 bits, ce tableau comportera 216 = 65536 octets. il y a deux indicateurs (ou drapeaux traduction mot à mot de Flag en anglais). Il s’agit de valeurs booléennes. Le flag Z – est inchangé lors des instructions de chargement, de stockage, d’échange et de saut, et le nop. – vaut vrai lorsque : le résultat d’un et logique bit à bit, ou d’une addition ou d’une soustraction ou d’une incrémentation ou d’une decrémentation ou encore d’une négation bit à bit donne zéro. – vaut faux dans tous les autres cas. Le flag C – est inchangé lors des instructions de chargement, de stockage, d’échange et de saut, et le nop. 1 – vaut vrai lorsque : le résultat d’une addition ou d’une soustraction ou d’une incrémentation ou encore d’une decrémentation déborde. – vaut faux dans tous les autres cas. Question 1 Déclarez une variable nommée exemple_machine dont tous les registres sont remplis par 0, dont toutes les cases mémoires sont remplies par 0, dont les flags sont initialisés à faux et dont le pc est à 0x200 Question 2 Réalisez une procédure d’affichage nommée print_machine de type machine->unitd’une machine passée en paramètre. seuls les registres, le pc et les indicateurs seront affichés l’affichage attendu doit ressembler à celui ci # print_machine machine_exemple;; |--------------------------| | Registres generaux: | |--------------------------| | R1 R0 : 0x00 0x00 : RX0 | | R3 R2 : 0x00 0x00 : RX1 | | R5 R4 : 0x00 0x00 : RX2 | | R7 R6 : 0x00 0x00 : RX3 | |--------------------------| | program counter : 0x0200 | | flag : NZ NC | |--------------------------| - : unit = () Question 3 Réalisez une procédure nommée dump_memory paramétrée par une machine, une adresse mémoire, une longueur. Cette procédure doit afficher à l’écran le contenu de la mémoire à partir de l’adresse indiquée. l’affichage attendu doit ressembler à celui ci # dump_memory machine_exemple 0x205 20 0x205: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x20d: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x215: 0x00 0x00 0x00 0x00 - : unit = () Question 4 programmez une procédure nommée charger paramétrée par une machine par un tableau d’entiers et une adresse 16 bits. Cette procédure doit copier le tableau d’entiers dans la mémoire de la machine à partir de l’adresse précisée. Question 5 programmez une procédure nommée jmp paramétrée par une machine et une adresse 16 bits qui modifie l’état de la machine en plaçant les indicateurs à faux et donne au pc l’adresse précisée. Question 6 instruction. Pour chacune des instructions assembleur, programmez une procédure qui exécute cette Question 7 Réalisez une procédure nommée pas_a_pas paramétrée par une machine, qui lit l’octet de la mémoire située à l’adresse donnée par le pc, incrémente le pc, et exécute l’instruction correspondante. L’exécution de l’instruction ayant pour effet de modifier l’état de la machine passée en paramètre. le type 2 de pas_a_pas doit être machine->unit Question 8 Réalisez une procédure nommée protected_run paramétrée par une machine m, trois entiers max, debut fin qui execute au plus max pas de la machine m et s’arrête dès que le compteur ordinal sort de la plage debut..fin 3