Вы находитесь на странице: 1из 10

ESTRUCTURA DE COMPUTADORES I (Captulo 10: Diseo de un programa)

1/10

10-.DISEO DE UN PROGRAMA EN ENSAMBLADOR

10.1 INTRODUCCIN: La construccin de un programa en ensamblador


comienza por la escritura en un editor de texto del programa en ensamblador. El editor de texto que utilicemos deber ser un editor en cdigo ASCII y por convenio el fichero que creemos deber de tener extensin .ASM. Una vez finalizado el fichero ASM, se llama al programa ensamblador, pasndole como parmetro el nombre del fichero de texto (.ASM) que contiene el programa que se va a ensamblar. El programa ensamblador, si no existe ningn error en el fichero ASM, generar un archivo en formato de cdigo de objeto. ste formato de cdigo de objeto, es utilizado por el ensamblador para permitir la programacin por mdulos, es decir, crear un programa ensamblador con diferentes ficheros, cada uno de los cuales realiza una funcin determinada. Esto es muy til ya que nos permite una mejor estructuracin del programa y el poder usar mdulos generados para un programa en otro programa. La unin de todos los mdulos objeto que forman el programa y su conversin en el programa definitivo la lleva a cabo una utilidad denominada enlazador o Linker, Este programa recibe como parmetros los nombres de los mdulos que compondrn el programa y realiza los enlaces necesarios entre los mdulos. En caso de que el programa est compuesto por un gran nmero de mdulos objeto, es posible agruparlos dentro de un mismo fichero llamado librera. A la hora de realizar un enlace bastar con dar el nombre de la librera para que el programa enlazador obtenga de ella los mdulos que necesite evitando as tener que especificar cada uno de los mdulos necesarios.

1 INGENIERA TCNICA EN INFORMTICA DE GESTIN-EUITI VITORIA Profesor: Fernando Oterino Echvarri

ESTRUCTURA DE COMPUTADORES I (Captulo 10: Diseo de un programa)

2/10

10.2 EL PROGRAMA ENSAMBLADOR TASM/MASM:


El programa ensamblador convierte el cdigo fuente en cdigo objeto, es decir, en las instrucciones de lenguaje mquina. Tanto el programa ensamblador como el enlazador y el gestor de libreras son utilidades de lnea de comandos, es decir, no cuentan con un interfaz de usuario y todas las operaciones deben indicarse escribindolas a continuacin del nombre del programa. La conversin de los ficheros conteniendo el cdigo en lenguaje ensamblador (.ASM) a ficheros objeto (.OBJ) se lleva a cabo a travs del programa ensamblador. En el caso de Microsoft, este programa se llama MASM, mientras que el de Borland es TASM. Tras l pondremos siempre el nombre del fichero que contiene el programa en ensamblador, teniendo en cuenta que si tiene extensin .ASM no har falta escribirla. Siguiendo el nombre del fichero fuente pueden colocarse hasta 3 parmetros opcionales, separados por comas y que representan

respectivamente, el nombre que tendr el fichero objeto resultante, un nombre para crear un fichero de listado que muestra el cdigo mquina generado tras el ensamblado y, por ltimo, el nombre de un fichero de referencias cruzadas, el cual contiene todos los smbolos que aparecen en el programa, as como todos los nmeros de lnea que hacen referencia a cada uno de ellos. El listado contiene el cdigo mquina asociado a cada instruccin, posicin en que se encuentra y una tabla en la que se indica que corresponde a cada nombre simblico. Este listado sirve para facilitar el seguimiento del programa durante la fase de prueba. El listado de referencias cruzadas contiene informacin referente a cada smbolo y las sentencias donde se hace referencia al mismo. Existen tambin una serie de opciones de ensamblado compuestas por el smbolo slash (/) seguido de una letra, y que modifican algn aspecto del ensamblado del programa. Generalmente no es necesario indicar ninguna, pero en el caso de que sea necesario utilizar alguna de ellas, hay que colocarlas entre el nombre del programa ensamblador y el fichero fuente. Por tanto el formato general de llamada al programa ensamblador es:

1 INGENIERA TCNICA EN INFORMTICA DE GESTIN-EUITI VITORIA Profesor: Fernando Oterino Echvarri

ESTRUCTURA DE COMPUTADORES I (Captulo 10: Diseo de un programa)

3/10

MASM [opciones] fuente [,objeto] [,listado] [,refcruzada] En caso de que no se especifique nombre para el fichero objeto se tomar el mismo que para el fuente. Si escribimos (TASM /H) (MASM /HELP) obtendremos un listado de ayuda con las opciones posibles para nuestro ensamblador. A continuacin se comentan algunos de estos parmetros. /a y /s = Selecciona orden alfabtico o secuencial de los segmentos. /c = Genera un listado de referencias cruzadas en un fichero de extensin .CRF, aadiendo nmeros de lnea al listado o bien incluye el listado de referencias cruzadas directamente dentro del listado del programa (caso del TASM) /iruta = Permite indicar el directorio donde el ensamblador debe buscar los ficheros indicados en el fichero fuente con la directiva include. /l = Con /l genera un listado de ensamblaje, con /la genera un listado expandido. /n = Suprime las tablas de smbolos en el listado. /p = Verifica que el cdigo generado para el modo protegido es correcto /t = Suprime los mensajes si el ensamblado es correcto. /w = Indica el nivel de advertencias: /w0 ninguna, /w1 slo las serias, /w2 slo consejos. /X = lista condiciones falsas (ensamblaje condicional) /z Visualiza la lnea de error y no slo el nmero de la misma.

1 INGENIERA TCNICA EN INFORMTICA DE GESTIN-EUITI VITORIA Profesor: Fernando Oterino Echvarri

ESTRUCTURA DE COMPUTADORES I (Captulo 10: Diseo de un programa)

4/10

10.3 EL PROGRAMA ENLAZADOR TLINK/LINK:


El programa montador bsicamente realiza dos tareas: Combina varios mdulos objeto, realizando las conexiones

necesarias entre ellos. Convierte los mdulos objeto en un mdulo ejecutable tipo .EXE

TLINK a diferencia de LINK, permite generar un fichero de tipo COM directamente desde un OBJ si se indica el parmetro /t, lo que agiliza an ms el proceso. Puede obtenerse ayuda escribiendo TLINK sin parmetros LINK /help, donde podemos obtener el listado de opciones aceptadas por cada linkador. El formato general del enlazador ser: LINK [opciones] mdulos objeto [,librera] [, ejecutable] [,mapa]. TLINK fich_obj,f ich_map, fich_librera, fich_def Si nuestro programa necesita montar varios mdulos objeto, estos se separarn por el smbolo +. Si nuestro programa necesita montar varias libreras, estas se separarn por el smbolo +. El fichero mapa es un archivo de texto que contiene informacin acerca de los mdulos que se han unido y que posicin dentro del programa se ha asignado a cada uno de ellos. Ejemplos: LINK m1+m2,,Prog.exe, monta los ficheros m1.obj y m2.obj en prog.exe sin usa librera alguna. TLINK prog1+prog2,,,math monta los mdulos objeto prog1.obj y prog2.obj y la librera math.lib

Los ficheros no necesarios se pueden omitir (o indicar NUL).

1 INGENIERA TCNICA EN INFORMTICA DE GESTIN-EUITI VITORIA Profesor: Fernando Oterino Echvarri

ESTRUCTURA DE COMPUTADORES I (Captulo 10: Diseo de un programa)

5/10

10.4 EL PROGRAMA EXE2BIN:


Los ficheros EXE generados por LINK o por TLINK no son copia exacta de lo que aparece en la memoria, sino que el DOS tras cargarlos debe realizar unas operaciones de montaje. Esto no ocurre con los programas COM, ya que cuando se cargan en memoria lo hacen tal y como estn almacenados en disco siendo en general ms cortos y sencillos pero tienen la desventaja de que no han llegado a ser totalmente compatibles con los actuales entornos multitarea. El programa EXE2BIN permite transformar un fichero EXE en un fichero COM, siempre que el mdulo ocupe menos de 64K y que est ensamblado con ORG 100h. El fichero .COM tambin se puede generar escribiendo /t al ejecutar TLINK LINK Para la creacin de ficheros.SYS no se puede utilizar la opcin /t del linkador, por lo que es necesario el uso del programa EXE2BIN. La principal diferencia entre ambos tipos de ficheros.COM y .EXE es que los segundos no tienen ORG 100h. De lo dicho hasta ahora en este punto se puede deducir que bajo el sistema operativo MS-DOS se disponen de dos tipos de ficheros ejecutables, cada uno de los cuales requiere poseer ciertas propiedades y con un proceso de creacin ligeramente distinto. El formato .EXE es el ms utilizado, y es el que se genera por defecto cuando se ensambla y se enlaza un fichero .ASM. Las principales caractersticas de un fichero .EXE son las siguientes: Puede tener cualquier tamao, hasta el mximo de memoria convencional del sistema. Puede especificar una zona de memoria que se destinar a la pila. La ejecucin del programa puede empezar en cualquier punto del cdigo, no necesariamente al principio.

1 INGENIERA TCNICA EN INFORMTICA DE GESTIN-EUITI VITORIA Profesor: Fernando Oterino Echvarri

ESTRUCTURA DE COMPUTADORES I (Captulo 10: Diseo de un programa)

6/10

Por el contrario los ficheros .COM son mucho ms limitados y las condiciones que debe cumplir son las siguientes: Debe ocupar un nico segmento, por lo que su tamao no puede superar los 64Kbytes. No debe especificar una posicin para la pila, pues el S.O. les asigna como segmento de pila el mismo que el del cdigo, e inicializa el puntero de pila al final de dicho segmento, por tanto contra mayor sea el espacio ocupado por el cdigo, menor capacidad de pila tendremos. Deben reservar los primeros 256 bytes (0 al 255) para que el MSDOS guarde sus datos. La ejecucin de estos programas comienza con la primera instruccin situada en el segmento, es decir, en la posicin 100h (256). Adems, el proceso de creacin de este tipo de programas es ms complejo, variando segn el ensamblador que utilicemos. Para el MASM se generar un programa EXE que generar un mensaje de error al no haber especificado la pila. A continuacin se utiliza el programa EXE2BIN para convertir el programa .EXE a .COM. Para el TASM basta con indicar la opcin /t al enlazador.

1 INGENIERA TCNICA EN INFORMTICA DE GESTIN-EUITI VITORIA Profesor: Fernando Oterino Echvarri

ESTRUCTURA DE COMPUTADORES I (Captulo 10: Diseo de un programa)

7/10

10.5 EL PROGRAMA DEBUG:


La utilidad DEBUG incluida en los sistemas MS-DOS, es una herramienta para depuracin de programas muy interesante que permite desensamblar los mdulos y, adems ejecutar programas paso a paso viendo las modificaciones que sufren los registros y las banderas. Si bien es verdad que es menos completo y ms incmodo de utilizar que otros, pero en algunos casos puede resultar til. Antes de entrar en detalle en el funcionamiento del programa DEBUG, dejemos claro que este programa trabaja slo con valores hexadecimales aunque las cifras no vayan seguidas de la letra h. Para iniciar el programa DEBUG bajo MS-DOS basta con teclear su nombre: C:\> Debug. Tras ello aparecer el prompt del DEBUG, un signo menos (-) donde deberemos ir metiendo las rdenes, que constarn generalmente de una sola letra La mayora de las mismas admiten parmetros que normalmente irn separados por comas. Estos parmetros pueden ser nmeros hexadecimales de hasta 2 4 dgitos, registros y adems: Cadenas de caracteres: encerradas entre comillas simples o dobles. El texto puede a su vez encerrar fragmentos entrecomillados, empleando comillas diferentes a las exteriores Direcciones Pueden expresarse con sus correspondientes valores

numricos o bien apoyndose en algn registro de segmento, aunque el offset siempre ser numrico: 1AB4:AC54, CS:200 Rangos: Son dos direcciones separadas por una coma; o bien una direccin, La letra L y un nmero que indica el nmero de bytes a partir de la direccin. Listas: Son secuencias de bytes y/o cadenas separadas por comas.

1 INGENIERA TCNICA EN INFORMTICA DE GESTIN-EUITI VITORIA Profesor: Fernando Oterino Echvarri

ESTRUCTURA DE COMPUTADORES I (Captulo 10: Diseo de un programa)

8/10

Sintaxis general: DEBUG [programa.exe[parmetros]] Los programas pueden ser de tipo EXE o COM; los parmetros no son los del debug, sino los que normalmente se suministraran al programa a la hora de depurar. Tambin se pueden cargar ficheros de otra extensin o simplemente no indicar fichero. Una vez dentro del DEBUG, podemos invocar la ayuda escribiendo el comando ? en el prompt. A ! ! ! continuacin explicaremos algunos de los comandos ms

interesantes: Q (QUIT): Permite abandonar el programa y volver al DOS D [Direccin[numbytes]] (dump): visualiza el contenido de la memoria. A [Direccin] (Assemble): Permite ensamblar a partir de CS:IP si no se indica una direccin concreta. Se admiten las directivas DB y DW del ensamblador ! E Direccin [Lista] (Enter): Permite consultar y modificar la memoria byte a byte. Por ejemplo E 230 1,2,3 se introducen los bytes 1, 2 y 3 a partir de DS:23. Si no se indica la lista, se visualizar la memoria byte a byte, pudindose modificar los bytes deseados, avanzar al siguiente con la barra espaciadora o retroceder con el signo (-). Para salir pulsaremos enter. ! U [Direccin [rango]] (Unassemble) Desemsambla la memoria, por

defecto se usa CS como segmento de cdigo.

1 INGENIERA TCNICA EN INFORMTICA DE GESTIN-EUITI VITORIA Profesor: Fernando Oterino Echvarri

ESTRUCTURA DE COMPUTADORES I (Captulo 10: Diseo de un programa)

9/10

R [Registro] (Register): Permite visualizar y modificar el valor de los registros. Escribiendo slo R nos muestra el estado de los registros, si se escribe R seguido del nombre de un segmento no permitir cambiar su valor. Con RF se muestran los flags y se permite modificar alguno.

FLAG Desbordamiento Direccin Interrupcin Signo Cero Acarreo auxiliar Paridad Acarreo !

ACTIVO OV DN (descendente) EI NG (<0) ZR (= 0) AC PE (par) CY

BORRADO NV UP (Ascendente) DI PL (>0) NZ (<> 0) NA PO (impar) NC

G [Direccin [,Direccin]] (go): Ejecuta cdigo desde CS:IP a menos que se especifique una direccin completa. Para que el flujo del programa se detenga en la segunda instruccin, es necesario pasar por ella. Se pueden indicar hasta 10 direcciones donde debe detenerse.

T [veces] (Trace): Ejecuta una instruccin del programa mostrando a continuacin el estado de los registros y la siguiente instruccin. T10 equivale a ejecutar 16 veces el comando T.

P [veces] (proceed):Similar al anterior pero al encontrarse con un CALL o INT lo ejecuta de golpe sin mostrarnos las instrucciones dentro del CALL o del INT.

! !

N [especificacin fichero] (name): Se asigna un nombre al fichero que est siendo creado o modificado. L [direccin] (load): Carga el fichero indicado en la instruccin N. En BX:CX queda depositado el tamao del fichero (BX = 0 para ficheros menores de 64K). Por defecto la direccin es CS:100h.

L<direccin><unidad><primer sector><num_sectores>:Carga sectores de la unidad 0,1 ... (A,B,...)a memoria. Se trata de sectores lgicos del DOS, y no fsicos de la BIOS.

1 INGENIERA TCNICA EN INFORMTICA DE GESTIN-EUITI VITORIA Profesor: Fernando Oterino Echvarri

ESTRUCTURA DE COMPUTADORES I (Captulo 10: Diseo de un programa)

10/10

W [direccin] (write): Graba el contenido de una zona de memoria a disco. Si no se indica la direccin se graba desde CS:100h hasta CS:+num_bytes; el nmero de bytes se indica en BX:CX (no es una direccin segmentada, sino un valor de 32 bits). Si se trata de un fichero EXE no dejar grabarlos, los debemos de renombrar previamente.

W<direccin><unidad><primer sector><num_sectores>:Graba sectores de la unidad 0,1 ... (A,B,...)a memoria. Se trata de sectores lgicos del DOS, y no fsicos de la BIOS.

! !

S <rango><lista> (search):Busca una cadena de bytes por la memoria. F <rango><lista> (fill): Llena la zona de memoria especificada con repeticiones de la lista de bytes indicada, por ejemplo para rellenar cdigos 04Bh 100hbytes a partir de 9800h:0 se ejecutar F 9800:0 L 100 4B. En vez de 4B, se podra haber usado una lista de bytes o cadena de caracteres.

C <rango><direccin> (compare):Compara dos zonas de memoria mostrando las diferencias. Por ejemplo para comparar 5 bytes de DS:100 a DS:200 se hace: c 100 L 5 2000.

! ! ! !

M <rango><direccin> (move): Copia una zona de memoria en otra controlando los posible solapamientos de los bloques. I <puerto> (input):Visualiza la lectura del puerto E/S seleccionado. O <puerto> (input):Enva un valor al puerto E/S seleccionado. H <valor1><valor2> (hexaaritmetic): Muestra la suma y la resta de los valores 1 y 2, ambos operados con un mximo de 16 bits.

Tambin existen comandos de DEBUG para acceder a la memoria expandida, XS (obtener el estado de la memoria expandida), XA npag (localizar npag pginas), XD handle (Desalojar el handle indicado)...

1 INGENIERA TCNICA EN INFORMTICA DE GESTIN-EUITI VITORIA Profesor: Fernando Oterino Echvarri

Вам также может понравиться