Emulation d'un processeur en langage c, petits problèmes !!!

Emulation d'un processeur en langage c, petits problèmes !!! - Programmation

Marsh Posté le 29-05-2001 à 15:16:46    

Nous sommes étudiants en gtr et nous avons un projet en c à réaliser.Nous n'y arrivons pas pouvez vous nous aider un petit peu ?
Nous sommes sûrs que pour les grosses bêtes de programmation ça ne devraient pas prendre plus d'une heure
 
Merci
 
 
 
 
 
Emulateur de processeur  
 
 
 
 
------------------------------------------------------------------------
 
 
Objectif du sujet  
 
L'objectif de ce projet est de faire un émulateur de processeur qui permette d'effectuer des programmes. Cet émulateur devra servir à exécuter simultannément deux programmes "virus" qui se battront pour le contrôle de la "mémoire".  
 
Le programme doit remplir plusieurs fonctionnalités :  
 
1.il offre une interface à l'utilisateur ;  
2.il initialise la "mémoire" ;  
3.il charge les fichiers en "mémoire" :  
?il lit les programmes dans des fichiers ;  
?il code les instructions en "octets" ;  
?il les charge dans la "mémoire".  
4.il exécute les programmes en "mémoire" :  
?il gère les pointeurs d'instructions (il y en aura deux) ;  
?il décode les instructions alternativement pour chacun des deux programmes ;  
?il exécute ces instructions.  
 
 
Principes  
 
1. Représentation de la "mémoire"  
 
Pour pouvoir faire un programme qui en gère d'autres en "mémoire", cette dernière sera représentée dans la RAM par un tableau (de grande dimension : 256 cases). Afin de simplifier la programmation des "virus", on gèrera ce tableau de façon circulaire, c'est à dire que la case suivant la case 255 sera la case 0 (il n'y aura donc jamais de débordement de la mémoire).  
 
2. Codage des instructions  
 
Votre programme doit lire les fichiers dans lesquels sont écrits les programmes des "virus", en mnémoniques, et traduire ces mnémoniques en une suite de codes numériques correspondant au jeu d'instruction. Afin de se simplifier l'opération, on va utiliser des instructions qui auront toutes la même taille, opérandes comprises. Les mnémoniques auront la forme suivante :  
 
INS [@/r/#] arg1, [@/r/#] arg2 ;commentaire  
 
?INS est la mnémonique, qui doit comporter 3 lettres. ?Le code 'r' signifie que la donnée est à l'adresse relative qui suit. ?Le code '@' signifie que la donnée est à prendre à l'adresse qui suit. ?Le code '#' signifie que la donnée qui suit est une valeur directe. ?arg1 et arg2 sont des valeurs utilisées par l'instruction (arg2 quelconque si non utilisé).  
 
Tous les champs (hors commentaire) sont obligatoirement remplis pour simplifier l'analyse des fichiers textes.  
 
arg1 et arg2 peuvent désigner des adresses dans la "mémoire" (des indices du tableau) : elles doivent donc pouvoir aller de 0 à 255. Ce seront donc des octets. Les codes [@/r/#] peuvent être codés sur 2 bit. Pour que l'ensemble d'une instruction tienne sur 3 octets, on doit se limiter à 5 bits pour définir le jeu d'instructions, ce qui nous laisse tout de même 32 instructions possibles. Chaque case du tableau mémoire sera alors constituée de trois octets (une sorte de processeur à bus de donnée 24 bits).  
 
On vous propose le jeu d'instruction suivant, que vous pourrez compléter à votre guise :  
 
00000 DAT stoque ces 3 octets à cette case mémoire (cette instruction n'est pas exécutable).
00001 MOV recopie arg2 dans arg1
00010 ADD additionne arg2 à arg1 et le range dans arg1
00011 SUB soustrait arg2 à arg1 et le range dans arg1
00101 JMP saute à arg1
00110 JZE saute à arg1 si arg2 est nul
00111 JGT saute à arg1 si arg2 est supérieur à zéro.  
 
Gestion des programmes en mémoire  
 
Le programme doit ensuite placer les deux programmes au départ (soit de manière arbitraire soit au hasard). Puis il doit activer à tour de rôle les instructions d'un virus et de l'autre (comme si on avait deux registres Instruction Pointer activés alternativement).
Le programme doit évaluer chaque instruction selon le dictionnaire choisi. Une fois décodé le type d'instruction et chargés les deux arguments, il faudra bien faire attention au type d'adressage utilisé (direct #, relatif r et indirect @) qui modifie le fonctionnement de l'instruction. Cette partie est sans doute la plus ardue. Le mode par défaut sera le mode relatif, en particulier lorsque une adresse sera prise indirectement, il faudra ensuite la considérer relative. Par exemple:
 
JMP @ 001 # 000
DAT # 000 # 010
 
Dans cet exemple, on récupère la valeur stockée 001 case plus loin (avec DAT), et on saute du nombre de case indiquées (en décimal, 10). Toutes les valeurs sont donc traitées de manière relative à l'adresse courante (pointée par l'"InstructionPointer" ).
Certaines valeurs des paquets de 3 octets ne correspondent à aucune instruction (notamment DAT qui n'est là que pour initialiser des octets, qui pourront servir de variable). Un virus "meurt" lorsque il essaie d'évaluer une de ces suites d'octets qui ne correspond à rien.  
 
Règle du combat de virus  
 
Les virus sont des petits programmes. Dans la mémoire de l'ordinateur, les virus sont des suites d'octets correspondant à des suites d'instructions (voir cours d'architecture des ordinateurs).
Dans votre projet, un virus mourra quand son programme l'amènera à exécuter une instruction illégale. Un virus essaiera de tuer l'autre en modifiant le contenu des cases mémoires qui contiennent le programme de cet autre virus. La difficulté pour le virus est de localiser l'emplacement de l'autre virus (qui est très petit au sein de la mémoire et qui de plus peut bouger).  
 
Exemples  
 
Voici quelques virus pour tester votre programme :  
 
Le rouleau compresseur  
 
MOV r 000 r 001 ;Remplit la mémoire de lui-même  
 
Interface pour l'utilisateur  
 
Le programme doit simplement permettre de suivre l'évolution du combat en affichant certaines données comme les valeurs des deux "InstructionPointers", ou les instructions correspondant à ces adresses.

Reply

Marsh Posté le 29-05-2001 à 15:16:46   

Reply

Marsh Posté le 29-05-2001 à 15:19:13    

heu petit détail le jeu d'instruction doit se faire sur 4 bits et non 5;il n'y aura donc que 16 instructions possibles

Reply

Marsh Posté le 29-05-2001 à 15:21:40    

...j'crois que vous rêvez un peu là !
En gros vous fournissez le sujet des votre projet en disant aux type du forum...démerdez vous avec ça !!
Vous avez bien déja fait qqch non !? hachez un peu l'travail, personne vas vous aider sinon (de toute façon, pas moi, j'connais pas et ça m'interresse pas trop ces trucs !)
 

Citation :

Nous sommes sûrs que pour les grosses bêtes de programmation ça ne devraient pas prendre plus d'une heure  


Et ce pas en fayottant que les gars vous aideront plus (enfin j'pense pas !)

Reply

Marsh Posté le 29-05-2001 à 15:32:03    

Finalkenny a écrit a écrit :

Nous sommes sûrs que pour les grosses bêtes de programmation ça ne devraient pas prendre plus d'une heure


d'accord avec el_gringo :D surtout qu'une bête de la programmation ne pondra pas ça en une heure, faut pas exagérer non plus. le but d'un tp c'est d'apprendre.
 
alors, cherche sur google : java virtual machine, virtual machine, quake C compiler, etc.

Reply

Marsh Posté le 29-05-2001 à 15:33:15    

El_gringo a écrit a écrit :

...j'crois que vous rêvez un peu là !
En gros vous fournissez le sujet des votre projet en disant aux type du forum...démerdez vous avec ça !!
Vous avez bien déja fait qqch non !? hachez un peu l'travail, personne vas vous aider sinon (de toute façon, pas moi, j'connais pas et ça m'interresse pas trop ces trucs !)
 

Citation :

Nous sommes sûrs que pour les grosses bêtes de programmation ça ne devraient pas prendre plus d'une heure  


Et ce pas en fayottant que les gars vous aideront plus (enfin j'pense pas !)




 
oui mais quand tu te fais chier, ca pas etre interessant de faire ce genre de petit programme, rien que pour voir d'autre choses et accroitre ton experience, le plus important n'etant pas de taper plein de ligne de code, mais la reflexion à propos de l'algo.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed