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.