ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Lenguaje Ensamblador


Enviado por   •  5 de Mayo de 2012  •  10.321 Palabras (42 Páginas)  •  806 Visitas

Página 1 de 42

EL ENSAMBLADOR EN ENTORNO DOS

6.1. - TIPOS DE PROGRAMAS EJECUTABLES BAJO DOS.

Antes de que el COMMAND.COM pase el control al programa que se pretende ejecutar, se crea un bloque de 256 bytes llamado PSP (Program Segment Prefix), cuya descripción detallada se verá en el próximo capítulo. En él aparecen datos tales como la dirección de retorno al dos cuando finalice el programa, la dirección de retorno en caso de Ctrl-Break y en caso de errores críticos. Además de la cantidad de memoria disponible y los posibles parámetros suministrados del programa. Cuando el programa toma el control, DS y ES apuntan al PSP. Tipos de programas:

En los de tipo COM:

- CS apunta al PSP e IP=100h (el programa empieza tras el PSP).

- SS apunta al PSP y SP toma la dirección más alta dentro del segmento del PSP.

En los de tipo EXE:

- CS e IP toman los valores del punto de arranque del programa (directiva END etiqueta).

- SS apunta al segmento de pila y SP = tamaño de la pila definida.

Si el programa es COM podemos terminarlo con la interrupción 20h (INT 20h), o simplemente con un RET si la pila no está desequilibrada (apunta a un INT 20h que hay en la posición 0 del PSP); otra manera de acabar es por medio de la función 4Ch del sistema (disponible desde el DOS 2.0) que acaba cualquier programa sin problemas y sin ningún tipo de requerimientos adicionales, tanto COM como EXE.

Los programas de tipo COM se cargan en memoria tal y como están en disco, entregándoseles el control. Los de tipo EXE, que pueden llegar a manejar múltiples segmentos de código de hasta 64 Kb, se almacenan en disco «semiensamblados». En realidad, al ser cargados en memoria, el DOS tiene que realizar la última fase de montaje, calculando las direcciones de memoria absolutas. Por ello, estos programas tienen un formato especial en disco, generado por los ensambladores y compiladores, y su imagen en memoria no se corresponde realmente con lo que está grabado en el disco, aunque esto al usuario no le importe. Por ello, no se extrañe el lector de haber visto alguna vez ficheros EXE de más de 640 Kb: evidentemente, no se cargan enteros en memoria aunque lo parezca. Los programas COM no hacen referencias a datos o direcciones separados más de 64 Kb, por lo que todos los saltos y desplazamientos son relativos a los registros de segmento (no se cambia CS ni DS) con lo que no es necesaria la fase de «montaje». No obstante, un programa COM puede hacer lo que le de la gana con los registros de segmento y acceder a más de 64 Kb de memoria, por cuenta y riesgo del programador. En general, la programación en ensamblador está hoy en día relegada a pequeños programas residentes, controladores de dispositivos o rutinas de apoyo a programas hechos en otros lenguajes, por lo que no es estrictamente necesario trabajar con programas EXE realizados en ensamblador. Salvo excepciones, la mayoría de los programas desarrollados en este libro serán de tipo COM ya que los EXE ocuparían algo más, aunque el ensamblador da algo más de comodidad al programador en los mismos.

6.2. - EJEMPLO DE PROGRAMA DE TIPO COM.

El siguiente ejemplo escribe una cadena en pantalla llamando a uno de los servicios estándar de impresión del DOS (función 9 de INT 21h):

cr EQU 13 ; constante de retorno de carro

lf EQU 10 ; constante de salto de línea

programa SEGMENT ; segmento común a CS, DS, ES, SS.

ASSUME CS:programa, DS:programa

ORG 100h ; programa de tipo COM

inicio: LEA DX,texto ; dirección de texto a imprimir

MOV AH,9 ; función de impresión

INT 21h ; llamar al DOS

INT 20h ; volver al sistema operativo

texto DB cr,lf,"Grupo Universitario de Informática.",cr,lf,"$"

programa ENDS ; fin del segmento

END inicio ; fin del programa y punto de inicio

Olvidándonos de los comentarios que comienzan por «;», en las primeras lineas las directivas EQU definen dos constantes para el preprocesador del compilador: cr=13 y lf=10. El programa, de tipo COM, consta de un único segmento. La directiva ASSUME indica que, por defecto, las instrucciones máquina se ensamblarán para el registro CS en este segmento (lo más lógico, por otra parte); también conviene asumir el registro DS, de lo contrario, si hubiera que acceder a una variable, el ensamblador añadiría el prefijo del segmento CS a la instrucción al no estar seguro de que DS apunta a los datos, consumiendo más memoria. Se pueden añadir los demás registros de segmento en el ASSUME, aunque es redundante. El ORG 100h es obligatorio en programas COM, ya que estos programas serán cargados en memoria en la posición CS:100h. Al final, la dirección del texto a imprimir se coloca en DS:DX (CS=DS=ES=SS en un programa COM recién ejecutado) y se llama al DOS. El carácter '$' delimita la cadena a imprimir, lo cual es una herencia del CP/M (sería más interesante que fuera el 0 el delimitador) por razones históricas. Se acaba el programa con INT 20h. El punto de arranque es indicado con la directiva END, aunque en realidad en los programas COM el punto indicado (en el ejemplo, «inicio») debe estar forzosamente al principio del programa. Obsérvese que no se genera código hasta llegar a la línea «inicio:», todo lo anterior son directivas.

6.3. - EJEMPLO DE PROGRAMA DE TIPO EXE.

Los programas EXE (listado al final de esta sección) requieren algo más de elaboración. En primer lugar, es necesario definir una pila y reservar espacio para la misma. Al contrario que los programas COM (cuya pila se sitúa

...

Descargar como (para miembros actualizados)  txt (54 Kb)  
Leer 41 páginas más »
Disponible sólo en Clubensayos.com