Corrigé

publicité
Université de Nice – Sophia Antipolis
Licence 1 Sciences Fondamentales 2013-2014
Informatique Générale
TP n° 10
Langage assembleur
Le but de ce TP est d’étudier un langage dit de bas niveau, c’est à dire très proche des instructions
élémentaires du processeur. Ce langage, appelé assembleur, est exécuté par le processeur après de
très légères modifications. Il peut être écrit par un humain (comme ici) mais en pratique c’est très
rare, il est plutôt généré à partir de langages de plus haut niveau comme C, Java ou Scheme.
Un langage assembleur est spécifique à une famille de processeur et relativement complexe. Nous
allons donc utiliser un langage simplifié qui sera exécuté sur un processeur simplifié, écrit en Java.
Ce processeur ne possède qu’un seul registre. Vous le trouverez à
http://www.cse.yorku.ca/~peterc/simulator/simulator.html
Attention c'est une applet Java, peut être un peu long à charger et nécessite d'avoir le plugin (en
théorie, les machines des étudiants l'ont).
Dans le « code builder », on choisit une instruction à gauche et on l'insère dans le code par ►.
Mettre l'adresse avant de cliquer sur ► si l'instruction a besoin d'une adresse. Puis « compile ».
Ensuite passez à « Little Man Computer »
On peut changer la partie adresse d'une instruction par un clic droit sur l'instruction, et changer une
instruction de place par les flèches haut et bas
Notre langage sera composé dans un premier temps des instructions suivantes
STOP : arrête l’exécution du programme
LOAD : charge l’adresse mémoire passée en paramètre dans un registre du
processeur
STORE : sauvegarde le contenu du registre dans la zone mémoire passée en paramètre
ADD/SUBSTRACT : ajoute/soustrait le contenu du registre à l’adresse mémoire passée en
paramètre et stock le résultat dans le registre
READ : lit une information entrée par l’utilisateur et la place dans le registre
Exercice 1 : Programme simple
1. Écrire un programme qui lit une entrée de l’utilisateur (chiffre), le stocke dans l’adresse
mémoire 10.
READ
STORE 10
STOP
2. Compilez et testez votre programme. Quel est le rôle de l’instruction counter ?
L'adresse de l'instruction courante
3. Modifiez votre programme pour que la valeur soit stockée dans une adresse mémoire où
se trouve une instruction de votre programme. Que se passe-t-il ?
READ
STORE 0
STOP
le simulateur râle (il protège les instructions contre l'écriture)
4. Écrire un programme qui lit 2 valeurs entrées par l’utilisateur, les stocke à deux adresses
mémoires différentes, puis les permute.
On range les 2 valeurs lues en 20 et 21. On se sert de 22 comme variable tampon pour
faire l'échange.
Exercice 2 : Branchements
Notre langage assembleur fournit une série d’instructions de branchement (également appelées
saut) qui permettent de continuer l’exécution du programme à une adresse passée en paramètre
1. Reprenez le programme 1.4. et insérez une instruction BRANCH qui aura comme
paramètre l’adresse de l’instruction STOP. Placez cette instruction en deuxième position
de votre programme et exécutez le. Que constatez vous ? Observez l’instruction counter
On saute donc on n'exécute pas le reste du programme. L'IC prend pour valeur l'adresse
du saut
2. Ecrire un programme qui lit un entier de l’utilisateur, le place dans une zone mémoire,
effectue les opérations suivantes en boucle : lire l’entier de la mémoire, l’ajouter à lui
même, l’écrire en mémoire à la place de l’ancien.
on s'arrête sur un overflow
3.
4. L’instruction BRANCHP (Branch Positive) permet de faire un saut conditionnel. Si la
valeur contenue dans le registre est strictement positive (ou nulle), alors le saut est
effectué. Écrire un programme utilisant cette instruction qui prend en entrée une valeur
et la décrémente jusqu’à ce qu’elle vaille 0.
Comme on ne sait pas mettre un constante en mémoire, il faudrea lire la cste 1 (qu'on
range ici en 11). Comme BRANCHP ne convient pas, on utilise BRANCHZ
Exercice 3 : Un vrai programme
1. Écrire un programme qui fait la somme de tous les entiers compris entre 0 et une valeur
donnée par l’utilisateur.
On fait la somme comme n + (n-1) + (n-2) + ... + 1
On met n en 17, qui se décrémente de 1 (qu'on place en 16) à chaque tour de boucle. La
somme est calculée en 15.
Téléchargement