s t a t e r e g t s r ; /∗∗ S t a t e r e g i s t e r . ∗/
wo rd t∗sp ; /∗∗ S ta ck p o i n t e r . ∗/
wo rd t r e g i s t e r s [ NB REGISTERS] ; /∗∗ User r e g i s t e r s . ∗/
};
Q6 1) De par sa d´efinition C, que repr´esente pc ? 2) Comment sont interpr´et´ees les conditions
remplies/non remplies dans sr ? 3) Pourquoi ce type pour sp, quel probl`eme y voyez-vous `a
l’avance ?
2 Impl´ementation du CPU
Nous allons maintenant nous int´eresser `a l’impl´ementation du simulateur de notre CPU.
Q7 Suite `a la r´eponse `a la question Q2 quelle va ˆetre la forme globale de la fonction cpu run
charg´ee de traiter une instruction, et que le main appellera dans une boucle infinie ?
Pour la suite des exercices, on vous met `a disposition les fichiers :
—cpu env.c|h contient la d´efinition de l’environnement du CPU, `a savoir sa structure, les
tableaux repr´esentant les zones m´emoires qui serviront `a loger la pile, les donn´ees et le
code.
—cpu utils.c|h contient des fonctions ≪d’affichage ≫:
—print instr qui affiche une instruction,
—print cpu qui affiche une instruction l’´etat actuel du CPU,
—disassemble code qui affiche le contenu d’une zone m´emoire contenant du code sous
forme d’une s´equence d’instruction. Ces fonctions sont appel´ees dans le squelette
ci-dessous et vous permettront si n´ecessaire de d´ebugger.
—cpu emu skel.c qui vous fournit une fonction cpu run `a trous qu’il conviendra de remplir
(apr`es l’avoir renomm´e en cpu emu.c). Le fichier cpu emu.h contient le prototype de la
fonction cpu run.
Pour compiler votre programme, il faudra compiler tous les fichiers .c en mˆeme temps (vous
pouvez copier-coller la ligne ci-dessous qui g´en`ere un ex´ecutable nomm´e cpu.x) :
gcc -Wall cpu_emu.c cpu_env.c cpu_main.c cpu_utils.c loader.c -o cpu.x
Q8 Impl´ementez le comportement de l’instruction MovImm.
Attention `a penser `a positionner les flags de sr en fonction de si la constante ≪mov-´ee ≫est
positive, n´egative et/ou nulle. Une fonction update sr flags `a trous vous est donn´ee, permet-
tant de mettre `a jours les flags en fonction d’une valeur pass´ee en argument. Remplissez les
trous, cette fonction ´etant d´ej`a utilis´ee ailleurs dans le squelette de code qui vous est donn´e
(cpu emu skel.c).
Q9 Impl´ementez le comportement de l’instruction MovRegAddr.
Q10 Impl´ementez le comportement de l’instruction MovAddrReg.
Q11 Impl´ementez le comportement de l’instruction Jnz.
2