2. • La pila es un grupo de localidades de memoria que se
reservan con la finalidad de
• proporcionar un espacio para el almacenamiento
temporal de información.
• La pila de los programas es del tipo
• LIFO (Last In First Out, Ultimo en entrar, Primero en
salir).
3. • Para controlar la pila el microprocesador cuenta con dos
instrucciones básicas:
• Push (Meter) y Pop (sacar).
• El formato de estas instrucciones es el siguiente:
• Push operando
• Pop operando
• Cuando se ejecuta la instrucción Push, el contenido del
operando se almacena en la ultima posición de la pila
4. • Por ejemplo, si AX se carga previamente con el valor 5,
una instrucción Push AX almacenaría el valor 5 en la
ultima posición de la pila.
• Por otro lado la instrucción Pop saca el último dato
almacenado en la pila y lo coloca en el operando.
• Siguiendo el ejemplo anterior, la instrucción Pop BX
obtendría el número 5 y lo almacenaría en el registro BX.
• El siguiente ejemplo muestra como implementar la
instrucción XCHG por medio de las instrucciones Push y
Pop. Recuerde que la instrucción XCHG intercambia el
contenido de sus dos operandos.
5. • .COMMENT
• Programa: PushPop.ASM
• Descripción: Este programa demuestra el uso de las instrucciones para el
manejo de la
• pila, implementando la instrucción XCHG con Push y Pop
• *
• .MODEL tiny
• .CODE
• Inicio: ;Punto de entrada al programa
• Mov AX,5 ;AX=5
• Mov BX,10 ;BX=10
• Push AX ;Pila=5
• Mov AX,BX ;AX=10
• Pop BX ;BX=5
• Mov AX,4C00h ;Terminar programa y salir al DOS
• Int 21h ;
• END Inicio
• END
6. • ;Autor Victor De la Rocha
• ;URL http://www.mis-algoritmos.com
• .model small
• .stack ;Nos sirve como un almacen (segmento de pila)
• .data
• var1 db 5
• var2 db 3
• .code
• .startup
• mov ah, 02h
• mov dl, var1
• add dl, 30h
• int 21h
• mov dl, '+'
• int 21h
• mov dl, var2
• add dl, 30h
• int 21h
• mov dl,'='
• int 21h
• mov ah,0h
• mov al, var1
• add al, var2
• push AX ;Se guarda en la pila para no perder valores
• mov dl,ah
• mov ah, 02h
• add dl, 30h
• int 21h
• pop AX ; Saca todos los valores de la pila
• mov dl,al
• add dl,30h
• mov ah,02h
• int 21h
• .exit
• end
7. • ; HOLA.ASM
• ; Programa clásico de ejemplo. Despliega una leyenda en pantalla.
• STACK SEGMENT STACK ; Segmento de pila
• DW 64 DUP (?) ; Define espacio en la pila
• STACK ENDS
• DATA SEGMENT ; Segmento de datos
• SALUDO DB "Hola mundo!!",13,10,"$" ; Cadena
• DATA ENDS
• CODE SEGMENT ; Segmento de Codigo
• ASSUME CS:CODE, DS:DATA, SS:STACK
• INICIO: ; Punto de entrada al programa
• MOV AX,DATA ; Pone direccion en AX
• MOV DS,AX ; Pone la direccion en los registros
• MOV DX,OFFSET SALUDO ; Obtiene direccion del mensaje
• MOV AH,09H ; Funcion: Visualizar cadena
• INT 21H ; Servicio: Funciones alto nivel DOS
• MOV AH,4CH ; Funcion: Terminar
• INT 21H
• CODE ENDS
• END INICIO ; Marca fin y define INICIO