- La generación de código y el asignamiento de registros temporales son separados de las rutinas semánticas, los cuales solo trabajan con la abstracción presentada por la representación intermedia. las dependencias del código objeto son aisladas de las rutinas de generación de código.
- El código objeto es abstraído para una maquina virtual. esta abstracción ayuda a separar operaciones de alto nivel y realizar dependientes de la maquina.
2. Explique con un ejemplo la optimización de código.
Por ejemplo en C# para el cálculo de potencias podemos optimización código utilizando la función Pow de la clase Math, en lugar de crearla nosotros mismos.
Método no optimizado:
public int Operacion(int n, int exponente)
{
int temp = 1;
for (int cont = 1; cont <= exponente; cont++)
{
temp = temp * n;
}
return temp;
}
Método optimizado:
public int Operacion(int n, int exponente)
{
double resp;
resp=Math.Pow(n,exponente);
return resp;
}
3. Señale el proceso de compilación de un programa en C#.
Lo primero que le ocurre a un fichero de código C# es el preprocesado. En este paso se sustituyen todas las macros y se eliminan los comentarios. El resultado, si lo vemos independientemente, es un fichero de código C# preprocesado.
El segundo paso es la compilación propiamente dicha, en el que el código C# preprocesado se convierte en código ensamblador, que si lo vemos independientemente es un fichero .s.
El tercer paso es el ensamblado del código ensamblador, lo que lo convierte en código máquina. Un fichero de código máquina también es llamado fichero objeto.
Dado que el camino anterior normalmente convierte un fichero en un fichero, se suele hacer en un sólo paso, de código C# a fichero objeto.
El último paso es el enlazado de los ficheros objeto en el ejecutable final.
4. Generar CI para el código siguiente:
If x>10 and Not(y<0) Then
A+=2
B+=1
End if
Código Intermedio:

for (i=0; i<10; i++){
x += i;
}
Código Intermedio:



