Code Monkey home page Code Monkey logo

mini-mips-project's Introduction

Hi 👋, I'm Mathis

A passionate Software engineer student from France

Who am I ?

I'm Mathis URIEN, a software engineer studying at ENSTA Bretagne, Brest (France).

My Projects

School projects

Projet Duel Invaders - ENSTA Bretagne Projet Java - ENSTA Bretagne Projet Architecture des Ordinateurs - ENSTA Bretagne Workshops Laravel - ENSTA Bretagne Projet C - ENSTA Bretagne Cours OS - ENSTA Bretagne Cours Linux - ENSTA Bretagne

Personal projects

I created an Obsidian plugin to integrate most Syncthing features.

Projet Syncthing integration for Obsidian

I made an Aurion Synchronizer to automatically synchronize my Aurion calendar on my preferred calendar application.

planningAurion - ENSTA Bretagne

I learned how to make a simple NodeJS API through the OpenClassroom Go Fullstack course (for the backend):

OpenClassroom Go Fullstack - Backend

🔥 Technologies I use

Web development

HTML CSS JS TS Svelte GraphQL NodeJS PHP Laravel

Languages I learned for school projects

C Language Bash Java Python Dart Flutter

IDE & Dev tools

Visual Studio Code GitHub Git Docker

UX/UI Design tools I already used

Figma Adobe XD

GitHub Stats

Profile

Mathis's GitHub stats

My Top Used Languages

Top Langs

My Streaks

My GitHub Trophies

My GitHub Trophies

📫 How to reach me

You can contact me by email or through social media. Here are my links:

Email me!

LinkedIn

Credits

This README uses the following open source projects :

Visitor Count

mini-mips-project's People

Contributors

lbf38 avatar thomas40510 avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Forkers

thomas40510

mini-mips-project's Issues

Make unit tests for testing each instruction in the Assembleur

With the power of unit testing, we can test every instruction that the Assembleur need to recognize.
It will automate much of the work to verify if all is working.

But, need to be cautious about how the code is written because tests will depend on the function and code architecture.
=> need more time to dig into these details.

Assembleur ne gère pas les données fournis via un label

La majorité de l'assembleur est fonctionnelle (pour ne pas dire la totalité). Cependant, avec le code ci-dessous qui est censé afficher "Hello World!" 5 fois, je ne sais pas comment gérer les données.

# print 5 times "Hello, world!"
    add r2 r0 nb_iter      # r2 <= @nb_iter
    load r3 r2 0            # r3 <= mem[r2 + 0]
    add r4 r0 0             # r4 <= 0
loop_for_start:
    slt r5 r4 r3            # r5 <= (r4 < r3) ? 1 : 0
    braz r5 loop_for_end    # if (r5 == 0) {PC <= loop_for_end}
    add r20 r0 my_string   # r20 <= @my_string
    scall 4                 # print string @r20 to stdout
    add r4 r4 1             # r4 <= r4 + 1
    jmp r0 loop_for_start   # PC <= @loop_for_start
loop_for_end:
    stop                    # halt the machine
nb_iter:
    5                       # data: number 5
my_string:
    "Hello, world!\n"       # data: null terminated string

Le nb_iter est bien géré. Seul le my_string n'est pas bien géré.

Ainsi, j'ai identifié deux problèmes que je réunis ici car ils sont intrinsèquement liés :

  • Reconnaître et stocker les données sous forme de string. (comme la partie my_string ci-dessus) => partie assembleur
  • Reconnaître et fournir la string lors du décodage dans la VM. => partie VM.

A fixer :

  • scall 4
  • reconnaissance des data sous forme de string
  • décodage des data sous forme de string
  • stockage au bon endroit dans la mémoire
  • appel via scall 4

Documentation Doxygen - générer automatiquement pour deux langages (C et python)

J'aimerais générer une documentation doxygen automatiquement à partir de mes commentaires dans le code.
Pour cela, j'aimerais générer à la fois pour les fichiers python et les fichiers C.

Dans l'idée, j'ai créé deux fichiers de configuration distincts pour chacun des langages. Mais cela ne fonctionne pas. Il faut sûrement que j'ajoute d'autres éléments de configuration ou autres.

A regarder si j'ai le temps, plus tard.

Documentation et exemples de codes en assembleur

What needs to be done

Maintenant que tout fonctionne, il faut que je nettoie tous les fichiers et que je les documente.
Utilisation de la documentation doxygen pour les codes en C.
Regarder docstrings pour les codes en python.

Pour les exemples, on peut reprendre les exemples de moodle et les faire pour mon implémentation de l'assembleur et de l'ISS.
Une fois cela fait, on peut rendre le projet sur Moodle avant le 22 décembre 2022.

Liste des points à vérifier avant première version à rendre:

  • Commenter les parties importantes du code
    • Pour l'assembleur
    • Pour la VM
  • Créer des exemples simples et fonctionnels de code en instructions asm
    • factorial
    • print12
    • multiplication matricielle
    • Suite de Syracuse
    • printHelloWorld (à voir car ne gère pas encore les data strings)

Refactor code (Assembleur)

Refactor all the Assembleur.py code to have a cleaner architecture and easier way to read files.
This is a work that would help me for the compiler part in next months (see in Semester 4 with the Compiler course)

Problème de création du dossier bin/ sur une nouvelle configuration

Il faut que je reprenne l'assembleur pour vérifier que la création de tous les dossiers se fait bien lors de l'assemblage du code.
Par exemple, lorsqu'on lance la commande en ne mettant que le premier paramètre (le nom du fichier à compiler), il faut que l'assembleur crée le dossier bin pour accueillir le fichier binaire assemblé.

Refactor code (VM)

Same as Assembleur.py, need to refactor code of vm.c to be more readable and easier to grow from.
Moreover, this work will help me in the future to add the compiler part from Semester 4 course on Compiler

Problème avec les branchements et les boucles

Après plusieurs essais infructueux, je ne parviens toujours pas à faire des boucles ou à utiliser les branchements pour des fonctions simples en assembleur.

La VM ne semble pas reconnaître les instructions de branchements lors de boucles alors que celle-ci fonctionne individuellement.
Mais en testant chacune des instructions (jmp, braz, branz), elles fonctionnent quand elles sont seules dans leur programme.
Peut-être que cela vient d'un problème de programmation en assembleur ? Je ne sais pas.

Cela peut également venir des opérateurs de comparaison qui fonctionnerait mal.. C'est bizarre.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.