This shows you the differences between two versions of the page.
alf:teme:tema_1 [2021/03/06 21:46] diana.ghindaoanu created |
alf:teme:tema_1 [2021/03/17 16:33] (current) alexandru.radovici [Conseils d'implémentation] |
||
---|---|---|---|
Line 3: | Line 3: | ||
===== Information ===== | ===== Information ===== | ||
<note important> | <note important> | ||
- | Deadline: ** le 21 Mars, 23:55** | + | Deadline: ** le 21 Mars, 23:55**\\ |
- | Points: **1 point** de la note finale | + | Points: **1 point** de la note finale\\ |
- | Link: | + | Link: [[https://classroom.github.com/a/olSpOMPY|Devoir 1]]\\ |
Téléchargement tardif: **1p/jour** (maximum 2 jours) | Téléchargement tardif: **1p/jour** (maximum 2 jours) | ||
</note> | </note> | ||
Line 151: | Line 151: | ||
stack ; imprime [ 1 2 ] | stack ; imprime [ 1 2 ] | ||
</code>| | </code>| | ||
+ | |||
+ | |||
+ | ==== Erreurs ==== | ||
+ | Le fichier que le simulateur de processeur exécute peut contenir des erreurs. Lorsque le simulateur rencontre une erreur, il ignore cette instruction et continue l'exécution avec la ligne suivante. | ||
+ | |||
+ | Le format d'erreur général est: | ||
+ | <code> | ||
+ | ERROR (nom_instruction): texte d'erreur | ||
+ | </code> | ||
+ | |||
+ | <note>Les erreurs doiventetre affichés exactement comme dans l'exemple suivant: </note> | ||
+ | |||
+ | ^ Erreur ^ Signification ^ Exemple ^ | ||
+ | | unknown instruction | le simulateur a trouvé une instruction qu'il ne connaît pas | <code asm>multi ; ERROR (multi): unknown instruction</code> | | ||
+ | | stack underflow | le simulateur essaie d'exécuter une instruction qui extrait certaines valeurs de la pile, mais la pile n'a pas assez de valeurs | <code asm>push 1 | ||
+ | mul ; ERROR (mul): stack underflow</code>| | ||
+ | | unable to open file ''filename'' (''node error message'') | le simulateur tente d'ouvrir un fichier qu'il ne peut pas ouvrir | <code bash>$ node index not_a_filename.asm | ||
+ | ERROR unable to open file filename.asm(ENOENT: no such | ||
+ | file or directory, open 'filename.asm')</code>| | ||
+ | | undefined label | le simulateur essaie de faire un jump à une étiquette qui n'est pas définie | <code asm>jump jumper ; ERROR (jump): undefined label jumper</code>| | ||
+ | | invalid jump address | le simulateur essaie de faire un jump à une adresse (numéro de ligne) qui n'existe pas dans le fichier | <code asm> jump 2 ; ERROR (mul): invalid jump address 2</code>| | ||
+ | |||
+ | ===== Exécution du simulateur ===== | ||
+ | |||
+ | Pour exécuter le simulateur, un utilisateur va taper la commande: | ||
+ | |||
+ | <code bash> | ||
+ | $ node index.js filename.asm | ||
+ | </code> | ||
+ | |||
+ | Le simulateur lira les instructions du fichier donné en paramètre et les exécutera. | ||
+ | |||
+ | Si aucun paramètre n'est indiqué, le message suivant s'affiche: | ||
+ | |||
+ | <code bash> | ||
+ | $ node index.js | ||
+ | USAGE: node index.js filename.asm | ||
+ | </code> | ||
+ | |||
+ | <note>Le $ dans les exemples est le prompt du shell et ne fait pas partie de la commande</note> | ||
+ | |||
+ | Les tests du devoir auront le format suivant: | ||
+ | |||
+ | Tous les tests auront des instructions de débogage. | ||
+ | |||
+ | ^ Note ^ Tests ^ | ||
+ | | 50% | pile et instructions mathématiques | | ||
+ | | 20% | instructions jump | | ||
+ | | 10% | étiquettes | | ||
+ | | 10% | instructions du registre | | ||
+ | | 10% | erreurs | | ||
+ | |||
+ | ===== Conseils d'implémentation ===== | ||
+ | Le devoir comprend beaucoup de fonctionnalités a implémenter, donc on vous suggere de suivre les étapes: | ||
+ | - Lire le contenu du fichier dans le string s et implémenter l'erreur ''no file'' | ||
+ | - Séparer l'entrée lue par ''\n'' (''\r\n'' pour Windows, assurez-vous de l'avoir changé avant de transférer sur git), en utilisant la fonction ''split'' | ||
+ | - Séparer chaque ligne par ' ' (espace) et extraire l'instruction et ses parametres | ||
+ | - Implémenter l'erreur ''unknown instruction'' | ||
+ | - Implémenter les instructions ''push'' et ''pop'' en utilisant un array de numéros pour la pile | ||
+ | - Implémenter les fonctions mathématiques | ||
+ | - Implémenter toutes les instructions | ||
+ | |||
+ | |||
+ | ===== Bonus ===== | ||
+ | |||
+ | Pour **2p** supplémentaires, implémentez une mémoire pour le CPU. Le simulateur recevra un autre paramètre dans la ligne de commande qui représente le nombre d'emplacements mémoire disponibles. | ||
+ | |||
+ | Implémentez les instructions de mémoire suivantes: | ||
+ | |||
+ | ^ Instruction ^ Paramètre ^ Détails ^ | ||
+ | | write | - | Extrait 2 numéros de la pile et écrit le premier a l'emplacement de la mémoire défini par le deuxième | | ||
+ | | read | - | Extrait un numéro de la pile et lit un numéro de l'emplacement de la mémoire défini par le premier numéro, en ajoutant le deuxieme a la pile | | ||
+ | |||
+ | <note> | ||
+ | Le bonus ne sera attribué que si tous les autres tests réussissent. | ||
+ | </note> | ||
+ | |||
+ | |||
+ | ===== Règles ===== | ||
+ | |||
+ | - Vous ne pouvez pas utiliser //RegEx// ou toute autre bibliothèque qui utiliserait des expressions régulières (outre \n\r? pour séparer les lignes d'entrée de la source) | ||
+ | - Le code source doit être indenté (-0.1p) | ||
+ | - Vous devez expliquer en détail dans le Readme.md comment vous avez rédigé les devoirs (-1p) | ||
+ | |||
+ | ===== Tricher ===== | ||
+ | |||
+ | Les devoirs sont individuels. Toute tentative de tricher entraînera **0p** pour les devoirs. Un système anti-copie automatisé sera utilisé. | ||
+ | |||
+ | ===== Questions ===== | ||
+ | |||
+ | Si vous avez des questions concernant les devoirs, posez-les en publiant un problème sur le github [[https://github.com/UPB-FILS-ALF/questions| repository pour les questions]] avec le format du titre //[simulator] <titre de votre question>//. Vous aurez besoin d'un compte github pour cela. | ||
+ | |||
+ | <note warning> | ||
+ | ** NE POSTEZ AUCUN CODE **. Cette action est considéré comme tentative de tricher et alors vous obtiendrez **0p** pour le devoir. | ||
+ | </note> | ||
+ | |||
+ | Si vous souhaitez recevoir un e-mail lorsque des problèmes sont publiés ou lorsqu'il y a de nouveaux messages, accédez au [[https://github.com/UPB-FILS-ALF/questions|repository pour les questions]] github et cliquez sur //Regarder//. | ||
+ |