Vous êtes sur la page 1sur 2

« Le jeux d’instructions MIPS»

Exercice 1 :

Soit les fragments de C suivants, donner leurs traductions en MIPS.

a/ if (a == b) c = d + e; else c = d – e;
Avec a, b, c, d, e sont respectivement $s0, …, $s4
b/ if (($s1 > 0) && ($s2 < 0)) {$s3++;};
c/ if (($sl > $s2) || ($s2 > $s3)) {$s4 = 1;};
d/ if( $s1 <= $s2 ) {$s3 = $s4}; avec $s1 et $s2 sont non signés
e/ if (($s3 <= $s4) && ($s4 > $s5)) {$s3 = $s4 + $s5}; avec $s3, $s4, et $s5 sont singés
f/ i = 0; do {target[i]=source[i]; i++;} while (source[i]!=0);
Avec Adresse de source dans $s0 et l'adresse de la cible dans $s1 Les chaînes sont terminées par un
caractère nul
g/ sum = 0; for (i=0; i<n; i++) sum = sum + A[i];
Avec $s0 = adresse de tableau A, $s1 = longueur de tableau A= n
Exercice 2 :

Ecrire un programme SPIM qui permet de sélectionner les éléments d’un tableau source nommé
Tab en nombres positifs et négatifs, de les ranger respectivement dans Tabneg et Tabpos et d’afficher les
contenus de ces deux tableaux.
Soit la déclaration suivante :
Tab : .byte 45, -36, 28, -70, -37, 90, -98, 32, -20

Exercice 3 :

Ecrire un programme SPIM qui permet de recopier les éléments d’une table source Tab1 dans une
table destination Tab2 en ordre inverse et faire la somme des éléments de cette dernière table et mettre le
résultat dans la case mémoire Somm avec affichage sur écran de ce résultat
Soit la déclaration suivante :
Exercice 4 :

Ecrire un programme SPIM qui permet sélectionner les éléments d’une table source Tab1 en
nombres paires et impaires et de les ranger respectivement dans deux tables Tabpaire et Tabimpaire.

Exercice 5 :

Ecrire un procédure trouve_b qui cherche le lettre b dans une chaine de caractère et retourne la
position de b dans $2 sinon retourne les nombres des caractères dans la chaine.

-1-
Exercice 6 :

Ecrire un programme qui calcule la factorielle d’un nombre n saisi par l’utilisateur de manière récursive
terminale. Le programme C équivalent est le suivant :

int fact (int n)


{
return fact_tail(n,1);
}
int fact_tail (int n, int res)
{
if (n==1) return res;
else
return fact_tail(n-1,res*n);
}

Exercice 7 :

1. Ecrire une routine MIPS Fib permettant de calculer la fonction de Fibonacci d’une manière récursive.

Fib(0) = Fib(1) = 1
Fib(n) = Fib(n-1) + Fib(n-2)

2. Ecrire une routine MIPS appelant la fonction Fib permettant d’entrer un entier m d’entiers par
l’utilisateur, et d’afficher en sortie les différents valeurs de la suite de de Fibonacci associés à ces
entiers.

-2-

Vous aimerez peut-être aussi