\chapter{Description des solutions technologiques}

\section{Parseur et Meta-Parseur}


\section{Assembleur}

%description du meta langage
%format du fichier instructions.txt
%description du langage asm...

\section{Editeur de liens}

%mecanisme de relocation

\section{Operations ALU} %algos ALU lente

L'ALU est divisée en deux parties : La première qui fait les opérations sur les entiers et la deuxième qui se comporte comme un microprocesseur
c'est-à-dire qu'elle fait des calculs en binaire pour effectuer les différentes opérations qui lui sont demandées.

\paragraph{Descriptifs des opérations sur les entiers :}

Ces fonctions ont été écrites pour pouvoir tester l'Unité de contrôle, elles sont implementées en C, ce qui permet d'utiliser les opérations 
traditionnelles (comme l'addition, soustraction, multiplication, division, ) de manière simplifiée et relativement rapide.

\paragraph{Descriptifs des opérations en binaire :}

Toutes les fonctions sont écrites sur la meme base, on sait qu'il y a au maximum 32 bits, donc pour faire les opérations, il suffit de parcourir 
les 32 bits et pour cela on utilise une simple boucle pour (for en C) qui parcourt les éléments bit après bit.
Pour les fonctions de l'addition et de la soustraction, nous faisons comme dit précédemment les opérations bits après bits en commencant par le
bit de poid faible et terminant sur le bit de poid fort en gérant entre temps une retenue qui si lors de la dernière itération se trouve encore 
être utilisée renvoie un flag d'erreur de retenue qui sera géré par le simulateur et qui dans ce cas retourne tout de meme le début du résultat,
et si tous c est bien passe, le résultat sera stocké dans le registre correspondant.
En ce qui concerne la multiplication, nous utilisons l'algorithme que nous avons apris a l'école primaire : c'est-à-dire la multiplication d'un
facteur par un nombre de l'autre, puis on additionne les résultats successifs. Si jamais lors de l'addition il y a dépassement nous utilisons un
deuxième registre qui sera incrémenté de la valeur demandée.
Pour la division, nous utilisons comme pour la multiplication deux registres, un pour stocker le résultat et l'autre pour y mettre le reste de la
division et pour ce faire on utilise l'algorithme de notre jeunesse.
Pour les deux fonctions de décalage, nous décalons les bits du nombre demandé et on remplace les bits manquants par 0.



\section{Contrôleur}

%decodage, execution, gestion de la ram

\section{MiniOS}

