:: Enseignements :: ESIPE :: E3INFO :: 2007-2008 :: Architecture des ordinateurs ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | Initiation à XSPIM |
Dans cette séance de travaux pratique, nous allons nous familiariser
avec le jeu d'instruction du MIPS, avec SPIM son simulateur et avec
les conventions d'appel de procédures.
Vous apprendrez les fonctionnalités de base de SPIM en simulant un
programme MIPS qui calcule la factorielle de 5.
Veuillez vous référer au
Manuel SPIM
Consignes
Les réponses aux différentes questions, les codes assembleur que
vous allez tester ainsi que toutes les explications et remarques
utiles doivent être écrites (manuscrites ou tapées au fur et à
mesure dans un fichier texte) afin de constituer un compte rendu de
TP à rendre à la fin de la séance.
Démarrer
Pour la première étape de ce travail, vous devez copier le fichier
facto.s
dans votre répertoire de travail. Ce programme utilise la récursion
pour évaluer la factorielle de 5 :
f(N) = N * f(N-1)
f(0) = 1
Pour lancer le simulateur, taper
xspim&
(la version X de SPIM est plus agréable à utiliser que la
version texte). Vous allez vous rendre compte que le "code de
démarrage" par défaut apparît da,s ma fenêtre "segment de
texte".
Pour charger le programme assembleur
facto.s
, presser le bouton
load
puis taper le nom du fichier dans la boîte de dialogue et
cliquer sur "assembly file". Remarquer que les instructions de
votre programme apparaîssent maintenant dans la portion basse du
segment de texte. Vous utilisez le mode par défaut de SPIM qui
supporte le jeu d'instructions étendu et pour lequel les
instructions de saut et d'accès mémoire ne sont pas retardées.
Exercice 1 - Annotation
Le programme en mémoire n'est pas exactement le même que celui du fichier facto.s
, en effet certaines instructions (virtuelles, qui sont en fait des
macros) ont été traduites en instructions machines de base (natives,
les seules réellement supportées par le matériel). Cependant, le code
original est affiché en commentaires.
-
Quelles différences y a-t-il entre les instructions "li" et "la"
?
-
Comment sont-elles traduites en instructions machines natives ?
-
Que fait l'instruction
lui $4, 4097 [F] ? A quoi correspond le chiffre 4097 içi?
-
Afin de vérifier nous allons rechercher les chaînes de caractères
F(5)=
et
\n
dans la partie
Data segment
. Le premier chiffre entre crochet de chaque ligne correspond à une
adresse mémoire.
-
Vérifier qu'en face de l'adresse
4097 << 16
se trouve les chaînes de caractères recherchées. On rappelle que les
caractères sont codés sur 8 bits (selon la table ASCII).
-
Que remarquez vous dans l'ordre de stockage des caractères ?
Exercice 2 - Pas à pas
-
Quelle est l'adresse de départ de la routine principale (
main
) ? Quelle est celle de
fact
?
-
Faites tourner pas à pas le code (presser le bouton
step
, puis cliquer sur
step
dans la boite de dialogue) jusqu'à la première instruction
de la routine
main
. Notez que le registre R31 a été modifié.
-
Quelle est l'instruction qui a modifié ce registre R31 ?
Dans quel but ?
Exercice 3 - Point d'arrêt et récursion
-
Placez un point d'arrêt (
breakpoint
) à la première instruction de la routine
fact
(presser le bouton breakpoint, taper l'adresse dans la boîte de dialogue puis cliquer sur add
). Continuer à tracer le programme en utilisant les points d'arrêts et
le mode pas à pas.
-
Comment et dans quel but sont utilisés les registres R29 et R30
?
-
Notez les valeurs sur la pile quand la première instruction de
la procédure
fact
est sur le point d'être exécutée pour la quatrième fois.
Exercice 4 - Linéarisation
-
Transformez le programme
fact
en utilisant une simple boucle plutôt que lé récursion.
- Montrez comment votre programme fonctionne.
© Université de Marne-la-Vallée