\chapter{Description}
\paragraph{}
Ce projet a pour but l'étude d'un microprocesseur en programmant
d'abord un simulateur pour ce microprocesseur, puis un assembleur
correspondant aux instructions définies pour le simulateur.
\paragraph{}
Le processeur que nous nous proposons de simuler est un processeur
du type "\textit{Load \& Store}". Il possède une quantité non
négligeable de registres, mais en contrepartie, toutes les instructions
doivent travailler directement sur ces registres. Il n'existe que deux
instructions permettant de lire ou d'écrire un mot en mémoire: les
instructions LD pour \textit{Load} et ST pour \textit{Store}.
\paragraph{}
Pour l'adressage, nous avons choisi de repérer chaque mot mémoire de 32 bits
par une adresse unique, vu que les instructions ne manipulent que des mots
mémoires sur 32 bits. En clair, même si l'assembleur gère des zones de données
dont les éléments sont de taille inférieur à 32 bits, (comme HALF, BYTE ou ASCII)
ils seront "compactés" en 32 bits et alignés sur des mots mémoires 32 bits.
\paragraph{}
Notre processeur supporte les opérations de base programmées sur une ALU
simplissime: ADD, SUB, MUL, DIV, AND, OR, SHL, SHR. De plus, le contrôleur
est capable d'effectuer des sauts conditionnels simples.
\paragraph{}
L'assembleur est capable de reconnaître les mnémoniques nécessaires à la
création d'un fichier binaire correspondant aux instructions supportées
par le simulateur. De plus, il est capable de gérer quelques pseudo-instructions:
\begin{itemize}
\item START pour définir le point d'entrée du programme.
\item ASCII pour stoker une chaîne ASCIIZ.
\item BYTE pour stoker une série d'octets consécutifs.
\item WORD pour stoker une série de mots 32 bits consécutifs.
\item HALF pour stoker une série de mots 16 bits consécutifs.
\item SPACE pour réserver une série de mots dans le segment \textit{data}
\end{itemize}
L'encodage choisi est le little endian. Cette précision est nécessaire vu que
le simulateur fonctionne sur des mots de 32 bits. Ainsi, la pseudo instruction
\begin{verbatim}
Texte	ASCII	"ABCDEFG"
\end{verbatim}
va encoder effectivement les deux mots mémoires consécutifs: 0x44434241, 0x474645.
