14
Programación en Assembler - Clase 3 Digital II Departamento de Sistemas e Informática

Departamento de Sistemas e Informática1... · 2016-09-26 · Clase3 – Pila y Procedimientos– Digital II. Procedimientos 13 Ejemplo a) Escriba 2 procedimientos en ASS que permitan

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Departamento de Sistemas e Informática1... · 2016-09-26 · Clase3 – Pila y Procedimientos– Digital II. Procedimientos 13 Ejemplo a) Escriba 2 procedimientos en ASS que permitan

Programación en Assembler - Clase 3

Digital II

Departamento de Sistemas e Informática

Page 2: Departamento de Sistemas e Informática1... · 2016-09-26 · Clase3 – Pila y Procedimientos– Digital II. Procedimientos 13 Ejemplo a) Escriba 2 procedimientos en ASS que permitan

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

Page 3: Departamento de Sistemas e Informática1... · 2016-09-26 · Clase3 – Pila y Procedimientos– Digital II. Procedimientos 13 Ejemplo a) Escriba 2 procedimientos en ASS que permitan

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

Page 4: Departamento de Sistemas e Informática1... · 2016-09-26 · Clase3 – Pila y Procedimientos– Digital II. Procedimientos 13 Ejemplo a) Escriba 2 procedimientos en ASS que permitan

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

Page 5: Departamento de Sistemas e Informática1... · 2016-09-26 · Clase3 – Pila y Procedimientos– Digital II. Procedimientos 13 Ejemplo a) Escriba 2 procedimientos en ASS que permitan

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

Page 6: Departamento de Sistemas e Informática1... · 2016-09-26 · Clase3 – Pila y Procedimientos– Digital II. Procedimientos 13 Ejemplo a) Escriba 2 procedimientos en ASS que permitan

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

Page 7: Departamento de Sistemas e Informática1... · 2016-09-26 · Clase3 – Pila y Procedimientos– Digital II. Procedimientos 13 Ejemplo a) Escriba 2 procedimientos en ASS que permitan

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

Page 8: Departamento de Sistemas e Informática1... · 2016-09-26 · Clase3 – Pila y Procedimientos– Digital II. Procedimientos 13 Ejemplo a) Escriba 2 procedimientos en ASS que permitan

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

Page 9: Departamento de Sistemas e Informática1... · 2016-09-26 · Clase3 – Pila y Procedimientos– Digital II. Procedimientos 13 Ejemplo a) Escriba 2 procedimientos en ASS que permitan

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

Page 10: Departamento de Sistemas e Informática1... · 2016-09-26 · Clase3 – Pila y Procedimientos– Digital II. Procedimientos 13 Ejemplo a) Escriba 2 procedimientos en ASS que permitan

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

Page 11: Departamento de Sistemas e Informática1... · 2016-09-26 · Clase3 – Pila y Procedimientos– Digital II. Procedimientos 13 Ejemplo a) Escriba 2 procedimientos en ASS que permitan

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

Page 12: Departamento de Sistemas e Informática1... · 2016-09-26 · Clase3 – Pila y Procedimientos– Digital II. Procedimientos 13 Ejemplo a) Escriba 2 procedimientos en ASS que permitan

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

Page 13: Departamento de Sistemas e Informática1... · 2016-09-26 · Clase3 – Pila y Procedimientos– Digital II. Procedimientos 13 Ejemplo a) Escriba 2 procedimientos en ASS que permitan

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

Page 14: Departamento de Sistemas e Informática1... · 2016-09-26 · Clase3 – Pila y Procedimientos– Digital II. Procedimientos 13 Ejemplo a) Escriba 2 procedimientos en ASS que permitan

14

è Gracias!

Clase3 – Pila y Procedimientos– Digital II