manipulacion de la pila!!
TRANSCRIPT
Manipulación de la Pila
Ramón Iván Romo Reyes
Instrucciones para la pila
• 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).
Instrucciones Básicas de la Pila• 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
Ejemplo• 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.
Codigo• .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
Ejemplo 2• ;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
Ejemplo 3•
; 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