move if not zero

publicité
TRAVAUX PARATIQUES
ARCHITECTURE II
TP-2
Premier travail :
Une amélioration proposée pour l'architecture MIPS est de considérer les instructions movn
(move if not zero) et movz (move if zero).
Par exemple, l'instruction movn $8, $11, $4 copie dans le registre $8, le contenu du registre
$11 si la valeur du registre $4 est différente de zéro et ne fait rien sinon.
L'instruction movz est similaire, mais réalise la copie uniquement lorsque le contenu du
troisième registre est égal à zéro.
Sur la base de ces instructions :
a) Construire une petite procédure qui calcule le maximum entre deux registres sans
utiliser d’instructions de branchement.
b) Construire également la même procédure en utilisant des instructions de branchement.
c) Comparer les performances des deux procédures dans le cas :
1) d’une architecture sans pipeline
2) d’une architecture avec pipeline mais sans forwarding
Deuxième travail :
Il existe des fonctions récursives qui croissent plus rapidement. La fonction d'Ackermann (cidessous) en est un bel exemple. On vous demande d'en donner l'équivalent en assembleur
MIPS.
int ack(int m, int n)
{
if (m == 0)
return (n + 1);
else
if (n == 0)
return ( ack (m - 1, 1) );
else
return ( ack (m - 1, ack (m, n - 1)) );
}
Remarque:
on peut vérifier que : ack(0, n) = n + 1, ack(1, n) = n + 2, ack(2, n) » 2 * n, ack(3, n) » 2 n, ....
NB : Pour réaliser ce TP, vous devez approfondir vos connaissances sur l’architecture
matérielle de la machine MIPS, son jeu d’instructions, les fonctions récursives et disposer
d’un simulateur de cette machine (SPIM) sur un PC.
Téléchargement