Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
Programación en Assembler - Clase 3
Digital II
Departamento de Sistemas e Informática
2
Pila o Stack
La pila es una región de la memoria de todo sistema microprocesado.
La pila de memoria es del tipo LIFO (Last Input First Output) y se utiliza para almacenar información en forma temporal como ser:
è El contenido de registros.è Variables locales y temporales (datos). è El contenido del registro de Flags.è Argumentos de procedimientos.è Direcciones de retorno (Procedimientos).
0xFFFFF
0x00000
0x10400
0x10000
SS:SP
Clase3 – Pila y Procedimientos– Digital II
3
Pila o Stack
PUSH registro de 16 bits Coloca el contenido del registro indicado en el STACK.
La instrucción PUSH decrementa el SP en 2 unidades y almacena el contenido del registro en la dirección SS:SP. PUSH AX
SP SP-2
SP+1 : SP AX
POP registro de 16 bits Recupera del STACK el último dato ingresado y lo coloca en el registro indicado. La instrucción POP almacena en el registro lo que se recupera de la dirección SS:SP y luego incrementa en dos unidades el contenido de SP. POP AX
AX SP+1:SP
SP SP+2
0xFFFFF
0x00000
0x10400
0x10000
Clase3 – Pila y Procedimientos– Digital II
4
Pila o Stack
Lo importante:
è Nuca debe manipularse manualmente SS o SPè El dato a guardar y recuperar es siempre de 16 bits.è La instrucción POP no borra o blanquea el contenido de la
dirección de memoria leída.è Solo se actualiza la dirección apuntada por SP.è El sistema no controla los límites de la pila
Clase3 – Pila y Procedimientos– Digital II
5
Pila o Stack
Otras formas de acceder a la pila:
è Banderas o Flags:è PUSHF Primero se decrementa en dos el SP y después se
transfiere el registro de banderas a la localidad de la pila indicada por el SP.
è POPF Esta instrucción transfiere bits de la palabra que se encuentra en la parte superior de la pila hacia el registro de banderas.
è Procedimientos:CALL y RET (se verá mas adelante)
è Direccionamiento:Recordando que la pila reside en memoria y respetando
reglas precisas será posible acceder a datos de la pila mediante métodos tradicionales de direccionamiento (se verá mas adelante).
Clase3 – Pila y Procedimientos– Digital II
6
Procedimientos
¿ Qué es un procedimiento ?
è Un grupo de instrucciones que desempeña una tarea
è Un procedimiento es una sección de un programa que se puede volver a utilizar y que se almacena una vez en la memoria, pero que se emplea tantas veces como se lo necesite (ahorra espacio).
è Facilita el desarrollo de la programación, ya que se divide un programa complejo en otros más sencillos, y además permite reutilizar los algoritmos ya desarrollados.
Clase3 – Pila y Procedimientos– Digital II
7
Procedimientos
CALL NombreDelProcGuarda en la pila la dirección de la próxima instrucción y transfiere el control a la dirección especificada
RET [ctte]Recupera de la pila la dirección de retorno y transfiere el control a la dirección especificada.
...mov ax,bxxor cx,cx...mov ax, MiDato1pop axCALL MiProcpop si...add si,2
MiProc: Push cx ... RET
Clase3 – Pila y Procedimientos– Digital II
Procedimientos
8
Las llamadas a procedimientos (CALL) pueden ser cercanas (near) o lejanas (far). è Las llamadas cercanas guardan en la pila el offset de
la dirección de la siguiente instrucción, es decir que el procedimiento se debe localizar en el mismo segmento que el programa principal. (IP)
è Las llamadas lejanas guardan en la pila el offset y segmento correspondientes a la dirección siguiente, por lo que permite llamar a procedimientos ubicados en cualquier lugar en la memoria. (CS+IP)
La instrucción RET extrae un número (offset de la dirección de retorno) de 2 bytes de la pila y lo almacena en el registro IP, o bien un número de 4 bytes (offset y segmento de la dirección de retorno) y lo coloca en los registros IP y CS.
0xFFFF
…
SP IP
…
0x0000
0xFFFF
…
CS
SP IP
…
0x0000
Clase3 – Pila y Procedimientos– Digital II
Procedimientos
9
SintaxisTodos los procedimientos requieren una etiqueta al comienzo y al final, se definen usando la directiva PROC al inicio del procedimiento y con la directiva ENDP al final.
NombreDelProc PROC [[NEAR | FAR]].
.
.
RET [constante]NombreDelProc ENDP
Es importante destacar que la directiva ENDP solo le informa al ASS que terminó un procedimiento, no es una instrucción ejecutable, no hace que el procedimiento devuelva el control.Es por esto que debe ubicarse la instrucción RET inmediatamente antes de la directiva ENDP.
Clase3 – Pila y Procedimientos– Digital II
Procedimientos
10
Pasaje de parámetros a los procedimientos
è Cómo→ Por valor: el dato tiene significado en si mismo se pasa una
copia del mismo al procedimiento, el cual deberá reservar su memoria para alojarlo.
→ Por referencia: se pasa la dirección de una variable, ésta existe una solo vez en memoria y cualquier cambio que se realice en el procedimiento se reflejará instantáneamente en el programa ppal.
è Dónde→ Usando registros→ Usando el stack
Clase3 – Pila y Procedimientos– Digital II
Procedimientos
11
Pasaje de parámetros a los procedimientos
è Cómo→ Por valor→ Por referencia
è Dónde→ Usando registros: se pueden utilizar los registros de uso
general del micro para alojar datos de 8 o 16 bits temporalmente hasta que el procedimiento pueda utilizarlos.
→ Usando el stack: en él pueden guardarse variables temporales de 16 bits. Es importante tener en cuenta que el stack es utilizado por otras instrucciones (call/ret) y su estado depende de “la historia”, por lo tanto se deben definir ciertas reglas de uso que nos aseguren no afectar el estado del stack (dejarlo igual) respecto al punto de vista de las demás instrucciones (ret/call)
Clase3 – Pila y Procedimientos– Digital II
Procedimientos
12
Pasaje de parámetros a los procedimientos (stack)è El programa llamador colocará en el Stack primero los parámetros de
entrada/salida o salida y al ultimo todos los de entrada solamente.è El programa llamado será el encargado de retirar del Stack todos los
parámetros recibidos que sean solo de entrada y actualizará el valor de los de entrada/salida y salida.
è El programa llamador, por ultimo, retirará del Stack todos los parámetros de entrada/salida y salida que haya colocado
Tipo de parámetro y orden
Secuencia
Prog. llamador Procedimiento Prog. Llamador
Salida Reservar lugar Actualizar Leer y quitar
Entrada / Salida Guardar Leer y actualizar Leer y quitar
Entrada Guardar Leer y quitar
Clase3 – Pila y Procedimientos– Digital II
Procedimientos
13
Ejemplo
a) Escriba 2 procedimientos en ASS que permitan sumar y restar 2 numeros de 16 bits. Utilizar pasaje de parametros por pila
b) Escriba un procedimiento en ASS que tome dos numeros de 16 bits y un tercer parametro OPER tipo byte. El procedimiento deber operar haciendo uso de las rutinas de (a) según sea el valor de OPER. 0:no opera,1:suma, 2:resta. Usar entrada por pila, retorne por registro.
c) Escribir un programa principal que use (b) y (a) para operar sobre los datos contenidos en TBL_DATOS, según lo indicado en TBL_OPER y que guarde los resultados en una tercer tabla TBL_RES. TBL_DATOS contiene LARGO(byte) pares de datos N1,N2,N1,N2, ....
Clase3 – Pila y Procedimientos– Digital II
14
è Gracias!
Clase3 – Pila y Procedimientos– Digital II