Estructura y funcionamiento de la pila(stack) en ensamblador
Enviado por baggg • 14 de Septiembre de 2022 • Resumen • 521 Palabras (3 Páginas) • 120 Visitas
Estructura Pila o Stack
1. Stack frame anterior: marcos de pila pero de métodos anteriormente usados.
2. Argumentos: parámetros que se le entregan a una función.
3. Return address (EIP extended instruccion pointer): Aquí se almacena la dirección de retorno. La dirección de memoria a la que debe apuntar, luego de finalizar esa función. En palabras sencillas, es como un marcador de páginas de un libro, recordara fácilmente donde se debe continuar la lectura.
4. Segmento de dirección de marco de pila anterior: almacena la dirección de memoria que apunta al marco de pila anterior. En sí, almacena la dirección al marco de la función anterior.
5. Espacio de variables locales: Este espacio de memoria está reservado para las variables locales de la función. Considerando que se quiera almacenar la variable "Hola Mundo.", se deberán reservar 12 bytes, puesto las letras, el punto y el espacio suman 11 bytes, sin embargo, es necesario indicar el término de la cadena con "/0" que suma la totalidad de 12 bytes. También se debe considerar con respecto a la memoria reservada para variables locale, que existen un segmento de memoria no reservado y libre, siempre y cuando no se haya consumido toda la memoria.
6. EBP (extended base point o base de la pila): El reistro EBP guarda una dirección de memoria que apunta al segmento de dirección del marco de pila anterior.
7. ESP (extended Stack pointer o cima de la pila): También es un registro, que almacena la dirección de memoria que apunta al último dato insertado.
Comportamiento Registros
Para recordar todo el proceso de ejecución de una aplicación, se abordará desde el princicpio. En el que lo primero será almacenar el código fuente de la
aplicación en lenguaje maquina en el (.txt). Se procede con la carga de variable globales inicializadas en (.data) y no inicializadas en (.bss).
Sin embargo, en este caso no existe ninguna. Además, el programa no utiliza memoria dinámica, por lo que no se reserva memoria en esta área (Heap).
#include<stdio.h>
void suma(int x,int y){
int resultado;
resultado = x + y;
return resultado;
}
int main(){
int i = 1;
int j = 2;
suma(i,j);
return 0;
}
1. Paso 1: (Función Main)
• Antes de comenzar a apilar el registro EBP apunta a la cima actual de la pila, osea que , EBP va a ser igual a ESP
• Las dos variables locales de la función principal se guardarán en el espacio asignado para variables.
2. Paso 2: (Función suma)
• La función suma revibe dos argumentos que serán lmacenados en el espacio reservado para argumentos.
• En el registro EIP o dirección de retorno,
...