IN 103 - TD 07 ´
Enonc´e
L’´enonc´e est long, mais pas les exercices.
1 Structure d’un CPU simple
Q1 Quelles sont les composantes principales d’un microprocesseur, celles que l’on regroupera
dans une struct pour faire notre simulateur ?
Q2 Quel est le cycle infini de traitement qu’effectue un microprocesseur ?
Q3 Comment peut-on repr´esenter la m´emoire de la machine ?
Q4 On consid`ere que notre CPU dispose des instructions qui suivent. D´eduisez-en une struc-
ture C permettant de repr´esenter cette vari´et´e d’instructions.
MovImm constant register : move the constant to the register.
MovRegAddr register address : moves the content of the register to the address.
MovAddrReg address register : move the content of the address to the register.
MoveRegReg register register : move the content of the first register to the second register.
Add register + register register : add the contents of the 2 first registers and store
the result in the 3rd.
Sub register - register register : substract the content of the second register from the
first one and store the result in the 3rd.
Jmp address : jump to the address.
Jnz address : jump at the address if previous computation didn’t set the 0-flag.
Halt - : stop the CPU.
Q5 O`u doit arriver le code binaire ? De quoi est-il constitu´e ? Qu’est-ce que cela implique au
niveau de notre repr´esentation de la m´emoire ?
On vous donne dans le fichier cpu core.h toutes les d´efinitions de types introduites jusqu’`a
pr´esent ainsi que la structure permettant de repr´esenter le CPU :
typedef unsigned char s t a t e r e g t ;
#defin e CLEARED SR MASK ( 0 )
#defin e Ze r o F l a g ( 0 )
#defin e ZERO FLAG MASK (1 << Ze r o F la g )
#defin e S i g n F l a g ( 1 ) /0 neg , 1 pos . /
#defin e SIGN FLAG MASK (1 << S i g n F l a g )
typedef str uc t i n s t r t p r o g r a m c o u n t e r t ;
str uc t p r o c e s s o r t {
p r o g r a m c o u n t e r t pc ; /Program coun t e r . /
1
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 tsp ; /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
3 Programmer le CPU
Maintenant que notre CPU poss`ede quelques instructions on souhaite lui faire ex´ecuter des
programmes dans notre pseudo assembleur. Le fichier prog.myasm qui vous est fourni contient
le squelette d’un programme qu’il va falloir compl´eter.
Q12 Dans le fichier prog.myasm, remarquez le tableau my program data sens´e repr´esenter les
donn´ees de votre (futur) programme. En avez-vous ? Ne vous souciez pas pour le moment du
tableau my reloc code tbl.
Dans ce fichier, ´ecrivez l’´equivalent du programme C suivant :
accu = 0 ;
i = 100 ;
do {
accu = accu + i ;
i;
}while ( i != 0 ) ;
Q13 Lancez le programme, que se passe-t-il et pourquoi ?
Q14 Quel sont le type et la forme de la fonction permettant le chargement du programme
en m´emoire ?
Si vous avez le temps / pour aller plus loin
Q15 Le jeu d’instructions actuel ne vous permet pas d’impl´ementer le m´ecanisme des variables
locales d’un programme C. Pour rappel, les variables locales sont stocees sur la pile. Qu’est-ce
qu’il vous manque ?
Q16 Imaginez deux nouvelles instructions pour palier ce manque, l’une qui permettra de
lire et l’autre d’´ecrire .
Q17 Vous pouvez modifier `a votre convenance le programme de Q12 pour y ins´erer une
variable locale.
3
1 / 3 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !