Está en la página 1de 5

TEMA 3: El proceso de compilacin, del cdigo fuente al cdigo mquina

3.1 Fase de compilacin y linkado (link, montado o enlace)


Un programa escrito en un lenguaje de alto nivel, no puede ser ejecutado directamente por un ordenador, sino que debe ser traducido a lenguaje mquina. Las etapas por las que debe pasar un programa escrito en un lenguaje de programacin, hasta poder ser ejecutable son: Programa fuente: Es el programa escrito en un lenguaje de alto nivel. No es ms que un texto ordinario que contiene las sentencias (instrucciones) del programa en un determinado lenguaje de programacin. Compilador es el programa encargado de traducir los programas fuentes escritos en un lenguaje de alto nivel a lenguaje mquina (traduce nuestras instrucciones a otras reconocibles por el microprocesador). Programa objeto o cdigo objeto: Es el programa .obj resultante de la traduccin del cdigo fuente. An no es directamente ejecutable por el ordenador.
Figura 1. Fases de ejecucin de un programa

Linker (montador o enlazador): Es el programa encargado de realizar el proceso de montaje, que producir un programa .exe en lenguaje mquina directamente ejecutable (programa ejecutable). El linkador se encarga de unir al programa objeto una serie de libreras (archivos de biblioteca) necesarias para su funcionamiento. Los archivos de biblioteca son una coleccin de cdigo que ha sido programada y traducida, y lista para utilizar en un programa.

Pgina 1 de 5

Como cada lenguaje de programacin tiene unas reglas especiales (sintaxis) para la construccin de sus programas, debe existir un compilador especfico para cada lenguaje de programacin. El compilador antes de generar el programa objeto debe analizar el programa fuente (almacenado en un archivo de texto) y comprobar que cumple las reglas de sintaxis del lenguaje de programacin. Si cumple la sintaxis genera el correspondiente programa objeto, sino, visualizar un mensaje de error y su posible causa para que procedamos a la depuracin del programa. Depurar un programa consiste en detectar y corregir los errores que se producen en l, ya sean en tiempo de compilacin o en tiempo de ejecucin. Los errores en tiempo de compilacin son los que se producen antes de la ejecucin del programa, durante el proceso de compilacin del programa. Los errores en tiempo de ejecucin son los que se producen durante la ejecucin del programa. Este tipo de errores, son los ms difciles de encontrar, porque no son detectados por el compilador, ya que no son errores consecuencia de violar alguna regla sintctica. Es decir, aunque al compilar un programa no de errores, eso no significa que el programa funcione adecuadamente o que no vaya a producir algn fallo durante la ejecucin del mismo. Por ejemplo: Un programa puede producir resultados errneos, porque nos hayamos equivocado (errores lgicos) al programar el algoritmo (por ejemplo, donde tenamos que sumar, hemos programado una multiplicacin). Un programa puede interrumpirse bruscamente, por ejemplo si tenemos que hacer una divisin y el divisor es cero, etc. Para ayudarnos a encontrar los errores lgicos y dems errores producidos en tiempo de ejecucin, podemos hacer uso de los depuradores. Un depurador (debugger), es un programa diseado especficamente para la deteccin, verificacin y correccin de errores, y que por tanto nos ayudar en las tareas de depuracin. Los depuradores nos permiten trazar el programa (ejecutarlo sentencia a sentencia) y visualizar el contenido de las variables y direcciones de memoria durante la ejecucin del programa. Adems permiten alterar el flujo de ejecucin del mismo, cambiar los valores de las variables e introducir puntos de parada.

Pgina 2 de 5

Los compiladores emiten mensajes de error o de advertencia durante las fases de compilacin, de enlace o de ejecucin de un programa. Los mensajes de error producidos los podemos agrupar en tres bloques: Errores fatales: Son raros. Algunos indican un error interno del compilador. Cuando ocurren la compilacin se detiene inmediatamente. Errores de sintaxis: Son los errores tpicos de sintaxis, errores de lnea de rdenes y errores de acceso a memoria o disco. El compilador terminar la fase de compilacin y se detendr. Advertencias (warnings): No impiden la compilacin. Indican

condiciones que son sospechosas, pero son legtimas como parte del lenguaje. As pues los pasos a seguir para la elaboracin y ejecucin de un programa los podemos resumir de la siguiente manera: 1 . Comenzamos escribiendo el cdigo fuente. 2 . Compilamos el fichero fuente y se comprueban los mensajes de error. 3 . Volvemos al editor y eliminamos los errores de sintaxis. 4 . Cuando el compilador tiene xito, el linker construir el archivo ejecutable. 5 . Ya podemos ejecutar el archivo ejecutable que se obtiene al linkar. 6 . Si encontramos un error, podemos activar el depurador para trazar el programa y ejecutar sentencia a sentencia. 7 . Una vez que hayamos encontrado la causa del error, volveremos al editor y lo corregimos. 8 . El proceso de compilar, enlazar y ejecutar el programa lo repetiremos hasta que no se produzcan errores.
9 . Una vez tengamos el archivo ejecutable, ser el sistema operativo el

encargado de colocar el programa en la memoria central y ejecutarlo.

Pgina 3 de 5

3.2 Fase de ejecucin de un programa


Una vez que tenemos el programa en lenguaje mquina, para poderlo ejecutar hay que introducirlo en la memoria. Para esta tarea existe un programa del sistema operativo denominado cargador, que introduce el programa en posiciones consecutivas de memoria a partir de una determinada. Cuando el programa est cargado se le indica a la computadora que pase su control a la posicin de memoria donde se ha cargado. Esta operacin la hace directamente el sistema operativo. A partir de ahora, la Unidad de Control repite sucesivamente los siguientes pasos: Suponiendo que el programa se ha cargado a partir de una determinada posicin i de memoria. 1. Lleva de la Memoria (M) a la Unidad de Control (UC) la instruccin que est en la posicin i. Cambiar el valor de i por i+1. 2. Interpreta el cdigo de operacin de la instruccin y, segn sea ste y las seales de estado, enva seales de control a las unidades y circuitos que deben intervenir para ejecutar la instruccin. Vuelve a la fase (1). La fase (1), es la fase de captacin de instruccin, y la (2), es la fase de ejecucin de instruccin. En el caso de que la ejecucin de una instruccin implique saltar a otra instruccin en la posicin m, por ejemplo (alterndose por tanto el orden secuencial), la UC hace, en la fase de ejecucin de la instruccin de salto, que cambie i por m, de forma que en la siguiente fase de captacin se ejecuta la instruccin que est en m.

Pgina 4 de 5

3.3 El compilador de C. Caractersticas generales.


El lenguaje C es un lenguaje de nivel medio: combina elementos de lenguajes de alto nivel con la funcionalidad del lenguaje ensamblador. Como lenguaje de nivel medio, permite la manipulacin de bits, bytes y direcciones. Es particularmente adecuado para la programacin de sistemas. El cdigo de C es muy portable: se puede adaptar el software escrito para un tipo de computadora a otra computadora sin hacer muchos cambios. El lenguaje C es un lenguaje estructurado: permite seccionar y esconder (mediante subrutinas y variables locales) del resto del programa toda la informacin e instrucciones necesarias para realizar una determinada tarea. Soporta construcciones de bucles (while, do-while y for) e instrucciones condicionales (if, switch) Permite sangrar las sentencias. Permite crear funciones (subrutinas independientes). Las funciones son los bloques en los que se desarrolla toda la actividad de los programas. Son los que permiten definir las tareas de un programa y codificarlas por separado, permitiendo as que los programas sean modulares. Permiten crear bloques de cdigos. Un bloque de cdigo es un grupo de sentencias de un programa conectadas de forma lgica que es tratado como una unidad. Se crean colocando una serie de sentencia entre llaves. El lenguaje C slo tiene 32 palabras clave, que constituyen las rdenes que conforman el lenguaje C (el BASIC por ejemplo contiene 159 palabras clave). El lenguaje C es compilado, no interpretado. Un intrprete lee el cdigo fuente de un programa lnea a lnea y traduce las instrucciones especficas contenidas en esa lnea para que el microprocesador las pueda interpretar, pero no genera ningn programa objeto. Un compilador, en cambio lee el programa entero y lo convierte en cdigo objeto, de manera que genera un programa en un cdigo que es directamente ejecutable y entendible por el microprocesador.

Pgina 5 de 5