This commit is contained in:
Faure Paul 2022-06-27 21:44:17 +02:00
parent b6f5abf852
commit 25efac091c
2 changed files with 3 additions and 48 deletions

View file

@ -1,45 +0,0 @@
# Processeur sécurisé - Interpreteur
Afin de pouvoir tester le code que nous avons compilé depuis le C avec notre compilateur, nous avons crée un interpreteur pour simuler l'execution du code assembleur
# Utilisation du cross assembleur
Un Makefile a été inclus au sous module Interpreteur afin de simplifier son utilisation. Ainsi, afin de compiler tout l'Interpreteur, il suffit de de rentrer la commande.
``` bash
make build
```
Pour lancer l'Interpretation du code qui aura été préalablement généré avec notre compilateur, il suffit de lancer la commande
``` bash
cat FicherASM | ./rondoudou_interpreter
```
Les prints et gets du programme auront lieu dans le terminal.
NB : Il est possible de rester au niveau du projet général. Un Makefile est aussi présent. Pour compiler l'Interpreteur uniquement :
``` bash
make compile QUOI="interpreteur"
```
Pour compiler le projet en entier :
``` bash
make compile QUOI="all"
```
Pour interpreter le fichier ***file_name.memasm*** :
``` bash
make exec SOURCE="file_name" QUOI="interprete"
```
Pour compiler, cross assembler et interpreter le fichier ***file_name.c*** et générer les fichiers ***file_name.memasm***, ***file_name.regasm***, ***file_name.bin***, et, copier le code binaire dans le fichier ***../Processeur/Processeur.srcs/sources1/new/MemoireInstructions.vhd*** :
``` bash
make exec SOURCE="file_name" QUOI="all"
```
# Implémentation
L'implémentation a été réalisée grâce à Lex/Yacc. Le parseur charge le programme dans un buffer, puis une méthode d'execution est lancée.

View file

@ -6,7 +6,7 @@
#define TAILLE_MEMOIRE (64) #define TAILLE_MEMOIRE (64)
#define TAILLE_PILE_APPELS (16) #define TAILLE_PILE_APPELS (16)
#define SECURISED (1) #define SECURED (1)
/**************************************************/ /**************************************************/
@ -194,7 +194,7 @@ void execute() {
printf("%c", mem[check_adresse(ebp + programme[eip].param1)]); printf("%c", mem[check_adresse(ebp + programme[eip].param1)]);
} else if (programme[eip].instruction == CALL) { } else if (programme[eip].instruction == CALL) {
if (SECURISED) { if (SECURED) {
pile[check_adresse_pile(esp)] = ebp; pile[check_adresse_pile(esp)] = ebp;
esp++; esp++;
pile[check_adresse_pile(esp)] = eip + 1; pile[check_adresse_pile(esp)] = eip + 1;
@ -209,7 +209,7 @@ void execute() {
} }
} else if (programme[eip].instruction == RET) { } else if (programme[eip].instruction == RET) {
if (SECURISED) { if (SECURED) {
esp--; esp--;
eip = pile[check_adresse_pile(esp)] - 1; eip = pile[check_adresse_pile(esp)] - 1;
esp--; esp--;