You are on page 1of 4

Hola moderadores y foreros. Un tema que me tiene bastante cansado es la famosa pila.

Y digo cansado (por no decir ya agotado) porque ninguno - y ciertamente hay muchos - de los tutoriales que he ledo ma han ilustrado con ejemplos cmo es el funcionamiento de la pila. Todo lo que s de Assembler (bueno, mi intrprete, Turbo Assembler 5.0) se ha visto trunco por el no entendimiento del tema de la pila. A continuacin muestro una parte que extra de un Tutorial acerca de la PILA : (Como introduccin quien lo escribe detalla ..... "Para explicar esta parte, voy a hacerlo lo m s mundanamente posible y sin mucho trmino complicado, porque las explicaciones muchas veces suelen liar m s sobre una cosa tan sencilla como es sto") y salteandome algo bsico que explica, llego a esto (que al menos para m es inentendible) = La estructura de la pila se denomina LIFO, siglas inglesas que indican 'Last In First Out'. Esto significa que al hacer un POP, se sacar el ltimo valor introducido en la pila. Vamos con unos ejemplitos majos: PUSH DX ; Mete en la pila el contenido de DX PUSH CX ; Y ahora el contenido de CX POP AX ; Ahora saca el ltimo valor introducido ( CX ) ;y lo coloca en AX. ;#### ESTO NO LO ENTIENDO PARA NADA: ;#### Cmo es eso de ejemplificar sacando (pop) AX, si previamente ;#### no la introdujo (push) AX y dice que el contenido de CX lo ;#### coloca en AX ..... para esto no debera haber previamente ;#### un MOV AX,CX (y quizs tambin un XOR AX,AX antes) ? - ms all ;#### de que CX se utilice eminentemente como contador (Contina ..... ) POP BP ; Y ahora saca en valor anterior introducido, que ;es el contenido de DX cuando hicimos el PUSH DX ;y se lo asigna a BP. ;##### MISMA SITUACIN QUE ANTES; Y el mov ? Ahora, una rutina algo m s detallada: ;################# Cmo voy a seguir leyendo algo ms evolucionado ;################# si esto no lo comprendo (al menos yo) ? Si alguien me pudiera enviar un ejemplo prctico, esclarecedor y sencillo de un programa que incluya una rutina con push y pop (no pretendo ya popf y pushf) - que se pueda linkear y correr bajo D.O.S. - y con explicacin en cada una de sus lneas, realmente se lo agradecera muchsimo. Si pudiera ser para Turbo Assembler - x esas pequeas diferencias de sintaxis - , mejor; si no, no importa, me vendr bien igual e intentar transcribirlo para Turbo Assembler ( lo que pido es que me digan qu Intrprete se utiliz para el

programa que solicito ) Gracias por leer el mensaje. Hola Lo que no estas entendiendo es la sintaxis de ambas instrucciones y lo que hacen: PUSH [registro/memoria] PUSH almacena en la pila el contenido de la variable [registro/memoria] POP [registro/memoria] POP saca un elemento de la pila y lo guarda en la variable[registro/memoria] [registro/memoria] Significa que el parametro puede ser un registro o segmento de memoria Como ya leiste lo bsico, sabes que existe un SS "Direccin de segmento de pila" y un SP "Tope de la pila" Este SP lo usan PUSH y POP para manejar la pila, adems ambas instrucciones invierten la secuencia de bytes, etc... Te recomiendo el libro Lenguaje ensamblador y programacin para PC IBM y compatibles de Peter Abel es muy completo y tiene varios ejemplos tanto bsicos como de programacin avanzada Saludos Volviendo a tu ejemplo La estructura de la pila se denomina LIFO, siglas inglesas que indican 'Last In First Out'. Esto significa que al hacer un POP, se sacar el ltimo valor introducido en la pila. Vamos con unos ejemplitos majos: PUSH DX ; Mete en la pila el contenido de DX PUSH CX ; Y ahora el contenido de CX POP AX ; Ahora saca el ltimo valor introducido ( CX ) ;y lo coloca en AX. ;#### ESTO NO LO ENTIENDO PARA NADA: ;#### Cmo es eso de ejemplificar sacando (pop) AX, si previamente ;#### no la introdujo (push) AX y dice que el contenido de CX lo ;#### coloca en AX ..... sean DX = 015AH y CX = 03D2H y SP= 8H , una pila de palabras de 2 localidades c/u la H indica que son hexadecimales, para fines practicos la omitimos en la escritura La pila esta vaca ( 1-2) (3-4) (5-6)

(7-8)<---SP indica el tope de la pila su valor es 8 PUSH DX - PUSH desplaza a SP, SP= SP - 2 = (8) -2 = 6 (1-2) (3-4) (5-6) <--- PUSH hace que SP apunte a la localidad 6

- PUSH toma el contenido de DX que es 015A e invierte la secuencia de bytes, entonces a 015A lo convierte en 5A01 - PUSH almacena ese valor ( el 5A01) en la pila,en la posicin sealada por SP que es 6, as que (1-2) (3-4) (5-6) 5A01 <-- SP sigue apuntando a la localidad 6

PUSH CX PUSH vuelve a desplazar a SP, SP = SP -2 = (6) - 2 = 4 (1-2) (3-4) (5-6) <-- PUSH hace que SP apunte a localidad 4 5A01

- PUSH toma el contenido de CX que es 03D2 , e invierte la secuencia de bytes, por lo que 03D2 se convierte en D203 - Luego PUSH almacena ese valor (el D203) en la pila, en la localidad sealada actualmente por SP que para este momento es 4 , as que (1-2) (3-4) (5-6) D203 <-- SP sigue apuntando a la localidad 4 5A01

POP AX - Lo primero que hace POP es tomar el valor de la localidad apuntada por SP, para este instante, es la 4 (1-2) (3-4) (5-6) D203 <-- Como SP apunta al 4, POP sacara este valor de la pila 5A01

La pila nos quedara as (1-2)

(3-4) (5-6)

<-- SP continua apuntando a la localidad 4 5A01

- Luego POP invierte la secuencia de bytes del valor obtenido, si el valor es D203 con los bytes invertidos tendremos 03D2 - Luego POP tiene que almacenar ese valor (el 03D2) en AX, entonces AX = 03D2 Si recuerdas que CX = 03D2 Esto significa que el contenido de CX ha sido colocado en AX - Por ltimo POP desplaza a SP, SP = SP + 2 = (4) + 2 = 6 as que (1-2) (3-4) (5-6) 5A01 <-- POP ha desplazado a SP a esta posicin, la 6

Como puedes ver AX nunca se metio en la pila, de hecho se esta usando para sacar elementos de la pila Para programacin, no basta con entender los comentarios, tienes que comprender la "mecanica" de la pila. El libro que te he recomendado es muy bueno para principiantes y avanzados, tambin te muestra la mecanica de las instrucciones. Se que te molesto mi respuesta, pero conociendo la mecanica de las instrucciones, los errores que puedas tener en tus programas seran cada vez ms evidentes

You might also like