PROCEDIMIENTOS
Enviado por farelo • 16 de Junio de 2013 • Tesis • 3.281 Palabras (14 Páginas) • 278 Visitas
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
...