ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

PROCEDIMIENTOS

fareloTesis16 de Junio de 2013

3.281 Palabras (14 Páginas)289 Visitas

Página 1 de 14

PROCEDIMIENTOS

Procedimiento. Conjunto de instrucciones que realizan una tarea -y preferentemente solo una- que se ha de utilizar en más de una ocasión pero se declara una sola vez en el código fuente.

Un procedimiento puede llamar a otro, y este a su vez a otro y así sucesivamente

El procedimiento se guarda en memoria cuando se ensambla y ejecuta y entonces puede ser llamado tantas veces como sea necesario, ahorrando espacio y facilitando el desarrollo de software gracias a que permite organizarlo.

Los procedimientos deben ser cortos, de no más de una o dos páginas.

Sus ventajas son:

1. Reducen la cantidad de código

2. Permiten organizar mejor el programa

3. Facilitan la depuración del programa

4. Facilitan el mantenimiento progresivo del programa.

Su desventaja es que reducen la velocidad de ejecución de los programas debido a la forma en que se ejecutan (cada vez que se llama a un procedimiento, el programa tiene que ir a buscarlo pues sólo se ha generado el código del mismo una vez).

Al momento de invocar a un procedimiento se guarda en la pila la dirección de la siguiente instrucción del programa para que, una vez transferido el flujo del programa y terminado el procedimiento, se pueda regresar a la línea siguiente del programa original. Tener esto presente si se usa la pila antes, durante y después de llamar al procedimiento

TIPOS DE PROCEDIMIENTOS

Existen dos tipos de procedimientos:

A) los intrasegmentos, que se encuentran en el mismo segmento de instrucciones, se declaran y se llaman dentro del mismo programa en ellos se almacena en la pila el valor de IP. También se les conoce como procedimientos internos también son llamados procedimientos locales.

B) Los intersegmentos, que pueden ser almacenados en diferentes segmentos de memoria, y en cuyo caso se almacena en la pila el valor CS:IP. Se les llama también procedimientos externos. Se declaran en módulos o programas separados al programa donde el procedimiento es llamado, en otras palabras, la llamada al procedimiento se encuentra en un programa y el procedimiento en otro. Para poder utilizar procedimientos externos, es necesario que sean declarados como públicos en el programa donde se encuentran y que sean llamados como externos en el programa donde serán usados. Se debe contar con las directivas de ensamble:

PUBLIC

Ppara declarar los procedimientos como públicos, y hacerlos disponibles para otros módulos.

PUBLIC nombre

EXTRN

Para indicar qué nombres se van a usar está fuera del programa.

EXTRN nombre:tipo

Si el nombre representa un dato, tipo es BYTE, WORC, DWORD, QWORD o TBYTE

Si el nombre representa una etiqueta, tipo es FAR o NEAR

Es conveniente poner las directivas EXTERN y PUBLIC antes que las instrucciones y las directivas que definen datos a fin de que el ensamblador sepa qué significan esos nombres especiales antes de que aparezcan en el programa.

Los procedimientos son producidos y llamados gracias a las directivas e instrucciones CALL, PROC, RET y ENDP.

CALL

Es una instrucción que sirve para llamar al procedimiento desde el programa principal y además guarda la dirección de retorno en la pila, es decir, la dirección de la instrucción que sigue al CALL, de manera que al terminarse la ejecución del procedimiento, el programa que lo llamó pueda continuar ejecutándose.

CALL nombre del procedimiento

Los CALL pueden ser cercanos o lejanos.

Los cercanos utilizan 16 bits, lo que les permite “saltar” en un rango de -32KB a +32KB. Se usan en ensambladores 8086 a 80286.

Los lejanos utilizan 32 bits y pueden “saltar” en un rango de -2GB a +2GB. Se utilizan en en esmbladores 80386 o posteriores.

Ejemplo de un programa principal llamando a un procedimiento:

; Programa principal

Instrucciones del programa principal

CALL nombre ;El procesador guarda en pila a IP* y Coloca en

IP el desplazamiento correspondiente al procedimiento

Instrucciones del programa principal

*Si es NEAR, guarda solo el offset, si es FAR, guarda la dirección completa.

PROC

Es una directiva que indica donde inicia el procedimiento, su formato es:

nombre PROC tipo

Tipos.

1. Los locales (PROC NEAR), serán usados por una tarea específica

2. Los globales (PROC FAR), pueden ser usados por todo el software.

Notas:

-Si no se especifica tipo, se usa el default NEAR

-DOS inicia un programa llamando al programa principal, por ello, éste siempre es FAR

-PROC puede además utilizar la aseveración USES, que le permite definir qué registros serán almacenados en la pila antes de correr el procedimiento. Esos registros serán recuperados al terminar el procedimiento. Ejemplo:

Nombre PROC NEAR USES AX BX SI DI

ENDP

Es una directiva que indica donde termina el procedimiento

Nombre ENDP

Nótese que nombre de PROC y de ENDP deben ser el mismo.

Se recomienda que cada procedimiento salve y recupere registros, por lo que debe usar PUSHA al principio y POPA al final.

RET

Permite que el programa principal vuelva al procedimiento que lo llamó (DOS) o bien

Permite que los procedimientos secundarios vuelvan al procedimiento que los llamó (programa principal)

Es una instrucción que recupera la dirección de retorno de la pila para que el programa pueda seguir ejecutándose a partir de la instrucción que sigue a CALL. Se inserta antes de ENDP, su formato es:

RET

Un retorno cercano (local) recupera 16 bits de la pila y los coloca en el IP.

Un retorno lejano (global) recupera 32 bits de la pila y los coloca en IP y CS.

Ejemplo de un procedimiento llamado por el programa principal:

nombre PROC NEAR USES AX, BX, DX

(puede ser FAR)

PUSHA

Instrucciones

del

procedimiento

POPA

RET

Nombre ENDP

(el mismo)

CALL puede también usar direccionamiento indirecto. CALL WORD PTR [BX]

(el apuntador PTR más WORD indica el tipo de contenido de la dirección de memoria [BX])

Ejemplo de CALL indirecto cercano*:

LEA BX,DIR1 ;DIR1 contiene la dirección del procedimiento NEAR

CALL WORD PTR [BX] ;WORD = solo un offset como dirección.

*Previamente, debimos haber declarado un dato llamado DIR1, que contendrá la dirección del procedimiento a llamar:

DIR1 DW nombre del Proc. NEAR ;DW: queremos solo el offset.

Ejemplo de CALL indirecto lejano*:

LEA BX,DIR2 ;DIR2 contiene la dirección del Proc. FAR

CALL DWORD PTR [BX] ;DWORD = un offset y un Seg. como Dir.

*Previamente, debimos haber declarado un dato llamado DIR2, que contendrá la dirección del procedimiento a llamar:

DIR2 DD nombre del Proc. FAR ;DD: queremos offset y segm.

PASO DE PARÁMETROS

Los procedimientos en lenguaje ensamblador no cuentan con un mecanismo para el paso de parámetros; por esto, la única forma de lograrlo es colocando los parámetros que nos interesan en los registros de propósito general antes de que el procedimiento sea ejecutado.

Existen varias maneras de pasar parámetros del programa principal al procedimiento y viceversa:

1. A través de registros (cuando los parámetros son pocos):

Parámetros de entrada: El programa principal coloca los parámetros en registros específicos que luego serán utilizados por el procedimiento.

Parámetros de salida: El procedimiento es quien coloca los parámetros en registros, el programa principal los utilizará. Tener cuidado de hacerlo entre el POPA y el RET.

2. A través de la pila (cuando hay muchos parámetros):

No es muy recomendado, pues se debe tener cuidado de no interferir con PUSHA y POPA y sobre todo, con la actividad automática del CALL y del RET de empujar y sacar la dirección de retorno. El procedimiento termina siendo muy complicado.

3. A través del registro BP (cuando hay muchos parámetros):

Lo primero es guardar los parámetros en pila (desde el programa principal):

PUSH PARAMETRO1

PUSH PARAMETRO2

. . .

PUSH PARAMETRO7

CALL nombre

Nombre PROC

Una vez dentro del procedimiento, copiamos el TOS en BP:

MOV BP,SP

PUSHA

; Dado que el CALL usó los dos últimos bytes de la pila para guardar la dirección de retorno, nuestros parámetros estarán en:

MOV AX, [BP+16] ;PARAMETRO1

MOV BX, [BP+14] ;PARAMETRO2

. . . ;Todos los registros menos BP

MOV SI, [BP+4] ;PARAMETRO6

MOV DI, [BP+2] ;PARAMETRO7

Los parámetros de salida del procedimiento no se pueden meter en pila, pues empujarían la dirección de retorno, pero podemos simplemente modificarlos mediante

...

Descargar como (para miembros actualizados) txt (20 Kb)
Leer 13 páginas más »
Disponible sólo en Clubensayos.com