SISTEMAS DE PROGRAMACION / UNIDAD I: INTRODUCCIÓN AL SOFTWARE DE SISTEMAS 1.1. PROGRAMAS COMPUTACIONALES Y SOFTWARE COMPUTACIONAL. 1.1.1. Software de sistemas I.- Ensambladores. PALABRAS CLAVE El nivel del lenguaje ensamblador. Tradicionalmente se ha denominado nivel 0 o bajo nivel al nivel del lenguaje maquina. El nivel de el lenguaje ensamblador equivale al nivel de el lenguaje maquina, esto es, nivel 0 o nivel bajo. Una instrucción del lenguaje ensamblador es equivalente a una instrucción del lenguaje maquina. El nivel de un lenguaje como cobol, pascal, java, ada, modula 3, etc. es de nivel alto. El resultado de un lenguaje de bajo nivel a lenguaje maquina es la misma cantidad de código, pero en uno de alto nivel (pascal, java, etc.) a lenguaje maquina podrá ser mayor al original. Algunos autores consideran a lenguajes de programación como el lenguaje “C”, un nivel de lenguaje intermedio. Las funciones de un Ensamblador Los ensambladores fueron los primeros traductores de lenguajes simbólicos o nemonicos, y que fueron escritos por Nathaniel Rochester de IBM en 1953. Un ensamblador es un programa que convierte a otro programa escrito en lenguaje ensamblador a un lenguaje maquina o binario. Normalmente un ensamblador traduce un programa en 2 pasos (pasadas). Durante el primer paso el ensamblador convierte el código de operación (opcode) de cada instrucción a su correspondiente a binario. Además construye la tabla de símbolos. En el segundo paso reemplaza los operandos con direcciones binarias y crea un archivo objeto. II.- Cargadores y Ligadores Concepto de Cargadores y Ligadores. Se requiere después de la traducción o ensamble o compilación de un paso extra que es el ligado. Ligador.- Un ligador es un programa que combina mas de un archivo objeto generado o producido por un ensamblador o compilador, y después produce un archivo ejecutable. Cargador.- Un cargador es un programa que toma como entrada un archivo ejecutable, lo carga a la memoria principal y provoca el inicio de ejecución del programa o archivo ejecutable. Para eso el cargador pasa la dirección de la primera instrucción del programa ejecutable al PC. RESUMEN L.I.OSCAR RAMIREZ CORTÉS Página 0 PALABRAS CLAVE Funciones de un cargador y de un ligador. Ligador Tiene dos funciones que son: 1.- Unir dos o mas módulos o archivos objetos ensamblados o compilados separadamente. 2.- Una segunda función del ligador es resolver las referencias a diferencias dentro del programa ejecutable. Para realizar este trabajo un ligador construye una tabla de módulos. Se le suma la dirección de carga para resolver las referencias a direcciones. A este proceso se le conoce como relocalización. Cargador. La función principal del cargador es copiar el modulo ejecutable o programa ejecutable a la memoria para que dicho programa inicie su ejecución. Otra función es checar que la copia del ejecutable sea correcta. Esto es, que no se alteren los datos o bytes del ejecutable. Otra función del cargador es la re-localización de direcciones de los programas cargados. El cargador usa técnicas para verificar que los datos copiados del archivo ejecutable a memoria sean correctos o iguales. RESUMEN 1 Programación de Sistemas L.I. & MSC Oscar Ramírez Cortés III.- Compiladores. PALABRAS CLAVE Funciones de compiladores. La función mas importante es traducir un programa escrito en un lenguaje de alto nivel (Java, C++, pascal, etc.) a un programa en código objeto (usualmente máquina). Otras funciones del compilador son: Detectar errores de escritura (Léxico, Sintáctico y Semántico). Optimizar el código que se genera. Producir código transportable hacia diferentes arquitecturas. Traducir un programa escrito de alto nivel y producir otro programa en código objeto que pueda ser lenguaje maquina o lenguaje ensamblador. RESUMEN 2 Programación de Sistemas L.I. & MSC Oscar Ramírez Cortés PALABRAS CLAVE IV.- Intérpretes Principios de Interpretación. En lugar de producir un programa objeto como resultado de una traducción, un intérprete realiza las operaciones que implica el programa fuente. Por ejemplo un intérprete podría construir un árbol, y después efectuar las operaciones de los nodos conforme recorre el árbol. Muchas veces los intérpretes se utilizan para ejecutar lenguajes de órdenes, pues cada operador que se ejecuta en un lenguaje de este tipo suele ser una invocación de una rutina, como un editor o un compilador. Del mismo modo algunos lenguajes de alto nivel son interpretados, porque hay muchas cosas sobre los datos, como el tamaño y la forma de las matrices que no se pueden deducir en el momento de la compilación. Intérprete: Es un traductor que realiza la operación de compilación paso a paso. Para cada sentencia que compone el texto de entrada, se realiza una traducción, ejecuta dicha sentencia y vuelve a iniciar el proceso con la sentencia siguiente. La principal ventaja del proceso de compilación frente al de interpretación es que los programas se ejecutan mucho más rápidamente una vez compilados; por el contrario, es más cómodo desarrollar un programa mediante un intérprete que mediante un compilador puesto que en el intérprete las fases de edición y ejecución están más integradas. La depuración de los programas suele ser más fácil en los intérpretes que en los compiladores puesto que el código fuente está presente durante la ejecución. Estas ventajas pueden incorporarse al compilador mediante la utilización de entornos de desarrollo y depuradores simbólicos en tiempo de ejecución. Diferencia entre Intérpretes y Compiladores. INTERPRETE: Es un programa que lee línea a línea un programa escrito en un lenguaje; en lenguaje fuente y lo va traduciendo a un código intermedio, para ejecutarlo. COMPILADOR: Es un programa que lee totalmente un programa escrito en un lenguaje; el lenguaje fuente, y lo traduce a un programa equivalente a otro lenguaje, lenguaje objeto. RESUMEN 3 Programación de Sistemas L.I. & MSC Oscar Ramírez Cortés