TP no 6 1 Introduction 2 Description

publicité
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
Téléchargement