ASSEMBLEUR, ALLOCATION DE REGISTRE Exercice 1. Fonctions

publicité
ASSEMBLEUR,
ALLOCATION DE REGISTRE
Exercice 1. Fonctions en assembleur.
La suite de Fibonacci est définie par
F0
=
1,
F1
=
1,
Fn+1
= Fn + Fn−1 pour n > 0.
Écrire en assembleur une fonction récursive qui calcule le n-ième terme de la suite.
Exercice 2. Nombre d’Ershov.
Décorer les expressions suivantes par leur nombre d’Ershov :
(1) b * b - b
(2) a*b + f(2)
(3) a > 10 AND c = 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 ;
écrire(c) ;
sinonsi a < 20 :
e := 10 ;
d := e + a ;
écrire(e) ;
sinon :
f := 12 ;
d := f + a ;
écrire(f ) ;
(1) Découper le code en blocs de base, dessiner le graphe de flot.
(2) Donner le graphe d’interférence.
(3) En déduire le nombre de registres nécessaires.
(4) Écrire 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 à afficher ; pour
la lecture, $v0=5, et le résultat est mis dans $v0.
Téléchargement