\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.