Programación en Lenguaje Ensamblador

-El Verdadero Lenguaje de las Máquinas-

STACK, push, pop, underflow y overflow

–Funcionamiento del Stack (Pila) del Sistema–

No se exactamente como se traduce esté término al español pero por los contextos en que vi esta palabra no me hacen precisamente pensar en Programación. Un Stack es una estructura dentro de la memoria que recuerda mucho a un bote de papas Pringles lleno de pelotas. Para quienes no sean nerds calvos y obesos habrán visto alguna vez los paquetes de las pelotas de tenis en las tiendas de deportes. Un Stack es igual que estas latas. Uno puede meter pelotas de una por una en estos recipientes de una en una, pero a la hora de sacarlas solo podemos sacar la que queda mas cerca de la boca de la lata. Para sacar una de mas abajo es necesario sacar las que quedan sobre ella. Y si la lata se llena, no podemos seguir metiendo mas pelotas. En el dibujo que acompaña a esta entrada se explica con detalle el comportamiento de las pilas. Las principales operaciones para manejar un Stack son dos: PUSH y POP.

PUSH.- Esta operación toma como argumento un registro general, de segmento o una posición de memoria y la introduce (copia) al Stack.

POP.- Al igual que la anterior, toma como argumento un registro o una celda de memoria. Pero lo que hace es que toma el valor almacenado en el tope de la pila (el mismo que obtendríamos si metiéramos la mano en el tubo de Pringles) y lo guarda en dicho lugar.


cuadro gris

Y para quienes no entienden este asunto aqui les dejo una explicacion con dibujitos de caritas felices. Imaginense que cada una de las caritas es un valor que entra en la pila. Se muestran las condiciones de Stack Underflow y Overflow. Asi como lo que pasa conforme entran y salen valores del Stack. Haga Click (o pinche como dirian los gallegos) para agrandar.

Algunos conceptos interesantes sobre los Stacks son los siguientes:

*Tope del Stack.- Es un indice que apunta al tope del Stack. Avanza o retrocede conforme se meten y sacan valores de este. Funciona como un altímetro. Cuando el tope del Stack es igual al fondo del stack. ¡Crash!

*Base del Stack.- Es otro índice que señala la base del Stack. EBP es un registro especializado en esta función.

*Stack Overflow.- Es cuando el Stack se llena y ya nada puede entrar. Esto era causa de caídas de sistema en la era anterior a los 32 bits. No he visto uno de estos accidentes en años pero aún es posible.

*Stack Underflow.- Es cuando queremos sacar elementos de una pila que ya no tiene nada. Es lo mismo que cuando ya se acabaron las papas del bote de Pringles.

*Efecto Yo-Yo.- Una de las funciones mas útiles de un Stack es el efecto Yo-Yo. Cuando el sistema llama a una función lo que hace es almacenar en el Stack la posición en la que va y luego salta a donde está la función invocada. Al llegar al final de la subrutina Unicamente se extrae el último valor del stack y automáticamente se regresa a donde se recibió la llamada. Este mismo efecto es el que hace funcionar el botón BACK, o ATRAS de los navegadores de Internet.

*Si llegaste a este blog en busca de lamearte el código de una Stack para una tarea de Estructuras de Datos, espero que esta explicación te ayude a aprender el concepto. Pero no encontrarás aquí ningún código que lo haga por ti. Yo también soy del club de Programadores de Ensamblador que no le hacen la tarea a otros.

*El dibujo es en mi opinión lo suficientemente sencillo como para que hasta un niño lo entienda. Si no es tu caso, mejor busca un manual que te explique como hacer querys.

*Y por favor no seas de los que confunden el Stack con la batería de la PC solo porque en español ambas se traducen como ‘Pilas’.

About these ads

enero 12, 2009 - Posted by | Uncategorized | , ,

21 comentarios »

  1. Esta bien el tutorial pero no quedes sigue escribiendo, jejej, que facil es decirlo ¿no?.

    pero si en algo puedo ayudar solo avisame.

    Comentario por Cesar | noviembre 21, 2009 | Responder

    • pues si quieres ayudar en algo puedes entrar a la nueva Red Social de Programadores de Ensamblador. Ahi puedes compartir conocimientos y codigos con otros programadores y aprender de ellos tambien. Aunque la comunidad tiene menos de una semana estoy seguro de que algo bueno va a salir de ella. Puedes llegar haciendo click en el enlace o en este otro

      Comentario por asm86 | noviembre 21, 2009 | Responder

  2. Hola,
    jaja yo soy de esos que hacen querys…pero la verdad me aburren, programo en c#(poco mas que junior) y no es que no me guste c#, al contrario, pero me atrae mucho lo de bajo nivel, C/C++, asm, quiero saber que es lo que ocurre en realidad ‘por debajo’…deje congelada la U por circunstancias que no pude manejar,pero soy autodidacta(claro que pienso retomar la U!) y un apasionado, vicioso, pero muy perseverante, ademas nunca he sido malo con las matematicas, mas bien al contrario…asi que a ver si me recomiendas algun tutorial(como dejaste ‘a media caña’ este curso de ensamblador), quisiera programar sobre GNU/Linux de preferencia, uso Ubuntu….No dudes que seré un colaborador en la Red Social de Programadores de Ensamblador apenas este en la capacidad de hacer mis programas en asm…
    Gracias por compartir tus conocimientos y muy buen Blog!

    Comentario por Jose | junio 24, 2010 | Responder

  3. “Haga Click (o pinche como dirian los gallegos) para agrandar.” jajajaja
    Te felicito por el tutorial y por el blog.

    Hasta me hiciste dar ganas de comer pringles..

    Comentario por SerialLogiC | octubre 1, 2010 | Responder

  4. cuanto cuesta el push pop sabe muy rico

    Comentario por daniela | octubre 9, 2010 | Responder

  5. exelente

    Comentario por osmar | noviembre 2, 2010 | Responder

  6. Al igual que el amigo de arriva yo tambien soy amante de la programacion de bajo nivel, de verdad me gustaria ser un hacker, por eso es que busco esta informacion, ademas de que estoy en la universidad, pero eh tenido ciertos problemas con las matematicas que me llevaron hasta el punto de no poder llevar cursos de carreram y tengo que recurrir a desahogarme en la red buscando algo de programacion como un zombie xD, yo tambien te felicito por el trabajo sobre este blog, espero que puedas completarlo, o que al hacer click en ese enlace que dejaste en el comentario encuentre algo bueno como en aqui jajaja.

    Comentario por Tonet | diciembre 21, 2010 | Responder

    • El primer paso para poder ser hacker es entender que ser uno significa interesarse por el funcionamiento de las cosas y no tiene nada que ver con hacer maldades en internet. Por eso se asocia tanto la programacion en ensamblador con ellos, porque este lenguaje trata con lo mas interno de la computadora y no (necesariamente) para robar informacion.

      Respecto a lo de las matematicas yo pase por lo mismo en un tiempo. La verdad es que las matematicas son muy utiles en cosas como la Programacion Grafica e Inteligencia Artificial. No esperes a aprender de los maestros y estudia por tu cuenta si aun puedes. Piensa en las matematicas como en un idioma extranjero con sus reglas gramaticales y vocabulario propio. Puede que lo que veas en la escuela no te sirva para programar pero tarde o temprano vas a necesitar dominar esos temas (al menos las matematicas) para hacer ciertos programas.

      Comentario por asm86 | diciembre 22, 2010 | Responder

  7. Lastima que no continues con el tutorial me estaba gustando mucho bien explicado y gracioso XD.

    Saludos.

    Comentario por Sergio | mayo 29, 2011 | Responder

  8. sierto, es realmente una lastima para todos los que deseamos aprender ASM, el tuto lo hasdejado hasta donde meparece que venia lo bueno xD
    yo solo entre aqui por el gusto de aprender asm, aunque parece mas complicado que basic, c+, o cualquier “clasico” lenguaje, me atrajo por ser mucho mas rapido, ligero y hasta donde entiendo mas potente.
    que se le puede hacer, si algun escribes una lineas que continuen este tuto no olviden avisarme xD
    a, como no decirle, aunque incompleta :( exelente guia :D

    Comentario por Carlos | enero 4, 2012 | Responder

  9. Excelente introducción a los conceptos básicos del ASM, claro que como comentaron, quedamos con gusto a poco tal cual un niño al que le dan a oler una barra de chocolate y luego se lo esconden.
    Para efectos prácticos, se puede ver todo el código ascii en este link:

    http://www.elcodigoascii.com.ar/

    Un saludo y felicitaciones.

    Comentario por Guillermo. | febrero 8, 2012 | Responder

  10. ¿No hay nada más? Demasiado lindo para ser verdad =(

    Comentario por KKim Vázquez Angeles | octubre 3, 2012 | Responder

  11. See ya pensaba que habia encontrado la llave de plata de la programacion en asm, ni modo a seguir buscando otros buenos cursos como este, y gracias por lo aportado al autor de esta pagina, estuvo bueno mientras duro.

    Comentario por James Dean | noviembre 5, 2012 | Responder

  12. Sinceramente, sí esperaba código, ya que no sé nada de Esamblador y lo único que aprendí fueron conceptos. Pero bueno, me acabo de leer todo, desde la primera página y ni siquiera sé como se escribe, ni compila, ni yo qué sé que otra cosa hay que hacer en el lenguaje anteriormente mencionado. Me quedé con 2 cosas: aprendí a pasar números enteros a binarios(lo cual me parece genial), y con una “calentura tremenda”(en sentido de enojado), por que andabas diciendo no sé qué de los lenguajes interpretados… Soy un chico de 14 años, soy programador en Python y me gusta mucho, así como Linux, podrías haber generalizado y no decir Windows en todas las páginas de este tutorial. Son solo opiniones, espero que no molesten a nadie.

    Comentario por Cristian García | septiembre 13, 2013 | Responder

    • hay una secuencia de videos que quedo a medias. La mitad de esos videos no sirven pero unos pocos muestran como echar a andar el compilador flatassembler y compilar programas sencillos. Esos videos pueden ayudarte

      Comentario por asm86 | septiembre 16, 2013 | Responder

  13. Estoy Interesado en el lenguaje ensamblador.

    http://asm86.wordpress.com/2009/11/10/red-social-de-programadores-de-ensamblador/#comment-1628

    y quiero saber que ha pasado con la pagina.(Red social de progarmadores)
    Gracias de antemano

    Comentario por Juan Carlos García Medina | octubre 21, 2013 | Responder

    • La red murió por falta de actividad y por cambios en la política del servicio. Aunque no se perdió mucho en realidad. El nombre se lo puse en honor a un cierto evento descrito en esta misma página pero la red no estaba bajo control de esa escuela. En realidad estoy en el extremo opuesto del pais. Si quieres ayuda con ASM puedes comentar en cualquier parte. Tardo a veces en contestar pero si contesto

      Comentario por asm86 | octubre 25, 2013 | Responder

      • Hola de verdad me gustaría aprender ensamblador, me podrías pasar tu correo??, además de que necesito hacer un proyecto en ensamblador :S

        Comentario por Humberto | octubre 31, 2013

  14. La verdad, es que ES UNA GRAN PENA PARA MI QUE NO SIGAS CON ESTE MAGNIFICO, INSTRUCTIVO Y YO DIRIA QUE PERFECTO TUTORIAL PARA LAS PERSONAS QUE EMPEZAMOS EN ESTO COMPLETAMENTE DESDE CERO.
    Como fiel seguidor y admirador tuyo asm86, desearía seguir con esta gran entrega hecha con un gran talento. ¿¿COMO PODRIA SEGUIRLO, DONDE??
    ¿TIENES OTRO BLOG QUE SIGA CON ESTA ENTREGA?¿DAS CLASES PARTICULARES?
    ¿podrias darme un correo y podíamos llegar a un acuerdo?

    Comentario por Luis | febrero 13, 2014 | Responder

  15. hey hey hey…!!! excelente entrada, explicaciones geniales, interesantes y divertidas, pero… en que termina? me quede como cuando de niño te cuenta una historia tu abuelo, se queda dormido y entonces te preguntas… en que diablos termina la historia ? necesito, mejor dicho necesitamos saber si se da seguimiento a esta entrada, por favor si alguien sabe algo, avisen!

    Comentario por mauricio | julio 23, 2014 | Responder

  16. no puedo creer esto fue todo, apenas estaba poniéndose interesante, el primer comentario es en el 2009, por tal esto es todo, estamos ceca del 2015, seria un milagro que este tuto se retomara…….. gracias por el tuto es una buena introduccion para seguir adelanta…

    Comentario por Antonio Gómez | septiembre 18, 2014 | Responder


Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 45 seguidores

A %d blogueros les gusta esto: