Introducción al Entorno de Programación

Anuncio
Digital II
Introducción al entorno de
Programación
Departamento de Sistemas e Informática
Escuela de Electrónica
Facultad de Ciencias Exactas Ingeniería y Agrimensura
Universidad Nacional de Rosario
Diego Alegrechi
Andrés Capalbo
2000
INTRODUCCIÓN
AL ENTORNO DE PROGRAMACIÓN
CONTENIDO:
I N T R O D U C C I Ó N A L E N T O R N O D E P R O G R A M A C I Ó N .................. 3
LOS TRADUCTORES DE LENGUAJES .......................................................................................... 3
COMPILADORES ....................................................................................................................... 3
EL PROCESO DE CONSTRUCCIÓN DE UN ARCHIVO EJECUTABLE ............................................... 4
ENSAMBLADOR (ASSEMBLER)................................................................................................. 5
ENLAZADOR (LINKER)............................................................................................................. 5
ENTORNO MICROSOFT PROGRAMMER'S WORKBENCH (PWB) .......... 6
CREACIÓN DEL CÓDIGO FUENTE .............................................................................................. 6
CONSTRUCCIÓN DE UN MÓDULO SIMPLE................................................ 7
ELECCIÓN DE LAS OPCIONES DE CONSTRUCCIÓN (BUILD OPTIONS) ......................................... 7
ELECCIÓN DE LA PLANTILLA DE PROYECTO (PROJECT TEMPLATE) PARA UNO.ASM .................. 7
ELECCIÓN DE LAS OPCIONES DE CONSTRUCCIÓN (BUILD OPTIONS).......................................... 8
CONSTRUCCIÓN DEL PROGRAMA ........................................................................................... 10
CORRECCIÓN DE ERRORES ..................................................................................................... 10
PROGRAMAS MULTIMÓDULOS .................................................................. 11
CREACIÓN DE UN PROYECTO.................................................................................................. 11
DEPURACIÓN DEL PROGRAMA .................................................................. 12
EJECUCIÓN PASO A PASO........................................................................................................ 13
EJECUCIÓN CON PUNTOS DE PARADA (BREAKPOINTS)............................................................ 13
MANEJO DE LA VENTANA DE MEMORIA ................................................................................. 13
BIBLIOGRAFÍA ................................................................................................ 13
Autores: Alegrechi-Capalbo
Versión 2000
Página 2 de 13
INTRODUCCIÓN
INTRODUCCIÓN
AL ENTORNO DE PROGRAMACIÓN
A L E N TO R N O D E P R O G R A M A C I Ó N
Este apunte está destinado a servir de texto auxiliar a los alumnos de DIGITAL II para
la realización del trabajo práctico de programación en ASSEMBLER. Su objetivo es
desarrollar la comprensión de ideas básicas sobre el manejo del entorno de programación. No
se tratarán los temas correspondientes al lenguaje de programación propiamente dicho, los
cuales ya fueron abordados en otros apuntes de la cátedra.
En la primera parte se realiza una introducción a los procesos involucrados en la
generación de un archivo ejecutable partiendo de un código fuente (Assembler).
En la segunda parte se explica paso por paso el manejo del entorno de trabajo, para la
generación y depuración de programas simples.
Los traductores de lenguajes
Para poder describir los programas escritos en un lenguaje de programación y que
posteriormente puedan ser entendidos por la computadora, se requieren traductores de
lenguajes. Tradicionalmente los traductores se dividen es dos clases: intérpretes (Ej: Basic) y
compiladores (Ej: C, C++).
Un intérprete traduce cada sentencia del código fuente (escrito en el lenguaje de
programación) en instrucciones en código máquina que son ejecutadas inmediatamente.
Un compilador traduce todo el código fuente directamente en instrucciones máquina,
denominado código objeto. Los programas generados por un compilador tienden a requerir
mucho menos espacio para su ejecución y se ejecutan mucho más rápidamente que los
interpretados.
Compiladores
Dentro de los lenguajes de programación que pueden compilarse existen los de alto
nivel y los de bajo nivel. Los programadores que escriben en un lenguaje de alto nivel, como
C y Pascal, codifican comandos poderosos, cada uno de los cuales puede generar muchas
instrucciones en lenguaje de máquina. Por otro lado, los programadores que escriben en un
lenguaje Assembler, de bajo nivel, codifican instrucciones simbólicas, cada una de las cuales
genera una instrucción en lenguaje de máquina. A pesar del hecho de que codificar en un
lenguaje de alto nivel es más productivo, programar en lenguaje Assembler tiene algunas
ventajas que a continuación se detallan:
! Proporciona más control sobre el manejo particular de los requerimientos de hardware.
! Genera módulos ejecutables más pequeños y más compactos.
! Con mayor probabilidad tiene una ejecución más rápida.
Como desventaja, escribir un programa en lenguaje Assembler requiere conocimientos
acerca del Hardware (arquitectura) de la computadora, su conjunto de instrucciones y sus
reglas de uso.
Una práctica común es combinar los beneficios de ambos niveles de programación, se
puede codificar el grueso de un proyecto en un lenguaje de alto nivel y los módulos críticos
(aquellos que provocan notables retardos) en lenguaje Assembler.
Sin importar el lenguaje de programación que utilice, de todos modos es un lenguaje
simbólico que tiene que traducirse a una forma que la computadora pueda ejecutar. Un
lenguaje de alto nivel utiliza un compilador para traducir el código fuente a lenguaje de
Autores: Alegrechi-Capalbo
Versión 2000
Página 3 de 13
INTRODUCCIÓN AL ENTORNO DE PROGRAMACIÓN
máquina (técnicamente, código objeto). Un lenguaje de bajo nivel utiliza un ensamblador
para realizar la traducción al lenguaje de máquina. Observemos que el compilador y el
ensamblador llegan al mismo resultado (archivo objeto .OBJ), pero el primero deberá realizar
tareas extras dado que el lenguaje a convertir es de alto nivel. De aquí en adelante nos
referiremos en forma indistinta a los términos compilador y ensamblador.
Un programa enlazador para ambos niveles, alto y bajo, completa el proceso al
convertir el código objeto en lenguaje ejecutable de máquina.
Los archivos objeto permiten tratar programas independientes que se combinan
eventualmente en un programa ejecutable mediante el linker. Este proceso se denomina
compilación separada.
Archivo Fuente 1
(.ASM)
Ensamblador
Archivo Objeto 1
(.OBJ)
Archivo Fuente 2
(.ASM)
Ensamblador
Archivo Objeto 2
(.OBJ)
Linker
Archivo Ejecutable
(.EXE) (.COM)
Archivo Objeto 3
(.OBJ)
La compilación separada tiene numerosos beneficios. Un programa grande se puede
dividir en diferentes piezas o módulos, cada uno de los cuales se pueden construir y
comprobar independientemente.
El Proceso de Construcción de un archivo ejecutable
La creación y ejecución un archivo involucra tres pasos:
1. Ensamblar (Assembling): consiste en la traducción del código fuente en código objeto y
la generación de un archivo intermedio .OBJ (objeto), o módulo. Una de las tareas del
ensamblador es calcular el desplazamiento de cada elemento en el segmento de datos y de
cada instrucción en el segmento de código. 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 aún no está en forma ejecutable.
2. Enlazar (Linking): implica convertir el módulo .OBJ en un módulo de código de máquina
.EXE (ejecutable). Una de las tareas del enlazador es combinar los programas
ensamblados en forma separada en un módulo ejecutable.
3. Carga (Loading): El último paso es cargar el programa para su ejecución. Ya que el
"cargador" (Sistema Operativo) conoce en dónde está el programa a punto de ser cargado,
puede completar las direcciones indicadas en el encabezado que estaban incompletas. El
cargador desecha el encabezado y crea un PSP (prefijo del segmento del programa)
inmediatamente antes del programa cargado en memoria.
Autores: Alegrechi-Capalbo
Versión 2000
Página 4 de 13
INTRODUCCIÓN AL ENTORNO DE PROGRAMACIÓN
Ensamblador (Assembler)
Muchos ensambladores dan dos pasadas al programa fuente a fin de resolver
referencias hacia adelante (o posteriores) a direcciones que aún no se encuentran en el
programa. Durante la pasada 1, el ensamblador lee todo el código fuente y construye una tabla
de símbolos de nombres y etiquetas usadas en el programa, esto es, nombres de campos de
datos y etiquetas del programa y sus localidades relativas (desplazamiento) dentro del
segmento.
La pasada 1 determina la cantidad de código que es generado por cada instrucción y se
inicia la generación del código objeto.
Durante la pasada 2, el ensamblador usa la tabla de símbolos que construyó en la
pasada 1. Ahora que "conoce" la longitud y posiciones relativas de cada campo de datos e
instrucción, puede completar el código objeto para cada instrucción. Después produce, si se lo
solicita, los diferentes archivos: objeto (.OBJ), de listado (.LST) y de referencias cruzadas
(.REF).
Enlazador (Linker)
El enlazador realiza las funciones siguientes:
! Si se pide, combina más de un módulo ensamblado de forma separada en un programa
ejecutable, como dos o más programas en ensamblador o un programa en ensamblador con
un programa en C.
! Genera un módulo .EXE y lo inicializa con instrucciones especiales para facilitar su
subsecuente carga para ejecución.
Una vez que se ha enlazado uno o más módulos .OBJ en un módulo .EXE, se puede
ejecutar el módulo .EXE cualquier número de veces. Pero siempre que se necesite realizar un
cambio al programa, debe corregirse el programa fuente, ensamblarlo en otro módulo .OBJ y
enlazar el módulo .OBJ en un módulo .EXE.
Autores: Alegrechi-Capalbo
Versión 2000
Página 5 de 13
INTRODUCCIÓN
AL ENTORNO DE PROGRAMACIÓN
ENTORNO MICROSOFT PROGRAMMER'S WORKBENCH (PWB)
El entorno es un sistema de desarrollo completamente integrado que contiene los
siguientes componentes:
! Un editor para escribir y revisar programas.
! Un "build engine" (motor de construcción), que es el componente que se encarga de
ensamblar, linkeditar y ejecutar programas en forma automática.
! Navegador de código fuente.
! Comandos para ejecución y depuración (debugging) de programas.
! Sistema de ayudas
En el editor se cuenta con las opciones clásicas de todo editor de texto, como ser de
archivo, nuevo, abrir, guardar, salir, etc.. y de edición, cortar, copiar, pegar, etc...
PWB utiliza un entorno de ventanas para presentar y requerir información.
En la siguiente figura se observa algunas partes del entorno:
Creación del código fuente
Como ejemplo proponemos el
siguiente programa que contiene errores
introducidos en forma intencional para ver el
proceso de depuración del mismo. Para
comenzar simplemente es necesario crear un
archivo nuevo, tipear el programa y guardarlo
con el formato nombre.asm como por ejemplo
"uno.asm " .
Autores: Alegrechi-Capalbo
.MODEL small
.STACK
.DATA
.CODE
.STARTUP
mov ax,6 ;Carga ax=6
add 3,ax ;Resuelve ax = ax + 3
.EXIT
END
Versión 2000
Página 6 de 13
INTRODUCCIÓN
AL ENTORNO DE PROGRAMACIÓN
Construcción de un módulo simple
En PWB el ensamblado y linkeditado de un archivo fuente es llamado construcción
(building the project).
Elección de las opciones de construcción (Build Options)
Antes de realizar la construcción del programa se debe especificar que clase de archivo
será creado. Mediante el uso del menú Opciones se puede elegir:
! El "Run time support". Esto es importante para desarrollo con varios lenguajes de
programación simultáneamente, donde se tiene algún archivo fuente en assembler y
algunos en otros lenguajes. En nuestro caso deberemos escoger la opción ASSEMBLER.
! La Plantilla de proyecto (Project template). La plantilla describe en detalle como debe ser
construído el proyecto indicando el tipo de archivo (.EXE, .COM, .DLL, .LIB ) y detalla
en que sistema operativo correrá el programa.
! Construcción de depuración o de versión final (Debug o Release build). Cuando se escoge
la opción Debug (depurar) normalmente se especifica que se incluya información para
poder ver el código fuente mientras se depura el programa (Code View), lo que no es
necesario para la versión final dado que se supone que no será necesaria la verificación del
programa. Además se podrán generar archivos con listados de los resultados de la
construcción (compilación y linkedición).
Estas opciones son útiles en el proceso de desarrollo del programa. En la primera fase es
conveniente trabajar en modo depuración (Debug), con el fin de arribar a una versión final
optimizada. En una segunda y última fase, se utilizan las opciones correspondientes a la
versión final (Release build) del programa.
Elección de la plantilla de proyecto (Project template) para uno.asm
1. Del menú Options, elegir Project template y luego Set project template
Autores: Alegrechi-Capalbo
Versión 2000
Página 7 de 13
INTRODUCCIÓN
2. PWB mostrará la pantalla:
AL ENTORNO DE PROGRAMACIÓN
Generalmente en la lista Run time support figura como opciones None y Assembler. Si
tiene instalado otros lenguajes de programación aparecerán en dicha lista. (elegir Assembler)
3. En la ventana Templates elegir DOS.EXE y aceptar.
Elección de las opciones de construcción (Build options)
1. En el menú Options elegir Build options
2. Optar por las opciones para depuración (Use debug options). De esta manera, PWB
utilizará las opciones de depuración cada vez que se construya (Build) el programa.
3. Del menú Options elegir Languages options y luego MASM Options seguido a esto hacer
click en Set debug options.
Autores: Alegrechi-Capalbo
Versión 2000
Página 8 de 13
INTRODUCCIÓN AL ENTORNO DE PROGRAMACIÓN
4. En este menú se debe escoger en la sección de Debug information CodeView.
5. Si se desea generar un archivo de resultados de la compilación, en la sección Listing se
debe seleccionar Generate listing file y luego las opciones deseadas. En la figura se
observan las recomendadas.
6. Si se desea generar un archivo de resultados de la Linkedición, en el menú Options,
seleccionar Link Options, y luego Additional Debug Options.
7. En la sección Map File hacer la opción deseada.
Autores: Alegrechi-Capalbo
Versión 2000
Página 9 de 13
INTRODUCCIÓN AL ENTORNO DE PROGRAMACIÓN
PWB salva las opciones especificadas. No es necesario especificarlas cada vez que se
trabaje con el proyecto. Las opciones globales son utilizadas en cada construcción (Build).
Las opciones para depuración son utilizadas cuando esté seteada la opción use debug options.
De lo contrario se utilizan las opciones para la versión final del programa (release options).
Las opciones globales típicamente incluyen opciones tales como, nivel de detección de errores
(warning level), modelo de memoria, etc.
El menú Options contiene más comandos que permiten describir las opciones de
construcción del proyecto en una forma más detallada. No es necesario cambiar la mayoría de
las opciones para construir un programa simple dado que los valores por defecto provistos por
la plantilla funcionan en forma correcta.
Construcción del programa
Una vez seteadas las opciones, puede construirse el programa.
En el menú Project elegir Build. Si las opciones de construcción han sido cambiadas,
PWB preguntará si se desea reconstruir todo (Rebuild all). Para el ejemplo
planteado(uno.asm), el resultado de la compilación es el siguiente:
Ahora tenemos las siguientes opciones:
! Ver los resultados completos de la construcción (View Result).
! Se puede correr o depurar el programa si este fue construido en forma satisfactoria (Sin
Errores).
! Pedir ayuda o Cancelar y volver al modo edición.
Corrección de errores
Para cada construcción, PWB muestra en Build result window una lista de los errores y
mensajes de la construcción. Como vemos el ejemplo tiene algunos errores. Para examinar
los errores de construcción, en la ventana antes mencionada, colocando el cursor sobre
cualquiera de los errores y eligiendo del menú Projet, Goto error PWB abre la ventana de
código fuente correspondiente y pone el cursor en la línea en donde se encontró error.
Luego de corregirlo podremos volver a la ventana Build result window a través del
menú window. Si se desea realizar una corrección más rápida se puede ir de error en error
presionando SHIFT+F3 (Menú Project y Next error).
Autores: Alegrechi-Capalbo
Versión 2000
Página 10 de 13
INTRODUCCIÓN AL ENTORNO DE PROGRAMACIÓN
En nuestro ejemplo los resultados de la construcción fueron:
El primer error es debido a que la instrucción add no admite este formato. La forma
correcta es: add ax,3
El segundo error depende del primero, por lo tanto ya estamos en condiciones de
construir nuevamente el programa.
Programas Multimódulos
Cuando los programas crecen demasiado en tamaño y complejidad o es necesario
reutilizar programas previamente hechos (librerías por ejemplo), resulta conveniente trabajar
en forma modular y para esto es necesario un archivo que contenga información de cómo se
vinculan tales módulos. Este archivo es llamado Proyecto (Project).
PWB ofrece un modo eficiente de manejar proyectos complejos.
Creación de un proyecto
1. En el menú Project elegir New project, PWB mostrará:
2. Escribir el nombre del proyecto, el cual se guardará con extensión .mak
3. En la misma pantalla elegir setear la plantilla de proyecto (Set Project Template) y
realizarlo como fue explicado anteriormente (pag. 6).
4. En el siguiente paso PWB mostrará la pantalla de edición de proyecto (edit project dialog
box) donde se podrán agregar o quitar módulos al proyecto.
Autores: Alegrechi-Capalbo
Versión 2000
Página 11 de 13
INTRODUCCIÓN
AL ENTORNO DE PROGRAMACIÓN
Un proyecto, podrá contener archivos de tipo: *.ASM, *.OBJ, *.LIB, *.DEF, *.RC .
5. Una vez que se hallan agregado los módulos necesarios se deberá salvar la lista (Save List)
6. El proceso de construcción y corrección de errores es el mismo que para un programa de
módulo único.
7. Si es necesario agregar o quitar módulos al proyecto, esto puede realizarse desde el menú
Project, y luego Edit Project.
Depuración del programa
PWB integra muchas herramientas, entre ellas se encuentra una que permite la
depuración del programa DEBUGGER.
Para acceder a este programa se podrá hacer desde el menú Run y luego Debug, o bien
luego de la construcción en la ventana de resultados elegir Debug Program. Cabe destacar
que la opción Debug solo estará disponible si la construcción no arrojó errores.
El entorno de este programa tiene el siguiente aspecto:
Autores: Alegrechi-Capalbo
Versión 2000
Página 12 de 13
INTRODUCCIÓN AL ENTORNO DE PROGRAMACIÓN
Se observan tres ventanas:
! Source1: contiene el código fuente. Esta información puede ser presentada de tres formas
distintas: código fuente, código fuente y Assembler intercalados o solo Assembler. Estas
opciones se pueden escoger en el menú Options y luego Source1 Window...
! Memory1: muestra el contenido de la memoria. Las dos primeras columnas
corresponden a la dirección del primer elemento de la fila de datos, expresada en el
formato (Segmento:Desplazamiento). Los datos pueden visualizarse en distintos formatos
Byte, ASCII, Entero (por ejemplo). Estas opciones se pueden escoger en el menú Options
y luego Memory1 Window...
! Reg: muestra los valores actuales de los registros del microprocesador y las banderas
(Flags).
Luego de la ejecución de cada instrucción PWB resalta automáticamente los registros,
flags y/o posiciones de memoria que hallan cambiado su valor en dicho paso.
El entorno de trabajo se puede configurar a gusto, dependiendo de la forma de trabajo
del programador y del trabajo que se esté realizando. Desde el menú windows pueden agregar
o quitarse ventanas. La configuración de ventanas de la figura anterior es la más usual.
Ejecución paso a paso
Existen varias maneras para controlar y examinar la ejecución de un programa. El
comando Step (F10) ejecuta la instrucción siguiente en el programa, y si esta instrucción es
una llamada a procedimiento, lo ejecuta completamente en un solo paso. Por el contrario, el
comando Trace (F8) salta dentro del procedimiento y ejecuta cada instrucción paso a paso. Al
ejecutar cada paso se puede observar como se actualizan los valores de los registros, flags,
variables y memoria.
Ejecución con puntos de parada (breakpoints)
Se pude ejecutar un programa sin detenciones hasta un punto, llamado breakpoint.
Para definir un breakpoint primero nos situamos sobre la instrucción en la que se desea
detener el programa, y luego en el menú Data elegir Set breakpoint..., posteriormente escoger
la opción deseada y aceptar. Si se desea eliminar o cambiar los parámetros de un breakpoint
esto puede realizarse desde el menú Data y luego Edit breakpoint. Una forma más rápida y
sencilla de ejecutar un programa hasta un punto dado, es: una vez situado en dicho punto,
presionar F7 o el botón derecho del mouse (se ejecutará hasta dicha línea sin incluirla).
Manejo de la ventana de memoria
El programa nos permite observar lo que sucede en las locaciones de memoria y como
cambia mientras se ejecuta el programa. Con la barra de desplazamiento nos podemos
desplazar en la ventana de memoria hasta la posición deseada, pero una forma más práctica de
realizarlo es desde el menú Options seleccionando Memory1 Windows poner por ejemplo
DS:0 en el campo Address Expression (esto muestra el contenido de la memoria a partir del
comienzo del segmento de datos). Otra forma de realizarlo es parado sobre la ventana de
memoria, escribir en forma directa la posición de memoria deseada respetando el formato
segmento:desplazamiento.
Bibliografía
1. Environment and tools (Microsoft) "Mike Eddy"
2. Lenguaje ensamblador y programación para PC IBM® y compatibles (Pearson
Educación) "Peter Abel" Tercera Edición
3. Los microprocesadores INTEL (Prentice Hall) "Barry B. Bray" Tercera Edición
Autores: Alegrechi-Capalbo
Versión 2000
Página 13 de 13
Descargar