  \input{format1.tex}
  \input{intro1.tex}

\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[francais]{babel}


\begin{document}

\noindent \Large {\bf Université d'Orléans} \hfill {\bf Maîtrise d'Informatique}

\normalsize

\begin{center}
{\it Feuille de Travaux Dirigés 10}
\end{center}
\hrule


\ex
Produire le code \`a 2 adresses implantant les instructions C suivantes. 
Indiquer le code interm\'ediaire (\`a trois adresses) produit, ainsi que les
descripteurs de registres et d'adresses.
\begin{verbatim}
    while d > 0 do
            a := b + c;
            d := d - b;
            e := a + f;
            if e # 0 then 
               f := a - d;
               b := d + f
            else 
               e := a - c
            fi;
            b := a + c
     od;
\end{verbatim}
Comment procédér si on dispose de 3 registres uniquement?
De manière générale, comment passer d'un code avec un nombre arbitraire
de registres à un code avec un nombre de registres prédéfini?
\exe


\ex
Donnez le graphe de contr\^ole pour une boucle\,:\\
{\bf for} $I := E_1$ {\bf step} $E_2$ {\bf until} $E_3$ {\bf do} $S$ 
{\bf od} avec les deux s\'emantiques suivantes\,:
\begin{enumerate}
\item La premi\`ere ex\'ecution de $S$ est faite sans contr\^ole. Puis,
$E_2$ et $E_3$ sont r\'e\'evalu\'ees, puis le test \\
(valeur($I$) - valeur($E_3$)) * sign(valeur($E_2$)) $> 0$ est \'evalu\'e.
\item $E_1,~E_2$ et $E_3$ sont \'evalu\'es une seule fois avant d'entrer
dans la boucle.
\end{enumerate}
\exe

\ex
\begin{enumerate}
\item Construire le graphe de flot de contr\^ole ${\cal G}$ pour 
le code du premier exercice.
\item Calculer l'ensemble des variables actives pour chaque bloc, 
sachant qu'aucune variable n'est utilisée après ce code.
\item Quelles sont les variables que vous avez envie de ranger dans 
des registres?
\end{enumerate}
\exe


\ex
Proposer une traduction oprimisée pour le programme suivant~:
\begin{verbatim}
    while d > h*h do
            a := b + c;
            d := d - b;
            e := a * d;
            g := f
            if e # 0 then 
               f := g;
               b := d * 5
            else 
               f := a * d
            fi;
            b := a + c
     od;
\end{verbatim}
\exe

\ex
Produire le code \`a 3 adresses et le code implantant le programme C suivant\,:
\begin{verbatim}
    x = f(a) + f(a) + f(a)
\end{verbatim}

M\^eme question pour 
\begin{verbatim}
    x = f(f(a))
\end{verbatim}
\exe

\end{document}





