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 ; pour l'instant on utilisera seulement les quatre premiers ; 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).
L'instruction
irmovl $4, %eax
place la valeur 4 dans le registre eax ; décryptage : i = immédiat, r = registre, mov = move, l = long (mode 32 bits).
L'instruction
rrmovl %eax, %ecx
copie la valeur du premier registre dans le second ; décryptage : i a été remplacé par r = registre.
Les instructions arithmétiques portent toujours sur deux registres ; on utilisera addl, subl, andl, xorl. L'instruction
addl %eax, %ecx
ajoute le contenu du premier registre au second ; le premier registre est inchangé, le résultat de l'addition est placé dans le second.
Ecrire un programme qui place les valeurs 5 et 22 dans les deux premiers registres, puis calcule leur somme dans le troisième registre, sans modifier les deux premiers. Ce programme sera sauvé dans le fichier ex1.ys, dans le répertoire seq.
Compiler ce programme : make ex1.yo ; charger ex1.yo dans le simulateur (bouton Load en haut de la fenêtre du code) ; exécuter pas à pas, en observant attentivement le panneau de contrôle (et la fenêtre du code) ; le bouton Reset permet de relancer l'exécution.
Les codes de conditions se trouvent en bas à droite du panneau de contrôle. On s'intéresse au premier, noté Z (Zero) ou ZF (Zero Flag) ; quelle est la condition sur le contenu de deux registres pour que leur conjonction (andl) soit nulle ? Construire un exemple et le tester en adaptant le programme ex1.ys .
Même question avec la disjonction exclusive (xorl).
Une instruction peut être précédée d'une étiquette, par exemple :
boucle: addl %eax, %ecx
après quoi l'instruction
jmp boucle
place dans le compteur de programme PC l'adresse de l'instruction correspondante. On peut faire aussi des sauts conditionnels en remplaçant jmp par je (jump if equal) ou jne (jump if not equal) : le saut est exécuté ou non suivant la valeur du code de condition ZF.
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 fibo.ys .
Après avoir compilé et chargé ce programme dans le simulateur, procéder à une exécution pas à pas, puis à vitesse lente.