Mips辅导 | calculatrice basique

Architecture
Travaux Pratiques
UFR de mathématique et d’informatique
Université de Strasbourg
Mini projet : calculatrice basique
1 Projet
Le but de ce mini-projet est de créer une calculatrice basique. Vous trouverez sur Moodle un certain nombre de fichiers
pour vous aider à démarrer.
1.1 Présentation
Cette calculatrice se comporte de manière très simple : chaque opération est immédiatement calculée. Chaque opérande
ou opération est fournie sur une ligne séparée et le résultat est affiché sur une ligne. Par exemple, pour calculer 10 + 10 :
1 10
2 +
3 10
4 20
Au démarrage, votre calculatrice doit lire un premier nombre. Ensuite, elle devra boucler pour lire une opération et un
second opérande (sauf cas particuliers où une opération ne nécéssite pas de second opérande). Le premier opérande est le
résultat précédent (ou le premier nombre lu, au démarrage). Ainsi, pour calculer (2 + 3) × 5, il faudra entrer, ligne par
ligne : 2, +, 3, * et 5. À l’étape de lecture d’une opération, le programme s’arrête si l’utilisateur entre une ligne vide ou un
opérateur inconnu.
1.2 Modes entier et flottant
On souhaite pouvoir utiliser la calculatrice en mode entier ou bien en mode flottant simple précision. Ce choix est fait
au démarrage du programme via les arguments de la ligne de commande. Pour ce faire, on vous fournit dans le code mis à
disposition la fonction handle_cli_args qu’il faudra compléter.
Le mode par défaut est le mode entier.
1.3 Opérations attendues
Voici la liste des opérations qu’il faut implémenter, a minima :
— + : addition
— – : soustraction
— * : multiplication
— / : division
— abs : valeur absolue
— min : minimum
— max : maximum
— pow : puissance
1.4 Utilisation en ligne de commande et tests
Il est possible d’utiliser le simulateur MARS en ligne de commande :
1 $ java -jar Mars4_5.jar nc calculatrice.s
En ligne de commande, il est aussi possible de fournir des arguments au programme. Ceux-ci doivent impérativement se
trouver en fin de ligne de commande après l’argument pa :
1
Architecture
Travaux Pratiques
UFR de mathématique et d’informatique
Université de Strasbourg
1 $ java -jar Mars4_5.jar nc calculatrice.s pa integer
2 $ java -jar Mars4_5.jar nc calculatrice.s pa float
Par ailleurs, des jeux de tests vous sont fournis et peuvent être utilisés depuis la ligne de commande :
1 $ java -jar Mars4_5.jar nc calculatrice.s pa integer <tests/test_001.txt
Note : les fichiers de tests doivent se terminer par une ligne vide.
2 Fonctionnalités supplémentaires
Les plus téméraires peuvent ajouter des fonctionnalités à la calculatrice, lorsque le comportement de base fonctionne
correctement.
Voici les opérations additionnelles à implémenter en priorité :
— print\_binary : afficher un entier en binaire en le décomposant manuellement. Cette fonctionnalité ne sera pas
évaluée si vous vous contentez d’utiliser le syscall fourni par le simulateur MARS. Il ne faut pas fournir d’opérande
supplémentaire.
— print_hexa : afficher un entier en héxadécimal en le décomposant manuellement. Cette fonctionnalité ne sera pas
évaluée si vous vous contentez d’utiliser le syscall fourni par le simulateur MARS. Il ne faut pas fournir d’opérande
supplémentaire.
— print_significand : afficher la mantisse (significand en anglais) d’un nombre flottant
— print_exponent : afficher l’exposant d’un nombre flottant
— switch_modes : passer du mode entier au mode flottant ou vice versa.
Et voici quelques exemples de fonctionnalités bonus :
— opération opposite : opposé d’un nombre.
— opération inv : inverse d’un nombre.
— mode flottant double précision.
Toute autre idée est la bienvenue à condition de détailler et expliquer la nature de vos propositions dans le rapport.
3 Évaluation
Votre travail doit être accompagné d’un court rapport au format pdf et rendu sous la forme d’une archive tar. Vous
devrez présenter votre travail lors la dernière séance de TP.
Le rapport doit contenir une brève introduction et une brève conclusion. Il doit également détailler :
— les difficultés rencontrées.
— les fonctionnalités supplémentaires :
L’évaluation de votre travail comporte 3 sous-parties :
— l’évaluation des fonctionnalités de base de votre calculatrice et du code :
— la possibilité d’effectuer des additions, soustractions, multiplications et divisions d’entiers.
— l’implémentation des opérations abs , min , max et poow pour les entiers.
— l’implémentation du support des flottants.
— l’élégance du code et plus particulièrement, le découpage fonctionnel et la bonne écriture des fonctions (conventions d’appels, sauvegarde des registres, etc.)
— l’évaluation du rapport.
— l’évaluation des fonctionnalités supplémentaires, s’il y en a.
Les fichiers de tests vous sont fournis à titre indicatif. Le fait que votre calculatrice donne les résultats attendus pour les
tests qui vous sont fournis ne vous garantit pas une bonne note. Le correcteur est susceptible d’utiliser d’autres tests lors de
l’évaluation de votre calculatrice. En revanche, si votre calculatrice ne fournit pas les résultats attendus pour les tests fournis,
la note correspondante sera très basse.
Un code qui ne peut pas être assemblé pourra être noté 0. Il vaut mieux rendre une calculatrice pauvre en fonctionnalités
mais correcte plutôt que de tenter d’implémenter un trop grand nombre de fonctionnalités de manière bancale.
2