‘’‘Definición de procedimiento Un procedimiento es un conjunto de instrucciones a los que podemos dirigir el flujo de nuestro programa, y una vez terminada la ejecución de dichas instrucciones se devuelve el control a la siguiente linea a procesar del código que mando llamar al procedimiento. Un procedimiento se declara una sola vez en el código fuente y cuando el programa se ensambla y ejecuta, el procedimiento se coloca en memoria para que pueda ser utilizado por el programa. Los procedimientos nos ayudan a crear programas legibles y fáciles de modificar. 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 linea siguiente del programa original (el que llam— al procedimiento). Sintaxis de un procedimiento Existen dos tipos de procedimientos, los intrasegmentos, que se encuentran en el mismo segmento de instrucciones y los intersegmentos que pueden ser almacenados en diferentes segmentos de memoria. Cuando se utilizan los procedimientos intrasegmentos se almacena en la pila el valor de IP y cuando se utilizan los intersegmentos se almacena el valor CS:IP Para desviar el flujo a un procedimiento (llamarlo) se utiliza la directiva: CALL Nombre Del Procedimiento Las partes que componen a un procedimiento son: • Declaración del procedimiento • código del procedimiento • Directiva de regreso • Terminación del procedimiento Por ejemplo, si queremos una rutina que nos sume dos bytes, almacenados en AH y AL cada uno y guardar la suma en el registro BX: Suma Proc Near ;Declaración del procedimiento Mov Bx, 0 ;Contenido del procedimiento Mov Bl, Ah Mov Ah, 00 Add Bx, Ax Ret ;Directiva de regreso Suma Endp ;Declaración de final del procedimiento En la declaración la primera palabra, Suma, corresponde al nombre de nuestro procedimiento, Proc lo declara como tal y la palabra Near le indica al MASM que el procedimiento es intrasegmento. La directiva Ret carga la dirección IP almacenada en la pila para regresar al programa original, por último, la directiva Suma Endp indica el final del procedimiento. Para declarar un procedimiento intersegmento sustituimos la palabra Near por la palabra FAR. El llamado de este procedimiento se realiza de la siguiente forma: Call Suma Las macros ofrecen una mayor flexibilidad en la Programación comparadas con los procedimientos, pero no por ello se dejarán de utilizar estos últimos.

Las principales ventajas en el uso de procedimientos son: permiten una codificación más limpia y compacta, es decir el código fuente es más pequeño; también permiten el ahorro de memoria, esto es porque un mismo procedimiento puede ser llamado varias veces en el mismo programa y sólo requiere memoria una vez.

Los procedimientos tienen la desventaja de que reducen la velocidad de ejecución de los programas, esto se debe a la forma en que los procedimientos se ejecutan. A continuación se presentan los pasos necesarios para ejecutar un procedimiento:

1.- Se encuentra la llamada Call 2.- El microprocesador almacena en la Pila el contenido del IP 3.- Se coloca en el IP el valor del desplazamiento correspondiente al Procedimiento 4.- El microprocesador ejecuta las instrucciones del procedimiento 5.- El procedimiento termina cuando se encuentra la instrucción Ret 6.- Se saca de la pila el valor original del IP y se continua el flujo del programa Un procedimiento se declara de la siguiente forma: PROC nombre instrucción instrucción …. RET ENDP NOMBRE En donde PROC es una palabra reservada que indica el inicio de un procedimiento, RET es una instrucción que indica la terminación del conjunto de instrucciones de un procedimiento y finalmente ENDP es la palabra reservada para fin de procedimiento. Paso de parámetros Los procedimientos en lenguaje ensamblador no cuentan con un mecanismo para el paso de parámetros; por lo cual, la única forma de lograr esto es colocando los parámetros que nos interesan en los registros de propósito general antes de que el procedimiento sea ejecutado. Llamada a procedimientos Los procedimientos son llamados por los programas por medio de la instrucción CALL, seguida del nombre del procedimiento. Ejemplo: Call Goto XY? Procedimientos internos Los procedimientos internos son aquellos que se declaran y se llaman dentro del mismo programa, también son llamados procedimientos locales. El listado anterior muestra la forma de utilizar procedimientos internos. Procedimientos externos Los procedimientos externos, a diferencia de los internos, 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 tres directivas de ensamble: .PUBLIC para declarar los procedimientos como públicos, .EXTERN para indicar que el procedimiento que se va a usar está fuera del programa y .INCLUDE para enlazar el programa que contiene los procedimientos con el programa que los llama. Con estas capacidades, es fácil crear bibliotecas de procedimientos y macros que puedan ser utilizados constantemente por los demás programas, ahorrando con ello tiempo de programación al reutilizar código fuente.

El segmento de código contiene el código ejecutable de un programa. También tiene uno o mas procedimientos, definidos con la directiva PROC. Un segmento que tiene solo un procedimiento puede aparecer como sigue:

          NOMBRE            OPERACION        OPERANDO        COMENTARIO 
            nomsegmento      SEGMENT            PARA 
            nomproc                PROC                    FAR                  ;Un 
                                               .                                                     ;procedimiento 
                                               .                                                     ;dentro 
                                               .                                                     ;del segmento 
            nomproc                  ENDP                                             ;de código 
            nomsegmento        ENDS 

El nombre del procedimiento debe estar presente, ser único y seguir las reglas para la formación de nombres del lenguaje. El operando far en este caso esta relacionado con la ejecución del programa. Cuando usted solicita la ejecución de un programa, el cargador de programas del DOS utiliza este nombre de procedimiento como el punto de entrada para la primera instrucción a ejecutar. La directiva ENDP indica el fin de un procedimiento y contiene el mismo nombre que el enunciado PROC para permitir que el ensamblador relacione a los dos. Ya que los procedimientos deben estar por completo dentro de un segmento, ENDP define el final de un procedimiento antes que ENDS defina el final de un segmento. La organización de un programa en procedimientos proporciona los beneficios siguientes: 1. Reduce la cantidad de código, ya que un procedimiento común puede ser llamado desde cualquier lugar en el segmento de código. 2. Fortalece la mejor organización del programa. 3. Facilita la depuración del programa, ya que los errores pueden ser aislados con mayor claridad. 4. Ayuda en el mantenimiento progresivo de programas, ya que los procedimientos son identificados de forma rápida para su modificación.

Operaciones CALL y RET La instrucción CALL transfiere el control a un procedimiento llamado, y la instrucción RET regresa del procedimiento llamado al procedimiento original que hizo la llamada. RET debe ser la ultima instrucción en un procedimiento llamado. Los formatos generales para CALL y RET son:

El código objeto particular que CALL y RET generan depende de si la operación implica un procedimiento NEAR (cercano) o un procedimiento FAR (lejano).

Llamada y regreso cercanos. Una llamada (CALL) a un procedimiento dentro del mismo segmento es cercana y realiza lo siguiente:

• Disminuye el SP en 2 (una palabra) • Mete el IP (que contiene el desplazamiento de la instrucción que sigue al CALL) en la pila. • Inserta la dirección del desplazamiento del procedimiento llamado en el IP (esta operación vacía el resultado de la instrucción previamente procesada), Un RET que regresa desde un procedimiento cercano realiza lo siguiente:

• Saca el antiguo valor de IP de la pila y lo envía al IP (lo cual también vacía el resultado de la instrucción previamente procesada). • Incrementa el SP en 2. Ahora el CS:IP apunta a la instrucción que sigue al CALL original en la llamada del procedimiento, en donde se reasume la ejecución. Llamada y regreso lejanos. Una llamada (CALL) lejana llama a un procedimiento etiquetado con FAR, tal vez en un segmento de código separado. Un CALL lejano mete a la pila al CS y al IP, y RET los saca de la pila.

’Emphasized


Google