Architecture des ordinateurs
TP n° 4
(assembleur MIPS : structures de contrôle
et tableaux)
Notions abordées : branchement
conditionnel, adressage indirect.
1 Boucle WHILE
- 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;
}
- 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.
- L’utilisateur commence par saisir la taille du tableau (n).
- 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).
- L’utilisateur saisit ensuite les n
entiers et ceux-ci sont insérés dans la pile au fur et à mesure de leur
saisie.
- Ces n entiers sont affichés
grâce à un appel à la fonction d’affichage.
- 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).
- Une fois le tri réalisé, ces n
élements triés sont à nouveau affichés par un second appel à la fonction
d’affichage.
- L’espace nécessaire pour stocker ces n
éléments en pile est enfin désalloué en changeant la valeur du registre
$sp
.