\documentclass[a4paper, 10pt]{article}

\input{$LATEX_HEADER}

\begin{document}
% Page de titre
\begin{titlepage}
    \headingfont
    \vfill 
    \vspace{2.5in}
    \begin{flushleft}
    \HUGE\textbf{TRAVAIL\\PRATIQUE :}\\ARCHITECTURE\\DES ORDINATEURS
    \end{flushleft}
    \vspace{1in}
    \begin{flushleft}
        \Large\textsc{CESANO UGO\\COLMERAUER CLÉMENT}
        \hfill
        2024
    \end{flushleft}
\end{titlepage}


\tableofcontents
\newpage

\begin{enonce}
Dans ce travail pratique, nous devons mettre en place un système d'enregistrement du personnel programmé un assembleur x86 32-bit sous Linux.


Le programme doit permettre les opérations suivantes :
\begin{enumerate}
\item Enregistrer du personnel
\item Lister des personnes enregistrées
\item Afficher une personne spécifique
\item Afficher la personne la plus jeune
\item Quitter le programme
\end{enumerate}
\end{enonce}

\begin{remarqueImportante}
Le programme ne vérifie pas si l'information entrée par l'utilisateur respècte les conventions données dans ce document, le programme fonctionnera comme demandé si et seulement si l'on respecte celles-ci.
\end{remarqueImportante}

\begin{remarque}
Nous avons choisi d'enregistrer les informations des personnes dans un fichier CSV, celui-ci sera nommé \hl{\texttt{registry.csv}} et est situé dans le répertoire contenant l'exécutable.
\end{remarque}

\newpage

\section{Enregistrement du personnel}
L'enregistrement d'une nouvelle personne se déroule de la manière suivante :
\begin{enumerate}
\item L'utilisateur entre la commande d'enregistrement (\hl{\texttt{r}}) dans l'invite de commande principal (\hl{\texttt{>}}) :
\begin{verbatim}
> r
:
\end{verbatim}
\item L'invite de commande secondaire (\hl{\texttt{:}}) s'affiche, on y entre le nom puis l'age séparés d'un espace :
\begin{verbatim}
> r
: Zaphod 42
>
\end{verbatim}
\item On valide les instructions avec la touche retour.
\end{enumerate}


À ce moment là, le programme ajoute la personne à la fin du fichier \hl{\texttt{registry.csv}} en incrémentant le numéro de celle-ci depuis le numéro de la personne précédente.


Le programme remplace l'espace entre le nom et l'age de la personne par une virgule, respectant ainsi, la convention des fichier CSV.


Il ouvre le fichier en écriture seule, écrit les informations puis referme le fichier avant de retourner à l'invite de commande principal.


\begin{remarque}
Si le fichier \hl{\texttt{registry.csv}} n'existe pas, le programme le crée lors de l'ajout de la première personne.
\end{remarque}


Le programme peut enregistrer au maximum $2^{32}$ personnes dont l'age varie entre $0$ et $2^{32}$. Cette borne supérieur est dûe à l'architecture IA-32 qui fonctionne avec des mots de 32 bits.


\section{Lister les personnes enregistrées}
L'utilisateur doit entrer la commande de listage (\hl{\texttt{l}}) dans l'invite de commande principal (\hl{\texttt{>}}).

Le programme ouvre le fichier en lecture seule, et affiche le fichier en remplaçant les virgules par des espaces.


Lorsque le contenu du fichier est entièrement affiché, le programme ferme le fichier et retourne à l'invite de commande principal.

\newpage

\section{Afficher une personne spécifique}
L'affichage d'une personne spécifique se déroule de la manière suivante :
\begin{enumerate}
\item L'utilisateur entre la commande de recherche (\hl{\texttt{s}}) dans l'invite de commande principal (\hl{\texttt{>}}) :
\begin{verbatim}
> s
:
\end{verbatim}
\item L'invite de commande secondaire (\hl{\texttt{:}}) s'affiche, on y entre le numéro de la personne recherchée :
\begin{verbatim}
> r
: 1
1 Zaphod 42
>
\end{verbatim}
\item On valide les instructions avec la touche retour.
\end{enumerate}


Le programme lit le numéro de l'utilisateur sous forme de chaîne de caractères dans l'invite de commande secondaire, le convertit en entier puis affiche la personne à la ligne égale à ce dernier.

\section{Afficher la personne la plus jeune}
L'utilisateur doit entrer la commande de listage (\hl{\texttt{y}}) dans l'invite de commande principal (\hl{\texttt{>}}).


Le programme compare l'age de toutes les personnes enregistrées et enregistre le numéro de la personne ayant l'age minimal.


Ensuite, celui-ci l'affiche de le même manière que la seconde partie de l'opération de recherche.

\begin{remarque}
S'il y a plus d'une personne avec l'age minimal, la dernière est choisie.
\end{remarque}


\section{Quitter le programme}
On quitte le programme en entrant la commande \hl{\texttt{q}} dans l'invite de commande principal (\hl{\texttt{>}}).


\end{document}
