Ejemplo didáctico – Convención de Llamada a Funciones ANSI C: _CDECL.

Slides:



Advertisements
Presentaciones similares
Universidad Tecnológica Nacional Facultad Regional Buenos Aires Ingeniería en Sistemas de Información Introducción a C Sistemas Operativos.
Advertisements

Universidad Tecnológica Nacional Facultad Regional Buenos Aires Ingeniería en Sistemas de Información Introducción a C Sistemas Operativos.
Curso de java básico (scjp)
DATSI, FI, UPM José M. Peña Programación en C DATSI, FI, UPM José M. Peña Programación en C.
REGISTROS INTERNOS DEL PROCESADOR.
Tema 4b Operadores.
Ejemplo de Programa C++
Funciones y recursividad
MANUAL EXPRESS DE C J.M.sevilla.
INSTTUTO TECNOLOGICO DE APIZACO
LOGROS DEL PERÍODO Utiliza de forma correcta las funciones para entrada y salida de datos en c++. Utiliza los elementos básicos de un programa en c++.
INTRODUCCION A LOS ALGORITMOS (Conceptos previos)
Programación I Teoría I
Programación I Teoría III
Direcciones, Arreglos y Argumentos de Funciones
Estructuras de datos. Programación, Algoritmos y Estructuras de Datos.
Funciones. Programación, Algoritmos y Estructuras de Datos.
Tipos de Datos Básicos y Estructurados
Una variable en un programa es algo con un nombre, cuyo valor puede variar. La manera en que el compilador y enlazador maneja esto es asignando un bloque.
Variables Prof. Gonzalo Pastor.
SEMANA 9_2.
Punteros Universidad Nacional Mayor de San Marcos
FUNCIONES EN C.
INFORMATICA I Arreglos 1 CLASE 17.
INFORMATICA I Funciones CLASE 13.
Programación en C (Segunda Parte) DATSI, FI, UPM José M. Peña
Introducción al Lenguaje C (ANSI)
Estructuras de Datos Memoria y Variables. Conceptos Computador: CPU + Memoria + Dispositivos E/S La memoria se encarga de almacenar los datos y los programas.
Unidad 3 Punteros.
Curso Práctica 3 1 Funciones CONTENIDO Consideraciones sobre funciones Estructura de un programa en C Uso de funciones Paso de parámetros Punteros.
17/09/2014Catedra de Programacion I1 Programación I Funciones.
Rectas presupuestarias x2x2 x1x1 Elecciones optimas.
Herramientas para el acceso directo a memoria en C++
¿Qué es un PUNTERO?: Un puntero es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable. No.
Conceptos Básicos de Java
Funciones en lenguaje C
FUNCIONES EN C.
CI TEORIA semana 8 Subprogramas o funciones Definición de funciones.
El lenguaje de programación C - Funciones -
Programación I Teoría VI: Recursividad

Material de apoyo Unidad 2 Estructura de datos
Compiladores II ( /04/ :03) Tema 2. Generación de Código para Estructuras Complejas Lecciones 3 y 4.
Introducción al NASM The Netwide Assembler MIA J. Rafael Rojano C.
MODOS DE DIRECCIONAMIENTO
Nombre, Alcance y Asociaciones (Bindings). Agenda Definición Nombre y Bindings Binding Time Importancia del Binding Time Eventos relacionados a la Asociación.
LENGUAJE “C” Programación.
MIPS Intermedio.
Programación III Clase 07 Funciones.
FUNCIONES EN C.
Arreglos.
Programación III Clase 06 Funciones.
APUNTADORES EN C. MENU DEL DIA Repaso clase anterior Apuntadores. Eso pa que? Solución al problema: Funciones. Ventajas de trabajar un programa usando.
Prog. Univ. Rodríguez Rey, Pablo Funciones Programación I.
Descomposición Modular. Funciones
Informática Ingeniería en Electrónica y Automática Industrial
Unidad II Introducción a la programación en C++
FUNCIONES Conceptos básicos. Retorno de una función Clases de funciones. Paso de parámetros. Funciones y arrays.
Punteros.
Trazado. 1 Intercambio sin error #include void intercambio(int *, int *); /* prototipo */ main(){ int a=1,b=2; printf("a=%d b=%d\n",a,b); intercambio(&a,&b);
Acerca del curso Nombre del curso Créditos: Profesor Teoría:
Asignatura: Lenguaje de Programación de Sistema 2014 PPT No. 03 Programa vespertino de Ingeniería (E) en Sistemas Computacionales Profesor: José Estay.
Los punteros Programación modular.
1 Unidad I Panorama general de lenguajes de programación en aplicaciones mecatrónicas M.C. Juan Carlos Olivares Rojas.
Sesión 4: Repaso Lenguaje C (1). 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Sistemas Digitales.
INTRODUCCION A LA PROGRAMACION
LENGUAJE “C” Programación.
PUNTEROS EN EL LENGUAJE C
 Las funciones son un conjunto de instrucciones que realizan una tarea específica. En general toman unos valores de entrada, llamados parámetros y proporcionan.
PROGRAMANDO EN C Estructura de un programa. 1 variables globales main(){ variables locales secuencia de sentencias } f1(){ variables locales secuencia.
Transcripción de la presentación:

Ejemplo didáctico – Convención de Llamada a Funciones ANSI C: _CDECL

Nota: Se recomienda ver esta presentación teniendo a mano una copia de la convención de llamadas _CDECL, o en su defecto del apunte de cátedra.

Ejemplo sencillo – sumar dos enteros. funciones.asm GLOBAL sumar sumar: pushebp movebp, esp moveax,[ebp+8] addeax,[ebp+12] movesp, ebp popebp retmain.c extern int sumar(int x, int y); void main (void) { int x=2, y=5, z; z = sumar(x, y); printf("x = %d, y = %d, z = %d \n",x,y,z); } Cómo compilar: nasm –f elf funciones.asm –o funciones.o gcc –c main.c –o main.o ld –oformat elf main.o funciones.o –o suma. a b c

Ejemplo sencillo – sumar dos enteros. funciones.asm GLOBAL sumar sumar: pushebp movebp, esp moveax,[ebp+8] addeax,[ebp+12] movesp, ebp popebp ret Hacia direcciones inferiores de la memoria... 0x0000h 0X18h 0X1Ch 0X20h 0x24h 0x28h 0X2Ch Variables locales al main Hacia direcciones superiores de la memoria... 0xffffh main.c extern int sumar(int x, int y); void main (void) { int x=2, y=5, z; z = sumar(x, y); printf("x = %d, y = %d, z = %d \n",x,y,z); } ESP EBP Dirección de crecimiento del Stack c b a

Ejemplo sencillo – sumar dos enteros. funciones.asm GLOBAL sumar sumar: pushebp movebp, esp moveax,[ebp+8] addeax,[ebp+12] movesp, ebp popebp ret Hacia direcciones inferiores de la memoria... 0x0000h 0X18h 0X1Ch 0X20h 0x24h 0x28h 0X2Ch Variables locales al main Hacia direcciones superiores de la memoria... 0xffffh main.c extern int sumar(int x, int y); void main (void) { int x=2, y=5, z; z = sumar(x, y); printf("x = %d, y = %d, z = %d \n",x,y,z); } ESP EBP Dirección de crecimiento del Stack 1 EIP (APROX)

Ejemplo sencillo – sumar dos enteros. funciones.asm GLOBAL sumar sumar: pushebp movebp, esp moveax,[ebp+8] addeax,[ebp+12] movesp, ebp popebp ret Hacia direcciones inferiores de la memoria... 0x0000h 0X18h 0X1Ch 0X20h 0x24h 0x28h 0X2Ch Variables locales al main Hacia direcciones superiores de la memoria... 0xffffh main.c extern int sumar(int x, int y); void main (void) { int x=2, y=5, z; z = sumar(x, y); printf("x = %d, y = %d, z = %d \n",x,y,z); } ESP EBP Dirección de crecimiento del Stack EIP (APROX) 1 Y=5

Ejemplo sencillo – sumar dos enteros. funciones.asm GLOBAL sumar sumar: pushebp movebp, esp moveax,[ebp+8] addeax,[ebp+12] movesp, ebp popebp ret Hacia direcciones inferiores de la memoria... 0x0000h 0X18h 0X1Ch 0X20h 0x24h 0x28h 0X2Ch Variables locales al main Hacia direcciones superiores de la memoria... 0xffffh main.c extern int sumar(int x, int y); void main (void) { int x=2, y=5, z; z = sumar(x, y); printf("x = %d, y = %d, z = %d \n",x,y,z); } ESP EBP Dirección de crecimiento del Stack EIP (APROX) Y=5 X=2

Ejemplo sencillo – sumar dos enteros. funciones.asm GLOBAL sumar sumar: pushebp movebp, esp moveax,[ebp+8] addeax,[ebp+12] movesp, ebp popebp ret Hacia direcciones inferiores de la memoria... 0x0000h 0X18h 0X1Ch 0X20h 0x24h 0x28h 0X2Ch Variables locales al main Hacia direcciones superiores de la memoria... 0xffffh main.c extern int sumar(int x, int y); void main (void) { int x=2, y=5, z; z = sumar(x, y); printf("x = %d, y = %d, z = %d \n",x,y,z); } ESP EBP Dirección de crecimiento del Stack EIP (APROX) 2 Y=5 X=2 EIP del main

Ejemplo sencillo – sumar dos enteros. funciones.asm GLOBAL sumar sumar: pushebp movebp, esp moveax,[ebp+8] addeax,[ebp+12] movesp, ebp popebp ret Hacia direcciones inferiores de la memoria... 0x0000h 0X18h 0X1Ch 0X20h 0x24h 0x28h 0X2Ch Variables locales al main Hacia direcciones superiores de la memoria... 0xffffh main.c extern int sumar(int x, int y); void main (void) { int x=2, y=5, z; z = sumar(x, y); printf("x = %d, y = %d, z = %d \n",x,y,z); } ESP EBP Dirección de crecimiento del StackEIP Y=5 X=2 EIP del main EBP del main 3

Ejemplo sencillo – sumar dos enteros. funciones.asm GLOBAL sumar sumar: pushebp movebp, esp moveax,[ebp+8] addeax,[ebp+12] movesp, ebp popebp ret Hacia direcciones inferiores de la memoria... 0x0000h 0X18h 0X1Ch 0X20h 0x24h 0x28h 0X2Ch Variables locales al main Hacia direcciones superiores de la memoria... 0xffffh main.c extern int sumar(int x, int y); void main (void) { int x=2, y=5, z; z = sumar(x, y); printf("x = %d, y = %d, z = %d \n",x,y,z); } ESP EBP Dirección de crecimiento del StackEIP Y=5 X=2 EIP del main EBP del main 4

Y=5 Ejemplo sencillo – sumar dos enteros. funciones.asm GLOBAL sumar sumar: pushebp movebp, esp moveax,[ebp+8] addeax,[ebp+12] movesp, ebp popebp ret Hacia direcciones inferiores de la memoria... 0x0000h 0X18h 0X1Ch 0X20h 0x24h 0x28h 0X2Ch Variables locales al main Hacia direcciones superiores de la memoria... 0xffffh main.c extern int sumar(int x, int y); void main (void) { int x=2, y=5, z; z = sumar(x, y); printf("x = %d, y = %d, z = %d \n",x,y,z); } ESPEBP Dirección de crecimiento del StackEIP X=2 EIP del main EBP del main EBP EAX= 2

EAX= Ejemplo sencillo – sumar dos enteros. funciones.asm GLOBAL sumar sumar: pushebp movebp, esp moveax,[ebp+8] addeax,[ebp+12] movesp, ebp popebp ret Hacia direcciones inferiores de la memoria... 0x0000h 0X18h 0X1Ch 0X20h 0x24h 0x28h 0X2Ch Variables locales al main Hacia direcciones superiores de la memoria... 0xffffh main.c extern int sumar(int x, int y); void main (void) { int x=2, y=5, z; z = sumar(x, y); printf("x = %d, y = %d, z = %d \n",x,y,z); } ESPEBP Dirección de crecimiento del StackEIP X=2 EIP del main EBP del main EBP + 12 Y=5 6

Ejemplo sencillo – sumar dos enteros. funciones.asm GLOBAL sumar sumar: pushebp movebp, esp moveax,[ebp+8] addeax,[ebp+12] movesp, ebp popebp ret Hacia direcciones inferiores de la memoria... 0x0000h 0X18h 0X1Ch 0X20h 0x24h 0x28h 0X2Ch Variables locales al main Hacia direcciones superiores de la memoria... 0xffffh main.c extern int sumar(int x, int y); void main (void) { int x=2, y=5, z; z = sumar(x, y); printf("x = %d, y = %d, z = %d \n",x,y,z); } ESPEBP Dirección de crecimiento del StackEIP X=2 EIP del main EBP del main 7 EAX= 7

Y=5 Ejemplo sencillo – sumar dos enteros. funciones.asm GLOBAL sumar sumar: pushebp movebp, esp moveax,[ebp+8] addeax,[ebp+12] movesp, ebp popebp ret Hacia direcciones inferiores de la memoria... 0x0000h 0X18h 0X1Ch 0X20h 0x24h 0x28h 0X2Ch Variables locales al main Hacia direcciones superiores de la memoria... 0xffffh main.c extern int sumar(int x, int y); void main (void) { int x=2, y=5, z; z = sumar(x, y); printf("x = %d, y = %d, z = %d \n",x,y,z); } ESP EBP Dirección de crecimiento del StackEIP X=2 EIP del main 8 EAX= 7 ---BASURA---

Y=5 Ejemplo sencillo – sumar dos enteros. funciones.asm GLOBAL sumar sumar: pushebp movebp, esp moveax,[ebp+8] addeax,[ebp+12] movesp, ebp popebp ret Hacia direcciones inferiores de la memoria... 0x0000h 0X18h 0X1Ch 0X20h 0x24h 0x28h 0X2Ch Variables locales al main Hacia direcciones superiores de la memoria... 0xffffh main.c extern int sumar(int x, int y); void main (void) { int x=2, y=5, z; z = sumar(x, y); printf("x = %d, y = %d, z = %d \n",x, y,z); } ESP Dirección de crecimiento del StackEIP X=2 EIP del main EBP EAX= 7 ---BASURA---

Y=5 Ejemplo sencillo – sumar dos enteros. funciones.asm GLOBAL sumar sumar: pushebp movebp, esp moveax,[ebp+8] addeax,[ebp+12] movesp, ebp popebp ret Hacia direcciones inferiores de la memoria... 0x0000h 0X18h 0X1Ch 0X20h 0x24h 0x28h 0X2Ch Variables locales al main Hacia direcciones superiores de la memoria... 0xffffh main.c extern int sumar(int x, int y); void main (void) { int x=2, y=5, z; z = sumar(x, y); printf("x = %d, y = %d, z = %d \n",x, y,z); } ESP EBP Dirección de crecimiento del StackEIP X=2 9 EAX= 7 ---BASURA---

Y=5 Ejemplo sencillo – sumar dos enteros. funciones.asm GLOBAL sumar sumar: pushebp movebp, esp moveax,[ebp+8] addeax,[ebp+12] movesp, ebp popebp ret Hacia direcciones inferiores de la memoria... 0x0000h 0X18h 0X1Ch 0X20h 0x24h 0x28h 0X2Ch Variables locales al main Hacia direcciones superiores de la memoria... 0xffffh main.c extern int sumar(int x, int y); void main (void) { int x=2, y=5, z; z = sumar(x, y); printf("x = %d, y = %d, z = %d \n",x, y,z); } ESP EBP Dirección de crecimiento del Stack EIP X=2 10 EAX= 7

Ahora continúa la ejecución de la función llamadora.

Ejemplo sencillo – sumar dos enteros. Ahora utilizando variables locales al stack funciones.asm global sumar sumar: pushebp movebp,esp subesp,4 pushebx movebx,[ebp+8] addebx,[ebp+12] mov[ebp-4],ebx moveax,[ebp-4] popebx movesp,ebp popebp ret main.c extern int sumar(int x, int y); void main (void) { int x=2, y=5, z; z = sumar(x, y); printf("x = %d, y = %d, z = %d \n",x,y,z); } 1

Ejemplo sencillo – sumar dos enteros. Ahora utilizando variables locales al stack funciones.asm global sumar sumar: pushebp movebp,esp subesp,4 pushebx movebx,[ebp+8] addebx,[ebp+12] mov[ebp-4],ebx moveax,[ebp-4] popebx movesp,ebp popebp ret Hacia direcciones inferiores de la memoria... 0x0000h 0x14h 0X18h 0X1Ch 0X20h 0x24h 0x28h 0X2Ch Variables locales al main Hacia direcciones superiores de la memoria... 0xffffh Dirección de crecimiento del Stack X=2 EIP del main EBP del main Y=5EIP ESP EBP 2

Ejemplo sencillo – sumar dos enteros. Ahora utilizando variables locales al stack funciones.asm global sumar sumar: pushebp movebp,esp subesp,4 pushebx movebx,[ebp+8] addebx,[ebp+12] mov[ebp-4],ebx moveax,[ebp-4] popebx movesp,ebp popebp ret Hacia direcciones inferiores de la memoria... 0x0000h 0x14h 0X18h 0X1Ch 0X20h 0x24h 0x28h 0X2Ch Variables locales al main Hacia direcciones superiores de la memoria... 0xffffh Dirección de crecimiento del Stack X=2 EIP del main EBP del main Y=5EIP ESP EBP

Ejemplo sencillo – sumar dos enteros. Ahora utilizando variables locales al stack funciones.asm global sumar sumar: pushebp movebp,esp subesp,4 pushebx movebx,[ebp+8] addebx,[ebp+12] mov[ebp-4],ebx moveax,[ebp-4] popebx movesp,ebp popebp ret Hacia direcciones inferiores de la memoria... 0x0000h 0x14h 0X18h 0X1Ch 0X20h 0x24h 0x28h 0X2Ch Variables locales al main Hacia direcciones superiores de la memoria... 0xffffh Dirección de crecimiento del Stack X=2 EIP del main EBP del main Y=5EIP ESP EBP 2

Ejemplo sencillo – sumar dos enteros. Ahora utilizando variables locales al stack funciones.asm global sumar sumar: pushebp movebp,esp subesp,4 pushebx movebx,[ebp+8] addebx,[ebp+12] mov[ebp-4],ebx moveax,[ebp-4] popebx movesp,ebp popebp ret Hacia direcciones inferiores de la memoria... 0x0000h 0x14h 0X18h 0X1Ch 0X20h 0x24h 0x28h 0X2Ch Variables locales al main Hacia direcciones superiores de la memoria... 0xffffh Dirección de crecimiento del Stack X=2 EIP del main EBP del main Y=5EIP ESP EBP EBX val. original 3

Ejemplo sencillo – sumar dos enteros. Ahora utilizando variables locales al stack funciones.asm global sumar sumar: pushebp movebp,esp subesp,4 pushebx movebx,[ebp+8] addebx,[ebp+12] mov[ebp-4],ebx moveax,[ebp-4] popebx movesp,ebp popebp ret Hacia direcciones inferiores de la memoria... 0x0000h 0x14h 0X18h 0X1Ch 0X20h 0x24h 0x28h 0X2Ch Variables locales al main Hacia direcciones superiores de la memoria... 0xffffh Dirección de crecimiento del Stack X=2 EIP del main EBP del main Y=5EIP ESP EBP 4 EBX val. original EBX= 2

Ejemplo sencillo – sumar dos enteros. Ahora utilizando variables locales al stack funciones.asm global sumar sumar: pushebp movebp,esp subesp,4 pushebx movebx,[ebp+8] addebx,[ebp+12] mov[ebp-4],ebx moveax,[ebp-4] popebx movesp,ebp popebp ret Hacia direcciones inferiores de la memoria... 0x0000h 0x14h 0X18h 0X1Ch 0X20h 0x24h 0x28h 0X2Ch Variables locales al main Hacia direcciones superiores de la memoria... 0xffffh Dirección de crecimiento del Stack X=2 EIP del main EBP del main Y=5EIP ESP EBP EBX val. original EBX= 2 EBP + 8

Ejemplo sencillo – sumar dos enteros. Ahora utilizando variables locales al stack funciones.asm global sumar sumar: pushebp movebp,esp subesp,4 pushebx movebx,[ebp+8] addebx,[ebp+12] mov[ebp-4],ebx moveax,[ebp-4] popebx movesp,ebp popebp ret Hacia direcciones inferiores de la memoria... 0x0000h 0x14h 0X18h 0X1Ch 0X20h 0x24h 0x28h 0X2Ch Variables locales al main Hacia direcciones superiores de la memoria... 0xffffh Dirección de crecimiento del Stack X=2 EIP del main EBP del main Y=5EIP ESP EBP EBX val. original 7 EBX= EBP + 12

Ejemplo sencillo – sumar dos enteros. Ahora utilizando variables locales al stack funciones.asm global sumar sumar: pushebp movebp,esp subesp,4 pushebx movebx,[ebp+8] addebx,[ebp+12] mov[ebp-4],ebx moveax,[ebp-4] popebx movesp,ebp popebp ret Hacia direcciones inferiores de la memoria... 0x0000h 0x14h 0X18h 0X1Ch 0X20h 0x24h 0x28h 0X2Ch Variables locales al main Hacia direcciones superiores de la memoria... 0xffffh Dirección de crecimiento del Stack X=2 EIP del main EBP del main Y=5EIP ESP EBP EBX val. original 7 EBX= EBP - 4 5

Ejemplo sencillo – sumar dos enteros. Ahora utilizando variables locales al stack funciones.asm global sumar sumar: pushebp movebp,esp subesp,4 pushebx movebx,[ebp+8] addebx,[ebp+12] mov[ebp-4],ebx moveax,[ebp-4] popebx movesp,ebp popebp ret Hacia direcciones inferiores de la memoria... 0x0000h 0x14h 0X18h 0X1Ch 0X20h 0x24h 0x28h 0X2Ch Variables locales al main Hacia direcciones superiores de la memoria... 0xffffh Dirección de crecimiento del Stack X=2 EIP del main EBP del main Y=5EIP ESP EBP 6 EBX val. original 7 EBX= 7 EAX= 7

Ejemplo sencillo – sumar dos enteros. Ahora utilizando variables locales al stack funciones.asm global sumar sumar: pushebp movebp,esp subesp,4 pushebx movebx,[ebp+8] addebx,[ebp+12] mov[ebp-4],ebx moveax,[ebp-4] popebx movesp,ebp popebp ret Hacia direcciones inferiores de la memoria... 0x0000h 0x14h 0X18h 0X1Ch 0X20h 0x24h 0x28h 0X2Ch Variables locales al main Hacia direcciones superiores de la memoria... 0xffffh Dirección de crecimiento del Stack X=2 EIP del main EBP del main Y=5EIP ESP EBP EBX val. original 7 EBX= 7 EAX= 7

Ejemplo sencillo – sumar dos enteros. Ahora utilizando variables locales al stack funciones.asm global sumar sumar: pushebp movebp,esp subesp,4 pushebx movebx,[ebp+8] addebx,[ebp+12] mov[ebp-4],ebx moveax,[ebp-4] popebx movesp,ebp popebp ret Hacia direcciones inferiores de la memoria... 0x0000h 0x14h 0X18h 0X1Ch 0X20h 0x24h 0x28h 0X2Ch Variables locales al main Hacia direcciones superiores de la memoria... 0xffffh Dirección de crecimiento del Stack X=2 EIP del main EBP del main Y=5EIP EBP 7 7 ESP EBX= XXXX EAX= 7

Ejemplo sencillo – sumar dos enteros. Ahora utilizando variables locales al stack funciones.asm global sumar sumar: pushebp movebp,esp subesp,4 pushebx movebx,[ebp+8] addebx,[ebp+12] mov[ebp-4],ebx moveax,[ebp-4] popebx movesp,ebp popebp ret Hacia direcciones inferiores de la memoria... 0x0000h 0x14h 0X18h 0X1Ch 0X20h 0x24h 0x28h 0X2Ch Variables locales al main Hacia direcciones superiores de la memoria... 0xffffh Dirección de crecimiento del Stack X=2 EIP del main EBP del main Y=5EIP EBP 7 ESP EBX= XXXX EAX= 7

Ejemplo sencillo – sumar dos enteros. Ahora utilizando variables locales al stack funciones.asm global sumar sumar: pushebp movebp,esp subesp,4 pushebx movebx,[ebp+8] addebx,[ebp+12] mov[ebp-4],ebx moveax,[ebp-4] popebx movesp,ebp popebp ret Hacia direcciones inferiores de la memoria... 0x0000h 0x14h 0X18h 0X1Ch 0X20h 0x24h 0x28h 0X2Ch Variables locales al main Hacia direcciones superiores de la memoria... 0xffffh Dirección de crecimiento del Stack X=2 EIP del main EBP del main Y=5EIP 8 7 ESP EBP

Ejemplo sencillo – sumar dos enteros. Ahora utilizando variables locales al stack funciones.asm global sumar sumar: pushebp movebp,esp subesp,4 pushebx movebx,[ebp+8] addebx,[ebp+12] mov[ebp-4],ebx moveax,[ebp-4] popebx movesp,ebp popebp ret Hacia direcciones inferiores de la memoria... 0x0000h 0x14h 0X18h 0X1Ch 0X20h 0x24h 0x28h 0X2Ch Variables locales al main Hacia direcciones superiores de la memoria... 0xffffh Dirección de crecimiento del Stack X=2 EIP del main EBP del main Y=5EIP 7 EBP ESP

Ejemplo sencillo – sumar dos enteros. Ahora utilizando variables locales al stack funciones.asm global sumar sumar: pushebp movebp,esp subesp,4 pushebx movebx,[ebp+8] addebx,[ebp+12] mov[ebp-4],ebx moveax,[ebp-4] popebx movesp,ebp popebp ret Hacia direcciones inferiores de la memoria... 0x0000h 0x14h 0X18h 0X1Ch 0X20h 0x24h 0x28h 0X2Ch Variables locales al main Hacia direcciones superiores de la memoria... 0xffffh Dirección de crecimiento del Stack X=2 EIP del main EBP del main Y=5EIP 9 ---BASURA--- ESP EBP 10

Su pregunta no molesta!!!!!