Clase18 PDF

You might also like

Download as pdf
Download as pdf
You are on page 1of 15
CAPITULO 5 Como ensamblar, enlazar y ejecutar un programa OBIETIVO Analizar los pasos para ensamblar, enlazar y ejecutar un progra- ma en lenguaje ensamblador. INTRODUCCION 2 Este capftulo explica el procedimiento para teclear un programa en lenguaje ensamblador y para censamblarlo, enlazarlo y ejecutarlo. Las instrucciones simbélicas que codifica en lenguaje ensam- blador, son conocidas como el programa fuente. Se utiliza el programa ensamblador para traducit el programa fuente en cédigo de maquina, conocido como el programa objeto. Por iiltimo, se emplea un programa enlazador para completar el direccionamiento de maquina del programa objeto, generando un médulo ejecutable. Las secciones sobre e! ensamble explican cémo solicitar la ejecucién del programa ensam- blador, el cual provee de diagnésticos (incluyendo mensajes de error) y genera el programa objeto. También se explican los detalles del listado del ensamblador y, en términos generales, ‘cémo el ensamblador procesa un programa fuente. Las secciones sobre el enlace explican cémo solicitar la ejecucién del programa enlaza- dor de manera que pueda generar un médulo ejecutable. También son explicados los detalles del ‘mapa de enlace generado, asi como los diagnésticos. Por titimo, una seccidn explica cOmo soli- citar la ejecucién de un médulo ejecutable. Com CON cémo | | Cémo ensamblar un programa fuente 73 COMO PREPARAR UN PROGRAMA PARA SU EJECUCION La figura 4-2 s6loilusr6 el cédigo fuente de un programa, todavia no en formato ejecuable. Para L teclear este programa, se puede usar un programa editor, tal como el proporcionado con el DOS. En los ejemplos siguientes de comandos DOS, sustituya lo apropiado para su sistema. También puede sumentar mucho la productividad cargando sus programas y archivos en un disco RAM (disco virtual). Llame a su programa editor, teclee los enunciados del programa en la figura 4-2 y al archivo resultante péngale por nombre POSASMI.ASM. Aunque para el ensamblador no es importante el espaciamiento, un programa ser mis legible si mantiene alineados por columnas y de manera consistente el nombre, operaciGn, operandos ¥ comentarios. La mayorfa de los editores tienen marcas de tabulacién cada ocho posiciones para faciltar Ia alineacin de columns. ‘Una ver. que ha introducido todos los emunciados del programa, revise el e6digo para ver si es correcto. La mayorfa de los editores tiene una faciidad para imprimir, pero si no la tiene, encienda su impresora y utlice el programa PRINT del DOS: PRINT :POSASHI-ASM [Enter] Tal como esta, el programa es s6lo un archivo de texto que no puede ejecutarse: primero debe ensamblarlo y enlazarlo, 1. El paso de ensamble consiste en la traduccion del cédigo fuente en codigo objeto y la generacién de un archivo intermedio .OBJ (objeto), 0 médulo (en capitulos anteriores ya haa visto ejemplos de cédigo de méquina y de cédigo fuente). Una de las tareas del censamblador es calcular el desplazamiento de cada elemento en el segmento de datos y de cada instruccién en el segmento de c6digo. El ensamblador también crea un encabezado al frente del médulo .OBJ generado; parte del encabezado tiene informacién acerca de direcciones incompletas. El médulo .OBJ ain no esta en forma ejecutable. 2. El paso de enlace implica convertir el médulo .OBI en un médulo de cédigo de maquina -EXE (cjecutable). Una de las tareas del enlazador es combinar los programas ensamblados cen forma separada en un médulo ejecutable. wa 3. El tltimo paso es cargar el programa para su ejecucién. Ya que el cargador conoce en = dénde esté el programa a punto de ser cargado, puede completar las direcciones indicadas sir cen el encabezado que estaban incompletas. El cargador desecha el encabezado y crea un = PSP inmediatamente antes del programa cargado en memoria, La figura 5-1 proporciona un diagrama de los pasos implicados al ensamblar, enlazar y am ejecutar un programa. ss COMO ENSAMBLAR UN PROGRAMA FUENTE, | El programa ensamblador de Microsoft (hasta la versién 5.x) es MASM.EXE, mientras que el del programa de Borland es TASM.EXE. El ensamblador de Microsoft por lo general utiliza el co- lie ‘mando ML, pero también acepta MASM por compatibilidad con versiones anteriores. Puede teclear el comando para ejecutar MASM o TASM en una linea de comando o por ‘medio de peticiones. Esta seccién muestra c6mo utilizar la linea de comando; véase en el apéndice D el método con indicacién. El formato general para un comando de linea para ensamblar un programa es: (Cémo ensamblar, enlazar y ejecutar un programa Capitulo 5 ae Prop Lst agen pou Figura S-1_ Pasos para ensamblar, enlazar y ejecutar MASH/TASM Topcie: o}_[yidstadel_{,referuzads + Opciones estipula caracteristicas como configuracién del nivel de mensajes de advertencia y se explican en el apéndice D. Ya que los valores por omisién del ensamblador por lo regular son los adecuados, rara vez necesitaré utilizar opciones. + Fuente identifica el nombre del programa fuente, como POSASMI. El ensamblador asume la ektensién ASM, de modo que no necesita introducirla. Si no quiere aceptar la unidad de disco por omisin, también puede dar la especificacién de una unidad de disco. + Objeto estipula un archivo .OBS generado. La unidad, subdirectorio y nombre de archivo puede ser el mismo o diferente del fuente. + Listado estipula un archivo .LST generado que contiene tanto el cédigo fuente como et cédigo objeto. La unidad, subdirectorio y nombre de archivo puede ser el mismo 0 diferente del fuente. Listado del ensamblador de las definiciones convencionales de segmentos 75 + Refcruzadas genera un archivo de referencias cruzadas con los simbolos usados en el programa, que puede usar para un listado de referencias cruzadas. Para MASM, la extensién es CRF y para TASM la extension es XRF. La unidad, subdirectorio y nombre de archivo puede ‘ser el mismo o diferente del fuente El nombre del archivo fuente siempre lo debe introducir, y por lo general solicita un archivo (OBJ, que es necesario para enlazar un programa en forma ejecutable. Tal vez. en algunas ocasio- nes solicitaré archivos .LST, en especial cuando quiera examinar el cédigo de maquina generado. Un archivo .CRF es til para programas grandes en donde quiera ver qué instrucciones hacen referencia a qué datos. También la peticion de un .CRF hace que el ensamblador genere nimeros de lineas para los enunciados en el archivo .LST a las cuales el archivo .CRF se refiera. Secciones posteriores cubren en detalle los archivos .LST y .CRF. Ejemplo 1: Especifique el archivo fuente, POSASML, en la unidad D y genere archivos objeto, de listado y de referencias cruzadas, Si el nombre de un archivo es el mismo que el del archivo fuente, no necesita repetirlo; basta con la especificacién de la unidad para solicitar un archivo: Ejemplo 2: Sélo genere un archivo objeto. En este caso, puede omitir la referencia a los archivos de listado y de referencias cruzadas: s6lo introduzca el comando Wasu/TASM A:PosASM, D El ensamblador convierte sus enunciados fuente en c6digo de méquina y despliega, si hay, cerrores en la pantalla. Los errores comunes incluyen un nombre que viola las convenciones para Ia formacién de nombres, una operacién que se escribié de forma incorrecta (como MOVE en lugar de MOV) y un operando con un nombre que no esté definido. Existen alrededor de 100 mensajes de error, explicados en el manual del ensamblador. Ya que hay muchas versiones dife- rentes de ensamblador, no trataremos de listar los errores. El ensamblador intenta corregir algu- nos errores, pero de cualquier forma usted debe volver a cargar su editor, corregir el programa fuente .ASM y reensamblarlo, LISTADO DEL ENSAMBLADOR DE LAS DEFINICIONES CONVENCIONALES DE SEGMENTOS La figura 5-2 proporciona el listado que produce el ensamblador con el nombre POSASM1.LST. Por Ia entrada PAGE, el ancho de la linea es de 132 posiciones. Si su impresora puede comprimir la linea de impresién, entonces también puede imprimir este listado. Muchas impresoras de im- ppacto tienen un interruptor que fuerza la impresién comprimida, o podria solicitar al editor o procesador de textos imprimir en modo comprimido. Otra manera es usar el comande MODE del DOS; encienda su impresora, teclee el comando MODE LPTI:132,6 para 132 caracteres por linea ¥ seis lineas por pulgada y utilice PRINT del DOS. Note cémo han actuado las directivas PAGE y TITLE en la parte superior del listado. Ninguna de las directivas, incluyendo SEGMENT, PROC, ASSUME y END, generan cédigo de maquina, ya que s6lo son mensajes al ensamblador. En el extremo izquierdo esté el nimero de cada linea. La segunda columna muestra, en hexadecimal, las direcciones de los campos de datos y de las instrucciones. La tercera columna muestra el cédigo de méquina traducido en formato hexadecimal. A la derecha se encuentra el ‘cédigo fuente original. 76 (Cémo ensamblar, enlazar y ejecutar un programa Capitulo § lis T0EAGW (BIR) _Operacionea de mover ¥ Sumer a 2 page 60,122 i mime Falken’ Uitey operaciones de mover y sumer 4 9000 Smncise’”seonen basa Sack “Stack” $9088 oo2or Beet Se DoPtoN 5 1 5 cove sracksa ene 3 cove inaasa” sean PARA "once 22 8900 oor = PRR BN B80 3 foo od eas He Goo 0000 Fue 3 Save Brisa Bos 3 o000 doonsa sean pana * 23 ier 2a 38 coun BesIn NDP Osasn3.asu(25) error Az00G: Phase error between passes Boon ‘covesa ENDS Figura 5-5 Diagnéstico del ensamblado 86 Cémo ensamblar, enlazar y ejecutar un programa Capitulo 5 21 DX debe ser codificado como DS, aunque el ensamblador no sabe que éste es un error, 23 AS debe se codificado como AX. 25 FLDD debe se codificado como FLDC. 28 La correccién de los otros errores hard que este diagndstico desaparezca. q El tiltimo mensaje de error, “Phase error between passes”, ocurre cuando las direcciones generadas en la pasada 1 difieren de aquellas en la pasada 2 en un ensamblador de dos pasadas. ara aislar in error desconocido, utilice la opcién /D para que MASM liste un archivo para la pasada 1 y otro archivo para la pasada 2, y compare los desplazamientos. PUNTOS CLAVE + MASM y TASM proporcionan una linea de comando para ensamblar, incluyendo (al menos) 1 nombre del programa fuente, MASM también proporciona indicaciones para introducir opciones. + Elensamblador convierte un programa fuente a un archivo .OBI y genera archives opcionales para el listado y las referencias eruzadas. | + La tabla de segmentos y grupos que sigue a un listado de ensamblador muestra los segmentos ¥¥ grupos definidos en el programa. La tabla de simbolos muestra todos los simbolos (nombres ‘de datos y etiquetas de instruccién). + El enlazador (LINK © TLINK) convierte un archivo .OBJ en un archivo .EXE. Usted puede cenlazar usando una linea de comando o por medio de indicaciones (s6l0 LINK). + Las directivas simplificadas de segmentos generan los nombres _DATA para el segmento de datos, STACK para el segmento de la pila y_TEXT para el segmento de c6digo. También i generan varias equivalencias predefinidas, + El programa CREF (0 TCREF) produce un til listado de referencias cruzadas. PREGUNTAS 5-1. Codifique la linea de comands para ensamblar el programa fuente llamado DISCOUNT.ASM cos archivos .LST, .OBI y .CRF. Suponga que el programa Fuente y el ensamblador estén en Ia unidad C 5-2. Codifique la linea de comando en LINK 0 TLINK para enlazar DISCOUNT. OBJ de la pregunta 5-1 5.3. Codifigue los comandos para DISCOUNT.EXE de la pregunta 5-2 para hacer lo siguiente: () ejecucién por medio de DEBUG; (b) ejecucién directa desde el DOS. S-4. Dar el objetivo de cada uno de los archivos siguientes: (a) archivo .ASM; (b) archivo .CRF; () archivo .LST; (@) archivo .EXE; (e) archivo .OBJ; () archivo .MAP. 5-5. Codifique las dos instrueciones para inicalizar el registro DS. Suponga que el nombre del segmento de datos es DATSEG, 6, Escriba un programa en ensamblador usando las definiciones convencionales de segmentos para lo siguiente: (a) Mover el valor inmediato 40 hex al registro AL; (b)recorrer el contenido de AL un bi hacia la izquierda (c6digo SHL AL, 1); (¢) mover el valor inmediato 22 hex al BL; (4) multiplicar AL por BL (cédigo MUL BL). Recuerde las instrucciones necesarias para finalizar Ia ejecuci6n de un programa. El programa no necesita definir o iniciaizar el segmento de datos. Asegurese de COPIAR una estructura de programa y uilce su editor para desarrollar el programa, Ensimblelo y enlécea. Utilice DEBUG para rastrear y verificar el segmento de c6digo y los registrs. Pregu

You might also like