:: Enseignements :: ESIPE :: E3INFO :: 2007-2008 :: Architecture des ordinateurs ::
[LOGO]

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.

  1. Quelles différences y a-t-il entre les instructions "li" et "la" ?
  2. Comment sont-elles traduites en instructions machines natives ?
  3. Que fait l'instruction lui $4, 4097 [F] ? A quoi correspond le chiffre 4097 içi?
  4. 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.
    1. 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).
    2. Que remarquez vous dans l'ordre de stockage des caractères ?

Exercice 2 - Pas à pas

  1. Quelle est l'adresse de départ de la routine principale ( main ) ? Quelle est celle de fact ?
  2. 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é.
  3. Quelle est l'instruction qui a modifié ce registre R31 ? Dans quel but ?

Exercice 3 - Point d'arrêt et récursion

  1. 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.
  2. Comment et dans quel but sont utilisés les registres R29 et R30 ?
  3. 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

  1. Transformez le programme fact en utilisant une simple boucle plutôt que lé récursion.
  2. Montrez comment votre programme fonctionne.