\section{De l'assembleur à la représentation } 
  \subsection{Désassemblage}
  Le désassemblage consiste à partir d'un programme déjà compilé, 
donc compréhensible uniquement par la machine, d'en retrouver une 
représentation intermédiaire. C'est-à-dire une représentation entre 
le code source original du concepteur incompréhensbile directement 
par la machine et le code binaire auquel ne peut être associé qu'un 
seul et unique code assembleur.

  \subsection{Pourquoi une représentation intermediare}
  Le fait de transformer le code d'un programme compilé, donc binaire,
en sa representation code assembleur unique permet le passage d'un 
langage incomprehensible à l'homme à un langage permettant à celui-ci 
des analyses dessus. Mais le but est bien évidement de ne pas s'arreter 
à ce code assembleur, mais d'essayer de remonter vers une représentation 
visant le code source original.

  \subsection{Présentation de différentes représentations intermédiaires}
  \begin{itemize}
    \item La représentation assembleur. Elle est donc la représentation 
      de base car ayant une relation bijective avec le code machine. 

    \item La représentation RTL. Ou Register Transfer Level est une des 
      représentation intermédiaire utilisée par GCC entre autre. Appelée 
      également ``code 3 adresses'', elle fait parti des langages
      intermédiaires les plus utilisés, c'est un langage impératif
      dont les constructions de base correspondent directement à des
      instructions du processeur, mais opèrent sur des
      pseudo-registres en nombre arbitraire.

      Exemple de code RTL:
      \begin{verbatim}
	signal r124_Q : std_logic_vector( 3 downto 0 );
	?
	P1 : process
	begin
	?
	wait until clk_bit'event and clk_bit = '1';
	if ( n420 = '1' ) then
	r124_Q <= (Sy_1_vector(3), Sy_1_vector(2), Sy_1_vector(1),
	Sy_1_vector(0));
	r142_Q <= (Sx_1_vector(3), Sx_1_vector(2), Sx_1_vector(1),
	Sx_1_vector(0));
	end if;
	?.
	End process;
	?
      \end{verbatim}

    \item La représentation SSA. Ou Single Static Assignment est une forme 
      de représentation intermédiaire dans lequel chaque variable du code à 
      une seule et unique définition.
      Code original:
      \begin{verbatim}
	i = 0
	i = i + 1
	j = func(i)
	i = 2
      \end{verbatim}

      Code SSA:
      \begin{verbatim}
	i0 = 0
	i1 = i0 + 1
	j0 = func(i1)
	i2 = 2
      \end{verbatim}

   \end{itemize}


