13

Enlazadores cargadores-by-gadd

Embed Size (px)

Citation preview

� Al construir un programa algunos de sus módulos pueden colocarse en el mismo módulo fuente y ensamblarse juntos, otros pueden estar en módulos diferentes y ser ensamblados separadamente.

La tarea principal del enlazador es resolver � La tarea principal del enlazador es resolver referencias externas llevadas a cabo la etapa del proceso de traducción, enlazando los módulos ensamblados para formar un programa completo.

� En cualquier caso, los módulos objetoresultantes, algunos de los cuales puedenestar agrupados en librerías, deben ser enlazados para formar el módulo de carga, antes de que se pueda ejecutar el programa. antes de que se pueda ejecutar el programa. Además de dar como salida el módulo de carga, el linker o enlazador o ligador imprimeun mapa de memoria que indica donde seráncargados los módulos objeto en la memoria.

� El ensamblador no puede generar completa la Tabla El ensamblador no puede generar completa la Tabla El ensamblador no puede generar completa la Tabla El ensamblador no puede generar completa la Tabla de Símbolos y se produce un error de programación. de Símbolos y se produce un error de programación. de Símbolos y se produce un error de programación. de Símbolos y se produce un error de programación. Para evitarlo hay que usar las Para evitarlo hay que usar las Para evitarlo hay que usar las Para evitarlo hay que usar las pseudopseudopseudopseudo----instrucciones instrucciones instrucciones instrucciones EXPORT EXPORT EXPORT EXPORT e e e e IMPORT IMPORT IMPORT IMPORT ....

�� EXPORTEXPORTEXPORTEXPORTEXPORTEXPORTEXPORTEXPORT ....---- Se especifican todos los nombres simbólicos de un módulo que serán referenciados por simbólicos de un módulo que serán referenciados por otros módulos.

�� IMPORTIMPORTIMPORTIMPORTIMPORTIMPORTIMPORTIMPORT ....- Se identifican todas las referencias externas de un módulo:

� Permite reconocer una referencia externa

� No se puede completar la Tabla de Símbolos

� El enlazador resolverá las referencias externas.

� Tabla de Símbolos Importados Tabla de Símbolos Importados Tabla de Símbolos Importados Tabla de Símbolos Importados (TSI)(TSI)(TSI)(TSI)◦ Una anotación por cada aparición de un símbolo

importado

◦ Nombre simbólico

◦ Dirección relativa dentro del módulo

◦ Tipo

� Tabla de Símbolos Exportados Tabla de Símbolos Exportados Tabla de Símbolos Exportados Tabla de Símbolos Exportados (TSE)(TSE)(TSE)(TSE)◦ Nombre simbólico

◦ Valor de la dirección

◦ Tipo

� Generar Generar Generar Generar todas las direcciones absolutastodas las direcciones absolutastodas las direcciones absolutastodas las direcciones absolutas

� ProcederProcederProcederProceder a la reubicación del módulo, a la reubicación del módulo, a la reubicación del módulo, a la reubicación del módulo, conocida la dirección inicialconocida la dirección inicialconocida la dirección inicialconocida la dirección inicial

� Copiar Copiar Copiar Copiar todos los módulos en un solo bloque todos los módulos en un solo bloque todos los módulos en un solo bloque todos los módulos en un solo bloque ejecutableejecutableejecutableejecutableejecutableejecutableejecutableejecutable

� Generar Generar Generar Generar todas las direcciones absolutas:todas las direcciones absolutas:todas las direcciones absolutas:todas las direcciones absolutas:

◦ Para determinar la dirección de comienzo del módulo:

� Existe una sentencia ORG y es un módulo absoluto� Existe una sentencia ORG y es un módulo absoluto

� Indicación explícita del usuario al enlazador

� Dirección final del módulo anterior

� ProcederProcederProcederProceder a la reubicación del módulo, a la reubicación del módulo, a la reubicación del módulo, a la reubicación del módulo, conocida la dirección inicial:conocida la dirección inicial:conocida la dirección inicial:conocida la dirección inicial:◦ Una vez realizada la reubicación de todos los módulos, se

conoce la dirección absoluta de todos los símbolos exportados. Para resolver las referencias externas se genera una TTTTTTTTabla GGGGGGGGlobal de Símbolos EEEEEEEExportados (TTTTTTTTGGGGGGGGSSSSSSSSEEEEEEEE):

◦ Uniendo todas las TSE◦ Uniendo todas las TSE

� La TTTTTTTTGGGGGGGGSSSSSSSSE E E E E E E E debe estar bien estructurada pues se realizarán numerosas búsquedas sobre ella

� Hay que comprobar que no existen referencias externas no resueltas

� Para resolver las referencias externas de cada módulo se toman las entradas de su TSI y se busca su dirección absoluta en la TTTTTTTTGGGGGGGGSSSSSSSSEEEEEEEE; si no existe se da un error.

� Copiar Copiar Copiar Copiar todos los módulos en un solo bloque todos los módulos en un solo bloque todos los módulos en un solo bloque todos los módulos en un solo bloque ejecutable.ejecutable.ejecutable.ejecutable.◦ Debe ser manejable por el cargador para proceder a

su ejecución; generalmente, se crea un nuevo fichero con extensión de ejecutable (.EXE, .COM, etc.).etc.).

◦ .EXE, viene de la palabra executable

◦ .COM, viene de la palabra COMMAND

� Es un programa especial, parte del sistema operativo que tiene como propósito colocar en la memoria las instrucciones y datos de un programa o información codificada en lenguaje máquina, para que entonces la lenguaje máquina, para que entonces la computadora pueda procesarla. Un cargador es un programa que realiza la función de carga, pero muchos cargadores también incluyen relocalización y ligado.

� Su objetivo es leer un fichero ejecutable almacenado en memoria auxiliar (DD, Cinta, etc.) y traspasarlo a la memoria principal para su ejecución. Debe ser compatible con el formato de salida generado por el enlazador.

� Para poder cargar los programas en diferentes zonas � Para poder cargar los programas en diferentes zonas de memoria, el cargador reubicador necesita de una Tabla General de Direcciones Absoluta generada por el enlazador combinando la TDA y la TSI de los módulos.

� Para que un programa se ejecute, se necesita que el contador de programa apunte a la primera instrucción ejecutable.

� Ingresa al foro de la Unidad. Descargar e instalar TASM.

� Crear un programa que imprima por pantalla Hola Mundo.

� Ensamblar el programa Hola Mundo. Obteniendo el archivo OBJ.archivo OBJ.

� Enlazar el archivo OBJ, para obtener el archivo Ejecutable .EXE

� Ejecutar el Archivo .EXE