Compilation Tps 1 2
TPs 1 & 2 : Machine virtuelle, Assembleur, Structures de données de manipulation d'arbres
Ce premier TP est consacré à l'écriture en langage C de trois modules importants de la chaîne de compilation : la machine virtuelle, l'assembleur, et les fonctions C consacrées à la création et au parcours d'arborescences que sont les ASA (Arbres de Syntaxe Abstraite, Abstract Syntax Tree ou
AST en anglais). Chaque module fait l'objet d'une partie de ce long TP nécessaire pour disposer de toute la partie « back-end » du compilateur. En annexe se trouve la liste de toutes les instructions reconnues par la machine virtuelle EVM (EISE Virtual Machine).
PARTIE 1 : La machine virtuelle EVM
La machine virtuelle evm, dont vous écrirez le fichier source dans evm.c, prend un fichier langage machine en paramètre, l'ouvre, et exécute les instructions qui s'y trouvent. Ce fichier langage machine, pour la lisibilité, est en fait un fichier texte qui a la structure suivante : nombre_total_instructions 0 : instruction0
1 : instruction1
…
nombre_total_instructions1 : instruction nombre_total_instructions1
Ainsi, le fichier e1.bin suivant :
10
0:100
1:4
2:100
3:5
4:3
5:100
6:2
7:1
8:301
9:403
contient un code langage machine qui fait 10 instructions, et qui occupe les adresses 0 à 9. Aux adresses 0 et 1, vous pourrez reconnaître l'instruction push 4, puis push 5 aux adresses 2 et 3. A l'adresse 4 une instruction mult, un nouveau push 2 aux adresses 5 et 6, une instruction add à l'adresse 7, une instruction output en 8 et l'instruction d'arrêt de la machine virtuelle halt à l'adresse
9. L'exécution de ce code machine doit afficher la valeur 22.0 à l'écran. Une des fonctions vous allez écrire, readAssembly(FILE *fin), doit lire le contenu de ce fichier et stocker les entiers correspondants aux instructions dans le tableau codeSegment.
Les 7 premières questions du TP se trouvent dans le fichier evm.c fourni.
Les suivantes sont :
Q8) Pour tester votre EVM,