My signature
Principia Lenguaje Ensamblador para Intel 808x/80x86

III.- CREACION Y DEPURACION DE PROGRAMAS EN LENGUAJE ENSAMBLADOR

 

 

 

1.- EDICION.

 

                                       Los archivos fuente de código ensamblador  deben estar en formato ASCII standard. Para esto puede usarse cualquier editor que permita crear archivos sin formato, e.g. Edlin, Edit, Write, El editor del Turbo Pascal, Works, Word, WordStar, etcétera. Las declaraciones  pueden ser introducidas en mayúsculas y/o minúsculas. Una buena práctica de programación es poner todas las palabras reservadas (directivas e instrucciones) en mayúsculas y todo lo del usuario en minúsculas para fines de facilidad de lectura del código. 

 

   Las sentencias pueden comenzar en cualquier columna,  no pueden tener más de 128 caracteres, no se permiten lineas múltiples ni códigos de control, y cada línea debe ser terminada con una combinación  de line-feed y carriage-return. Los comentarios se declaran con ; y terminan al final de la línea.

 

 

2.- ENSAMBLADO.

 

                                       El ensamblado se lleva a cabo invocando al MASM. Este puede ser invocado, usando una línea de comando,  de la siguiente manera:

 

                                      MASM archivo [,[objeto][,[listado][,[cross]]]]][opciones][;]

donde:

  archivo.- Corresponde al programa fuente. Por defecto se toma la extensión .ASM.

  objeto.- Es el nombre para el archivo objeto.

  listado.- Nombre del archivo de listado de ensamblado.

  cross.- Es un archivo de referencias cruzadas.

  opciones.- Pueden ser:

     /A        escribe los segmentos en orden alfabético

     /S        escribe los segmentos en orden del fuente

     /Bnum  fija buffer de tamaño num

     /C        especifica un archivo de referencias cruzadas

     /L        especifica un listado de ensamble

     /D        crea listado del paso 1

     /Dsym  define un símbolo que puede usarse en el ensamble

     /Ipath   fija path para buscar archivos a incluir

     /ML      mantiene sensitividad de letras (mayús./minús) en nombres

     /MX      mantiene sensitividad en nombre públicos y externos

     /MU      convierte nombres a mayúsculas

     /N         suprime tablas en listados

     /P         checa por código impuro

     /R         crea código para instrucciones de punto flotante

     /E         crea código para emular instrucciones de punto flotante

     /T         suprime mensajes de ensamble exitoso

     /V         despliega estadísticas adicionales en pantalla

     /X         incluir condicionales falsos en pantalla

     /Z          despliega líneas de error en pantalla

 

si el ; al final se omite es necesario poner todas las comas que se indican. Si no se quiere poner algún valor basta con dejar la coma.

 

   La otra forma de invocar al ensamblador es sólo tecleando MASM y respondiendo a la información que se solicita. Para  omitir algún valor sólo basta teclear ENTER si dar ningún valor.

 

 

3.- LINK.

                                      

                                       De la misma forma que el ensamblado, la fase de liga se lleva a cabo con el LINK. Este puede ser invocado de la misma forma que el MASM.  Los parámetros que este requiere son:

 

                                      LINK objeto [,[ejecutable][,[mapa][,[librería]]]]][opciones][;]

 

donde:

  objeto.- Es el nombre para el archivo .OBJ

  ejecutable.- Nombre del archivo .EXE

  mapa.- Nombre del archivo mapa

  librería.- Nombre del archivo biblioteca de rutinas

  opciones.- Pueden ser:

     /HELP                                                                           muestra lista de opciones

     /PAUSE                                                                         pausa en el proceso

     /EXEPACK                                                                     empaca archivo ejecutable

     /MAP                                                                             crea mapa se símbolos públicos

     /LINENUMBERS                                                             copia número de líneas al mapa

     /NOIGNORECASE                                                          mantiene sensitividad en nombres

     /NODEFAULTLIBRARYSEARCH                                     no usa bibliotecas por defecto

     /STACK:size                                                                  fija el tamaño del stack a usar

     /CPARMAXALLOC:número                                             fija alojación máxima de espacio

     /HIGH                                                                            fija la dirección de carga más alta

     /DSALLOCATE                                                              aloja grupo de datos

     /NOGROUPASSOCIATION                                             ignora asociaciones para direcciones

     /OVERLAYINTERRUPT:número                                       asigna nuevo número a la INT 03Fh

     /SEGMENTS:número                                                       procesa un número de segmentos

     /DOSSEG                                                                       sigue la convención de orden de DOS

 

 

4.- EJECUCION.

 

                                       Para la ejecución del programa simplemente basta teclear su nombre en el prompt de MS-DOS y teclear ENTER. Con esto el programa será cargado en memoria y el  sistema procederá a  ejecutarlo. El proceso completo para poder crear un programa ejecutable con el Microsoft Macro Assembler se muestra abajo.


y lo que se vería en pantalla sería lo siguiente:

 

C:\DATA\PROGRAMS\ASM>masm main

Microsoft (R) Macro Assembler  Version 4.00

Copyright (C) Microsoft Corp 1981, 1983, 1984, 1985.  All rights reserved.

 

Object filename [main.OBJ]:

Source listing  [NUL.LST]:

Cross-reference [NUL.CRF]:

 

  50966 Bytes symbol space free

 

      0 Warning Errors

      0 Severe  Errors

 

C:\DATA\PROGRAMS\ASM>masm task

Microsoft (R) Macro Assembler  Version 4.00

Copyright (C) Microsoft Corp 1981, 1983, 1984, 1985.  All rights reserved.

 

Object filename [task.OBJ]:

Source listing  [NUL.LST]:

Cross-reference [NUL.CRF]:

 

  51034 Bytes symbol space free

 

      0 Warning Errors

      0 Severe  Errors

 

C:\DATA\PROGRAMS\ASM>link main+task

 

Microsoft (R) 8086 Object Linker  Version 3.05

Copyright (C) Microsoft Corp 1983, 1984, 1985.  All rights reserved.

 

Run File [MAIN.EXE]:

List File [NUL.MAP]:

Libraries [.LIB]:

 

C:\DATA\PROGRAMS\ASM>main

Entrando a un submodulo....

.......saliendo del submodulo.

 

C:\DATA\PROGRAMS\ASM>

 

 

5.- DEPURACION.

 

                                       Para la depuración de un programa en ensamblador tenemos disponibles dos herramientas. Por un lado tenemos el debuger que nos proporciona MS-DOS (DEBUG.EXE) y por otro lado tenemos el que nos proporciona Microsoft (SYMDEB.EXE).  Este último trabaja igual que el de MS-DOS pero nos proporciona muchas ventajas más. Una de ellas es la facilidad de desplegar el código fuente correspondiente a la instrucción que se esta ejecutando (si el programa ejecutable fue ensamblado o compilado con un ensamblador o compilador compatible), nos permite ejecutar comandos del S.O. y nos permite obtener información de las interrupciones de manera simbólica.

 

 

6.- LA UTILERIA EXE2BIN  Y LOS ARCHIVOS .EXE Y .COM .

 

                                       Para MS-DOS sólo existen dos tipo de archivos ejecutables los .COM y .EXE. Ambos archivos difieren en algunas cosas. Primero, las ventajas de los .EXE son dobles, nos permiten tener archivos reubicables y el uso de hasta cuatro segmentos (STACK, DATA, EXTRA y CODE) de hasta  64KB cada uno. Un archivo .COM sólo puede tener un segmento de 64KB, en el que se tiene tanto código como pila,  y datos. La desventaja de los .EXE es que agrega n 512 bytes como cabecera con información para la reubicación del código. Un .COM no es reubicable, siempre inicia en la dirección 0100H.

 

   Si nuestro programa no es muy grande  64KB son mas que suficientes. Por lo que conviene crearlo como .COM, para esto se cuenta con la utilería  EXE2BIN.EXE que nos proporciona el sistema operativo. y que nos permite crear .COM a partir de .EXE . Las restricciones para esto son las siguientes: el archivo a convertir no debe estar empacado, no debe tener segmento de stack, debe tener sólo segmento de código y su tamaño debe ser menor a 64KB.



7.- EL LENGUAJE DE MAQUINA.



                                       Lo que que conoce como lenguaje o código de máquina es el conjunto de códigos numéricos (comúnmente expresados en hexadecimal) para cada una de las instrucciones que el microprocesador es capaz de reconoce y ejecutar. Aun cuando finalmente es con esta serie de números con los que el microprocesador trabaja, es muy difícil prrogramar a este nivel. El lenguaje ensamblador fue desarrollado para liberar al programador de la dificil tarea de tener que recordar todos los códigos y de las tediosas labo res de cálculo de localidades de memoria. Los códigos mnemó:nicos del ensamblador son una substitución de los códigos numéricos mejor que en una relación 1:1. Por ejemplo, resulta que mientras que tenemos de manera general un mnemónico para cargar un registro con un valor (MOV) internamente, para cada una de las modalidades de direccionamiento o registro afectado existe un código numérico.


                La programación del computador en lenguaje de máquina, tanto la introducción de losprogramas, su ejecución y su depuración es posible usando alguna utilería provista por el sistema operativo y cabe mencionar que casi todos los sistemas operativos proveen al usuario con estas facilidades. DOS no es la exepción; éste provee al usuario de la utilería DEBUG. La siguiente sección da más información al respecto.



8.- CREACION Y DEPURACION DE PROGRAMAS CON LA UTILERIA DEBUG.



                                       El la utilería de MS-DOS DEBUG es una herramienta muy poderosa que es desconocida por muchos. Este provee una interfaz desde la cual es seguro no sólo explorar el contenido de la memoria del computador y de los registros del microprocesador sino que además provee los medios para la introducción de programas y su depuración, tanto en ensamblador como en lenguaje de máquina. La utilización de esta herramienta se ejemplifica con el siguiente ejemplo.


        1.- Desde el prompt del sistema invoque la utilería.


                 C:\> debug


        2.- En el prompt de la utilería introducir el siguiente programa en código de máquina.


                 -e 100 BA 40 00 8E DA BB 72 00 C7 07 34 12 EA 00 00 FF FF


        3.- Guardar el programa en un archivo.


                 -rcx

                 :11

                 -n reset.com

                 -w

                 -q


        4.- El paso anterior creará un archivo en el directorio vigente con el nombre RESET.COM. La extensión .COM es importante, el nombre pudo ser cualquiera. Este programa llama a las rutinas de inicialización del sistema, al ejecutarlo veremos que el computador se reinicializa, o si estamos trabajando en una ventana de DOS bajo Windnows esta se cerrará


                 C:\> reset.com



                  Haga la prueba creando un programa más grande, esta vez introduciéndolo a través de dos líneas de programa. Para guardarlo indique la cantidad de 1C bytes al invocar el comando rcx del debug y sálvelo con extensión .COM.


                 -e 100 1E 31 C0 50 BA 0C 01 B4 09 CD 21 C3 48 6F 6C 61 20 6D 75 6E 64 6F

                 -e 116 21 21 21 0D 0A 24




Este texto puede ser copiado y reproducido libremente mientras su contenido no sea alterado, se cite la fuente y referencias. Las marcas registradas son responsabilidad de sus dueños y el autor de este texto no tiene relación alguna con estos. M. en C. Eduardo René Rodríguez Avila. © Todos los derechos reservados.
Ultima actualización: .