elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  que es una pila?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: que es una pila?  (Leído 2,201 veces)
TR NOvato

Desconectado Desconectado

Mensajes: 8


Ver Perfil
que es una pila?
« en: 29 Marzo 2017, 21:38 pm »

Perdón si la pregunta es muy básica pero la verdad,no encuentro una buena definición por así decirlo u.u.
estoy aprendiendo un poco de ensamblador y me dejo las dudas de,que es una pilas?
cual es la diferencia entre las subrutinas y las saltos cercanos(near jump)
que creo que se usan comúnmente con las etiquetas.
Si este tema ya esta en el foro pido disculpas,pero me encantaría que me lo ilustraran con algunos ejemplo si fuera posible u.u,gracias


En línea

Poyoncio

Desconectado Desconectado

Mensajes: 220



Ver Perfil WWW
Re: que es una pila?
« Respuesta #1 en: 29 Marzo 2017, 21:49 pm »

http://poyoncio.com/2017/02/03/Curso-ensamblador-10-Stack/

Saludos


En línea

Curso de ensamblador desde cero
Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.349


Ver Perfil
Re: que es una pila?
« Respuesta #2 en: 30 Marzo 2017, 00:54 am »

Una pila es una estructura de datos. Si ya conoces el array, pués una pila es casi lo mismo, pero con la principal función de que los datos que se van metiendo, se extraen en orden inverso...
Una forma simple de entenderlo: Iagina una caja o un baúl... metes libros en él, si ahora quieres sacar uno, el que sacas es el último, porque es el que está arriba (en la cima), así para sacar el primero que metiste debes sacar primero todos los que tiene  encima.
Y dónde radica la importancia de esto?: en que está ordenado por orden de llegada, es ideal para atender las llamadas y todo tipo de rutinas anidadas...

Aplicándolo a ensambaldor en términos claros:
Supon que ejecutas una rutina... y que la actual instrucción que se está ejecutando es la dirección 00456789, y acto seguido haces un salto condicionado, entonces antes de hacer el salto, la dirección actual del registro PC (contador de programa) se guarda en la pila y acto seguido se salta a la dirección que apunta JMP,(esto pondrá en el registro PC, la dirección actual de ejecución), cuando se encuentre la instrucción de retorno, entonces se recurre a retonar la dirección de la pila que en este caso era 00456789 que se coloca de nuevo en el registro PC, y la ejecución continúa entonces en ese punto (actualizada) a la siguiente dirección tras el JMP que inició el salto...
Esto parece simple ó innecesario, para entenderlo mejor, imagina ahora que desde aquel sitio donde has saltado con JMP, hay alguna otra instrucción que reclama un salto... entonces nuevamente habrá que almacenar datos en la pila, incluso valores actuyales que tienen ciertos registros y que en la nueva dirección de salto, va a modificar... Así, si hay varios saltos consecutivos, cuando se termine una rutina, se rescata de la pila los datos tomados, para restablecer, los valores de los registros deseados y la posición dell contador de programa.

Respecto de los saltos NEAR y FAR... de un modo sencillo, si es near, basta guardar el valor del registro PC y eso ocupa x posivciones en la pila, pero si el salto queda fuera del registor actual, además del registro contador de programa, también debe guardarse el registro de segmento actual, porque en él se meterá el valor de otro registro de segmento, y por tanto, los datos a guardar en la pila y posteriormente a rescatar serían X + Y... Si lo simulas en un papel, te sserá muy fácil entenderlo...

Hay instrucciones que manejan la pila POP, POPA, POPAD, POPF, POPFD, PUSHF, POPF, PUSH, PUSHW,PUSHHD, PUSHA, PUSHAD, PUSHF, PUSHFD... el segmento de pila es SS y su registro el SP...
Los errores comunes que se cometen al operar con la pila suelen ser: guarda un número diferente de bytes de los que se rescatan luego, o rescatar un número diferente de bytes de los que se guardaron y exceder el limite de la pila...
En línea

TR NOvato

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: que es una pila?
« Respuesta #3 en: 30 Marzo 2017, 02:09 am »

Gracias por las respuestas :D, Poyoncio el curso que pones en tu pagina es hasta un nivel básico,intermedio,o algo avanzado ?
estoy estudiando full teoría u.u,no están poniendo tanto código en el curso pero bueno.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
La pila
Electrónica
Sardi 1 4,254 Último mensaje 6 Noviembre 2003, 04:22 am
por Meta
Pila en C++
Programación C/C++
Norochii 1 5,776 Último mensaje 25 Mayo 2011, 20:24 pm
por Acermax
Una pila en C
Programación C/C++
Dark Invader 4 3,645 Último mensaje 25 Junio 2011, 19:40 pm
por Dark Invader
[C-ASM] Pila
Programación C/C++
GGZ 0 1,342 Último mensaje 21 Noviembre 2016, 01:58 am
por GGZ
Ejercicio de Pila
Java
padiuwu 1 1,637 Último mensaje 8 Marzo 2019, 20:18 pm
por spcruzaley
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines