Le modèle de machine choisi est celui du cours Computer Systems: A Programmer's Perspective ; il s'agit d'une version simplifiée des processeurs Intel, appelée Y86 par référence à l'architecture x86.
Commencer par créer un répertoire Archi et travailler toujours dans ce répertoire.
Si tout s'est bien passé, plusieurs simulateurs ont été créés, le plus simple est un simulateur séquentiel situé dans le répertoire seq :
Si tout s'est bien passé, trois fenêtres apparaissent :
La machine possède huit registres dont les noms apparaissent en bas du panneau de contrôle ; leurs noms et l'ordre dans lequel ils apparaissent sont curieux, mais on s'y fait vite (cette anomalie résulte de l'évolution historique des processeurs Intel, en particulier du passage des processeurs 16 bits aux processeurs 32 bits).
La suite de Fibonacci est définie par récurrence :
u1 = u2 = 1 , et pour n > 0 : un+2 = un+1 + un .
Les premiers termes de la suite sont donc 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, etc.
Ecrire un programme qui calcule les termes successifs de la suite de Fibonacci avec une boucle simple — équivalente à une boucle while (1) en langage C. Sauver ce programme dans le fichier tp1.ys .
Après avoir compilé et chargé ce programme dans le simulateur, procéder à une exécution pas à pas, puis à vitesse lente.
Ecrire un programme qui lit un compteur n stocké en mémoire juste après le code, et écrit les n premiers nombres de la suite de Fibonacci dans la partie de la mémoire qui suit le compteur n. Sauver ce programme dans le fichier tp2.ys et le tester avec le simulateur. Veiller à ce que le programme soit correct, même pour n = 0.
Attention : l'étiquette de n doit être précédée de la directive .align 4 pour que l'adresse correspondante soit un multiple de 4.
A la fin de l'exercice précédent on dispose d'un tableau d'entiers de taille variable, codé comme suit: le premier entier du tableau contient sa taille, et les éléments suivants constituent le tableau proprement dit. Dans cet exercice, tous les tableaux sont codés ainsi.
Ecrire un programme qui fusionne deux tableaux u et v (de tailles respectives m et n) constitués d'entiers croissants. Le résultat sera un nouveau tableau ordonné de taille m + n .
Pour tester ce programme on utilisera un tableau u constitué des 10 premiers nombres de Fibonacci (1 1 2 3 5 8 13 21 34 55) et un tableau v constitué des 7 premières puissances de 2 (1 2 4 8 16 32 64). Le résultat de la fusion doit être le tableau suivant, constitué de 17 nombres : 1 1 1 2 2 3 4 5 8 8 13 16 21 32 34 55 64.
Conseil. Développer ce programme par étapes :
Tester soigneusement chaque étape avec le simulateur avant de passer à l'étape suivante !
On suppose qu'on veut ensuite, dans le même programme et pour une raison quelconque, augmenter la taille de l'un des deux tableaux u ou v : quel est le problème et comment le résoudre ?
Soit un tableau de 32 entiers u0 , u1 , u2 … u31 et soit pi le bit qui indique la parité de ui . Ecrire un programme qui calcule dans un registre l'entier p dont les chiffres binaires sont les pi .
Conseil : chaque fois qu'on lit un nouvel élément ui , remplacer p par 2 * p ou 2 * p + 1 suivant la parité de ui .