Architecture des ordinateurs

TP n° 4

(assembleur MIPS : structures de contrôle et tableaux)



Notions abordées : branchement conditionnel, adressage indirect.



1 Boucle WHILE

  1. Ecrire un programme assembleur MIPS affichant à l’écran les n premiers multiples d’un nombre donné en paramètre (équivalent au programme C suivant qui comporte une boucle while).

# include <stdio.h>

// Calculer et afficher les b premiers multiples de a
// Exemple : a=4 b=5 => 4 8 12 16 20

int main(void)
{
    int a,b;
    int multiple;
    int fin;

    scanf("%d",&a);
    scanf("%d",&b);
    if (b<=0) return 0;
    fin = b*a;
    multiple = a;
    while(multiple <= fin) {
        printf( "%d\n",multiple);
        multiple += a;   
    }
    return 0;
}

  1. Ecrire un programme assembleur calculant la factorielle d’un entier de manière itérative (une seule fonction principale contenant une boucle).


2 Tableaux

Réaliser un programme en assembleur MIPS permettant de trier un tableau d’entiers. Le tableau sera stocké dans la pile. Trois procédures sont à écrire : la procédure "main", une procédure d’affichage d'un tableau et une procédure de tri.
  1. L’utilisateur commence par saisir la taille du tableau (n).
  2. L’espace nécessaire pour stocker les n entiers est alloué par : addu $sp,$sp,-4n ($sp est un registre qui contient l'addresse du bas de la pile et chaque élément du tableau occupe 4 octets).
  3. L’utilisateur saisit ensuite les n entiers et ceux-ci sont insérés dans la pile au fur et à mesure de leur saisie.
  4. Ces n entiers sont affichés grâce à un appel à la fonction d’affichage.
  5. Puis la procédure de tri est appelée qui procède par échanges d'éléments et mets les éléments dans l'ordre croissant des entiers (utiliser l'algorithme de tri par sélection).
  6. Une fois le tri réalisé, ces n élements triés sont à nouveau affichés par un second appel à la fonction d’affichage.
  7. L’espace nécessaire pour stocker ces n éléments en pile est enfin désalloué en changeant la valeur du registre $sp.