Generación de código para funciones. Generación de código para funciones. Generación de código para funciones. Generación de código para funciones



Documentos relacionados
Entorno de Ejecución del Procesador Intel Pentium

Centro de Capacitación en Informática

ICARO MANUAL DE LA EMPRESA

Tema 2. Diseño del repertorio de instrucciones

Toda base de datos relacional se basa en dos objetos

"Programación en Ensamblador del microprocesador Pentium (I)"

Práctica 3: Programación con subrutinas

Estructura de Computadores

CAPÍTULO 4. EL EXPLORADOR DE WINDOWS XP

SOLUCION EXAMEN junio 2006

GENERACIÓN DE TRANSFERENCIAS

Tema 6. Reutilización de código. Programación Programación - Tema 6: Reutilización de código

Estructuraremos el código con el condicional CASE-ENDCASE que vimos anteriormente, para controlar las diferentes funciones.

LEER Y ESCRIBIR ARCHIVOS O FICHEROS EN C. FOPEN, FCLOSE, MODOS DE ACCESO READ, WRITE Y APPEND (CU00536F)

Representación de números enteros: el convenio signo y magnitud

2 EL DOCUMENTO DE ESPECIFICACIONES

UAM MANUAL DE EMPRESA. Universidad Autónoma de Madrid

Manual para la utilización de PrestaShop

CASO PRÁCTICO DISTRIBUCIÓN DE COSTES

SIIGO PYME PLUS. Proceso de Recuperación. Cartilla I

MANUAL DE USUARIO DE LA APLICACIÓN DE ACREDITACION DE ACTIVIDADES DE FORMACION CONTINUADA. Perfil Entidad Proveedora

GUIA COMPLEMENTARIA PARA EL USUARIO DE AUTOAUDIT. Versión N 02 Fecha: 2011-Febrero Apartado: Archivos Anexos ARCHIVOS ANEXOS

GENERACIÓN DE CÓDIGO

2. ÁMBITO Y ALCANCE DEL PROYECTO...

Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero.

MATERIAL 2 EXCEL 2007

H E R R A M I E N T A S D E A N Á L I S I S D E D A T O S HERRAMIENTAS DE ANÁLISIS DE DATOS

Access Control. Manual de Usuario

Visual Basic 1. Empleo de módulos y Procedimientos. Procedimientos definidos por el usuario

Resumen manejo lista de precios en Discovery 3.70 / 3.71

Manual de usuario investigador

Sesión No. 4. Contextualización INFORMÁTICA 1. Nombre: Procesador de Texto

1. DML. Las subconsultas

GUÍA RÁPIDA DE TRABAJOS CON ARCHIVOS.

GUIA APLICACIÓN DE SOLICITUDES POR INTERNET. Gestión de Cursos, Certificados de Aptitud Profesional y Tarjetas de Cualificación de Conductores ÍNDICE

Abelardo Pardo. Iria Estévez Ayres. Damaris Fuentes Lorenzo. Pablo Basanta Val. Pedro J. Muñoz Merino. Hugo A. Parada.

Capitulo 3. Desarrollo del Software

MANUAL PARA GESTIÓN DE INCIDENCIAS INFORMÁTICAS

8. Sentencia return y métodos

HERRAMIENTAS DE ACCESS ACCESS Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

Tecnólogo Informático- Estructuras de Datos y Algoritmos- 2009

7. Manejo de Archivos en C.

Introducción al tipo de dato ARRAY

Sistema de Facturación de Ventas WhitePaper Enero de 2007

2. Entorno de trabajo y funcionalidad en Arquímedes

Programa diseñado y creado por Art-Tronic Promotora Audiovisual, S.L.

Historial de Versiones: Velneo vversion. Funcionamiento. Repositorio de versiones. Funcionalidades del Historial de Versiones. Bloquear.

EJERCICIOS RESUELTOS SOBRE ERRORES DE REDONDEO

Funciones y subrutinas

Manual de ayuda para la presentación de solicitudes de evaluación vía telemática

Práctica 1 - Pista de Carreras Programación II

ESTRUCTURA DE DATOS: ARREGLOS

LAS SUBCONSULTAS SQL SERVER Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

El lenguaje C. #define MAX LINEA 1000 /* maximo tamanio de linea de entrada */

CONCEPTOS BASICOS. Febrero 2003 Página - 1/10

La ventana de Microsoft Excel

INSTRUCCIONES CIERRE EJERCICIO 2014

UTILIZACIÓN DE UNA CUENTA DE CORREO ELECTRÓNICO (NUEVO) Acceso al correo electrónico

MANUAL DE AYUDA HERRAMIENTA DE APROVISIONAMIENTO

INTRODUCCION A LA PROGRAMACION DE PLC

Una breve introducción a Excel c

Informática Aplicada a la Gestión de Empresas (IAGE) Parte III Excel e Internet Tema 2

Creación de Funciones de Conducción

Capítulo 4. Vectores y matrices. 4.1 Declaración de tablas. 4.2 Declaración estática de tablas

Tema 2: Arquitectura del repertorio de instrucciones. Visión del computador que tiene el programador en bajo nivel.

SEGUIMIENTO EDUCATIVO. Comunicaciones

Matrices equivalentes. El método de Gauss

Edición de Ofertas Excel Manual de Usuario

Módulo I - Word. Iniciar Word Finalizar Word Definición de elementos de pantalla Escribir texto en un documento El cursor...

Manual de ayuda para el Proceso de compra en

GESTINLIB GESTIÓN PARA LIBRERÍAS, PAPELERÍAS Y KIOSCOS DESCRIPCIÓN DEL MÓDULO DE KIOSCOS

Ejemplo de tipo fijo CALCULADOR CONTABLE

TEMA II: REPRESENTACIÓN DE LA INFORMACIÓN

TEMA 2 WINDOWS XP Lección 4 BLOC DE NOTAS

62/8&,21(6$/(;$0(1'( /$%25$725,2'((6758&785$6'(/26&20387$'25(6 &8562)(%5(52

2_trabajar con calc I

Gestión de Retales WhitePaper Noviembre de 2009

TRABAJO Y ENERGÍA; FUERZAS CONSERVATIVAS Y NO CONSERVATIVAS

LINEAMIENTOS PARA LA CANCELACIÓN TOTAL DE SISTEMAS DE DATOS PERSONALES DEL INSTITUTO ELECTORAL DEL ESTADO DE MÉXICO CAPÍTULO I DISPOSICIONES GENERALES

Cómo usar Subversion. con Windows XP/2000/2003.

1) Aplicación Inp. Si has llegado hasta aquí poco te podemos decir ya de la misma. Seguimos.

Curso de Comandos VI.

Guía Corta: Alcance y Asociaciones. 1. Preliminares: Nombres y Asociaciones

Libros electrónicos. Dawson. Recursos de información para doctorandos

hay alguien ahi? por Marcelino Alvarez

Tutorial: Primeros Pasos con Subversion

Editor de vídeo Video Pad.

Manual del Programa Conecta 3V Para Teléfonos Móviles.

3. Creación y Transporte de Sitios Web Contenido

DEPARTAMENTO DE ADUANAS DE B S D 2013

ORGANIZAR LA INFORMACIÓN: EL EXPLORADOR DE WINDOWS

Normalización de una Base de Datos. Normalización de la BD (precio fijo)

SISTEMAS DE ECUACIONES LINEALES

Inscribirme en un nuevo Curso

TPVFÁCIL. Caja Real. Definiciones.

Modulo 1 El lenguaje Java

PRACTICA #1. Aprender a programar una interrupción software empleando C y/o Ensamblador.

Administración de la producción. Sesión 10: Gestor de Base de Datos (Access)

Transcripción:

Ejemplo introductorio: escritura de funciones en NASM Ejemplo introductorio: escritura de funciones en NASM En estas transparencias pondremos una subrutina ASPLE y la generación de código equivalente En estas transparencias pondremos una subrutina ASPLE y la generación de código equivalente function int cero() urn 0 _cero: sub, 0 push dword 0 pop eax mov, pop cero(); call _cero add, 0 Prácticas de compiladores 2004-2005 1 Prácticas de compiladores 2004-2005 2 Condiciones para subrutinas recursivas y reentrantes Llamada a subrutinas: conceptos preliminares Una subrutina reentrante [demiguel01] es aquélla que puede ser llamada dessde varios puntos simultáneamente sin modificar su comportamiento Una subrutina recursiva es aquélla que puede llamarse a sí misma, por lo tanto, una subrutina recursiva necesariamente tiene que ser reentrante. Las condiciones para que una subrutina sea recursiva y reentrante son las mismas. Las condiciones necesarias para que una subrutina sea recursiva y reentrante tiene que ver con que los datos utilizados por ellas no estén contenidos en posiciones fijas de memoria. Por lo tanto es suficiente con utilizar la pila para almacenar datos globales, locales y parámetros. Para llamar a una subrutina se cumple los que se conoce como convenio de llamadas que debe ser ecificado explícitamente al diseñar el compilador. El convenio de llamadas tiene que dar ruesta a las siguientes preguntas: Cómo se comunican los argumentos desde el programa llamante a la función llamada? Cómo se comunican los resultados desde la función llamada hasta el programa llamante? Se recomia utilizar el siguiente convenio de llamadas: Para comunicar los argumentos desde el programa llamante a la función llamada: Se utilizará la pila El programa llamante dejará en la pila los argumentos de la llamada en el mismo orden en el que serán utilizados Si la función está codificada correctamente, tras terminar su ejecución, dejará la pila en el mismo estado en el que la encontró Tras la llamada, el programa llamante tiene la ronsabilidad de eliminar de la pila Para comunicar los resultados desde la función llamada: Se utilizará el registro extido eax. Prácticas de compiladores 2004-2005 Prácticas de compiladores 2004-2005 4

Explicando más detalladamente el proceso consideremos el siguiente programa ASPLE Prácticas de compiladores 2004-2005 5 Prácticas de compiladores 2004-2005 6 segment.data _z dd 0 segment.text global main extern lee_entero, imprime_entero El programa llamante introduce en la pila los argumentos Prácticas de compiladores 2004-2005 7 Prácticas de compiladores 2004-2005 8

Realiza la llamada a la función Y limpia la pila. Esta instrucción es equivalente a pop <registro> pero no necesita modificar ningún registro Prácticas de compiladores 2004-2005 9 Prácticas de compiladores 2004-2005 10 De la misma manera hay que hacer con una llamada a una función definida por el programador El orno de la función se encuentra en eax Prácticas de compiladores 2004-2005 11 Prácticas de compiladores 2004-2005 12

Prácticas de compiladores 2004-2005 1 Prácticas de compiladores 2004-2005 14 Para comprer el código que hay que generar para la función imaginemos cómo está la pila (donde se tiene que almacenar toda la información) en una llamada si z contiene el valor Recuérdese que la pila de 2 bits tiene su puntero almacenado en el registro recuerde, también, que la pila crece hacia posiciones de memoria de valor menor, se representará gráficamente con crecimiento hacia abajo Se introduce en la pila el valor de z Prácticas de compiladores 2004-2005 15 Prácticas de compiladores 2004-2005 16

Recuérdese que la pila de 2 bits tiene su puntero almacenado en el registro recuerde, también, que la pila crece hacia posiciones de memoria de valor menor, se representará gráficamente con crecimiento hacia abajo La instrucción call introduce en la pila la dirección de orno Prácticas de compiladores 2004-2005 17 Esta es la pila que se encuentra la función cuando comienza su ejecución Está claro dónde se encuentra el argumento de la función (arg) Se tiene que utilizar también la pila para localizar las variables locales (auxarg) Debemos conocer qué expresión, en función de los registros de gestión de la pila, sirve para localizar en ella argumentos y variables locales. Obsérvese que el compilador trá que generar el código necesario para el cuerpo de la función. Por las decisiones de diseño tomadas, se utilizará la pila, por lo tanto, el valor del registro cambiará. NASM proporciona otro registro ecíficamente para poder solucionar esta circunstancia. Para ello hay que hacer lo siguiente: Guardar el valor de (también en la pila) Utilizar para mantener una copia del valor de en el momento de la entrada Utilizar para localizar los parámetros y las variables locales Recuperar los valores de los dos registros antes de salir de la función Prácticas de compiladores 2004-2005 18 Se guarda el valor de en la pila Se guarda en el valor de Prácticas de compiladores 2004-2005 19 Prácticas de compiladores 2004-2005 20

Recuérdese que usamos un tamaño de dato de 2 bits, que son 4 bytes. Así es fácil saber que arg se encuentra separado de por 2 dword, es decir + 8 bytes +8 Ahora sólo queda localizar (reservar acio en la pila y saber como acceder posteriormente) las variables locales (auxarg). Para ello se utiliza las posiciones libres bajo la cima de la pila (como con push, restamos a lo necesario) +8 sub, 4 Prácticas de compiladores 2004-2005 21 Prácticas de compiladores 2004-2005 22 Por lo tanto, auxarg se encontrará siempre 4 bytes por debajo de es decir, en -4 Ahora se puede generar el código para el cuerpo de la función (aquí se genera a mano y seguro que diferirá de lo generado por el compilador) +8 sub, 4-4 sub, 4 mov dword eax, [+8] mov dword [-4], eax +8-4 Prácticas de compiladores 2004-2005 2 Prácticas de compiladores 2004-2005 24

Ahora se puede generar el código para el cuerpo de la función (aquí se genera a mano y seguro que diferirá de lo generado por el compilador) Antes de salir de la función se debe recuperar los valores iniciales de y. sub, 4 mov dword eax, [+8] mov dword [-4], eax mov dword edx, 2 mul edx +8-4 sub, 4 mov dword eax, [+8] mov dword [-4], eax mov dword edx, 2 mul edx mov, +8-4 Se copia en su valor que está guardado en. Obsérvese que es como si se hicieran los pop necesarios para eliminar las variables locales Prácticas de compiladores 2004-2005 25 Prácticas de compiladores 2004-2005 26 Antes de salir de la función se debe recuperar los valores iniciales de y. Antes de salir de la función se debe recuperar los valores iniciales de y. sub, 4 mov dword eax, [+8] mov dword [-4], eax mov dword edx, 2 mul edx mov, pop +8-4 Se recupera (desde la pila) el antiguo valor de. Obsérvese que, tras modificar en la instrucción anterior la cima de la pila apunta ahora a la posición que guarda la copia de sub, 4 mov dword eax, [+8] mov dword [-4], eax mov dword edx, 2 mul edx mov, pop Y ya se puede devolver el control al programa llamante mediante la instrucción. Esta instrucción elimina de la pila la dirección de orno Prácticas de compiladores 2004-2005 27 Prácticas de compiladores 2004-2005 28

Retornamos, por lo tanto, al código del programa principal que se encuentra la pila como la tenía antes de la ejecución de la instrucción call. Obsérvese que la pila todavía contiene los argumentos de la función, el programa debe limpiar la pila. Retornamos, por lo tanto, al código del programa principal que se encuentra la pila como la tenía antes de la ejecución de la instrucción call. Obsérvese que la pila todavía contiene los argumentos de la función, el programa debe limpiar la pila. Se vio previamente la posibilidad de simula los pop necesarios para limpiar la pila sumando directamente en el puntero de la cima () Prácticas de compiladores 2004-2005 29 Prácticas de compiladores 2004-2005 0 Código para la llamada a funciones Código inicial y final para funciones recursivas y reentrantes Lo observado en el ejemplo anterior puede generalizarse para cualquier función con cualquier número de variables locales y cualquier número de argumentos: El programa llamante debe primero copiar los argumentos de la función en la pila en el mismo orden en el que aparecen en la declaración de la función push dword <1 er argumento> push dword <último argumento> Debe, luego llamar a la función: call _<nombre función> Y limpiar la pila: add, <4 * nº argumentos de la función> Antes de continuar con su código sabio que eax contiene el orno de la función (el código escrito a continuación imprime el entero devuelto por la función llamada) push eax Prácticas de compiladores 2004-2005 1 Lo observado en el ejemplo anterior puede generalizarse para cualquier función con cualquier número de variables locales y cualquier número de argumentos: Las primeras sentencias NASM del cuerpo de cualquier función deben ser las siguientes: _<nombre_funcion>: sub, <4*nº var locales> Y las últimas deben ser las siguientes: mov, pop Prácticas de compiladores 2004-2005 2

Localización de contenido de parámetros Localización de contenido de variables locales Y, en el código del cuerpo de la función, cuando se quiera acceder al valor de los parámetros se utilizará la expresión [ + <4 + 4*posición del parámetro en declaración>] Recuerde que, el primer 4 es para saltar la dirección de orno. Por ejemplo: El valor del último argumento será [+8]. El valor del penúltimo argumento será [+12]. El valor del i-esimo argumento será [+<4+4*(num-argumentos-i)>], contando i con origen 0. Y, en el código del cuerpo de la función, cuando se quiera acceder al valor de las variables locales se utilizará la expresión [ - <4*posición de la variable en declaración>] Por ejemplo: El valor de la primera variable local será [-4]. El valor de la segunda variable local será [-8]. El valor de la i-esima variable local será [-<4*i>]. Prácticas de compiladores 2004-2005 Prácticas de compiladores 2004-2005 4 Localización de dirección de parámetros y variables locales Sin embargo, como se ha indicado en la generación de código de otras construcciones de ASPLE (por ejemplo en el de las expresiones que contienen identificadores), a veces es necesario utilizar la dirección y no el contenido Recuérdese, por ejemplo, que para la variable global ASPLE z, La expresión para referirse al contenido es [_z] Localización de dirección de parámetros y variables locales En este curso se va a utilizar la siguiente sintaxis para la instrucción lea de NASM lea <registro> [<expresión>] Donde <registro>, es el nombre de un registro (por ejemplo eax) <expresión>, puede ser, por ejemplo +12. Pero, la expresión para la dirección es _z Lamentablemente, las funciones reentrantes y recursivas no utilizan nombres explícitos para los parámetros y las variables locales, por lo que la expresión equivalente para su dirección (+<dlazamiento> y -<dlazamiento>, rectivamente) son incorrectas en NASM. NASM proporciona la instrucción lea para resolver este problema. Prácticas de compiladores 2004-2005 5 Prácticas de compiladores 2004-2005 6

Resumen: tratamiento de identificadores Resumen: tratamiento de identificadores Como resumen de estos últimos puntos, considérese el identificador ASPLE z. Se utilizará las siguientes expresiones NASM para Aacceder a su contenido Si es una variable global [_z] Si es el argumento i-ésimo de una función [+<4+4*i>] Si es la variable local i-ésima de una función Aacceder a su dirección Si es una variable global _z Si es el argumento i-ésimo de una función, lo siguiente deja en el registro eax la dirección lea eax, [+<4+4*i>] Si es la variable local i-ésima de una función lea eax, [-<4*i>] [-<4*i>] Prácticas de compiladores 2004-2005 7 Prácticas de compiladores 2004-2005 8 Otras modificaciones necesarias Bibliografía Es muy importante que el alumno propague este tratamiento a todos los lugares donde pueda aparecer un identificador. Es decir, siempre que hay un identificador, se tiene que determinar Si es una variable global una variable local de una función un argumento de una función Si el código que se necesita generar accederá A su contenido A su dirección Ya que cada opción necesita un tratamiento diferente. [demiguel01] Pedro de Miguel Anasagasti, Fundamentos de los computadores. Ed. Paraninfo, Thomson Learning. 2001 Prácticas de compiladores 2004-2005 9 Prácticas de compiladores 2004-2005 40