ASSEMBLEUR,
ALLOCATION DE REGISTRE
Exercice 1. Fonctions en assembleur.
La suite de Fibonacci est d´efinie par
F0= 1,
F1= 1,
Fn+1 =Fn+Fn−1pour n > 0.
´
Ecrire en assembleur une fonction r´ecursive qui calcule le n-i`eme terme de la suite.
Exercice 2. Nombre d’Ershov.
D´ecorer les expressions suivantes par leur nombre d’Ershov :
(1) b*b-b
(2) a*b + f(2)
(3) a>10ANDc=b
Dans quel cas pourrait-on faire des optimisations ?
Exercice 3. Allocation de registres.
Soit le pseudo-code suivant.
a:= lire() ;
b:= lire() ;
c:= lire() ;
si a < 10 :
d:= c+ 8 ;
´ecrire(c) ;
sinonsi a < 20 :
e:= 10 ;
d:= e+a;
´ecrire(e) ;
sinon :
f:= 12 ;
d:= f+a;
´ecrire(f) ;
(1) D´ecouper le code en blocs de base, dessiner le graphe de flot.
(2) Donner le graphe d’interf´erence.
(3) En d´eduire le nombre de registres n´ecessaires.
(4) ´
Ecrire le programme assembleur correspondant. On pourra utiliser les instructions add,
j, blt. Le syscall pour l’affichage demande $v0=1 et $a0 est le nombre `a afficher ; pour
la lecture, $v0=5, et le r´esultat est mis dans $v0.