CURSO DE ENSAMBLADOR POR LA UNIVERSIDAD DE GUADALAJARA

Parte VII


Procedimientos

  • Definición de procedimiento
  • Sintaxis de un procedimiento
  • Macros

  • Definición de una macro
  • Sintaxis de una macro
  • Bibliotecas de macros
  •  


     

     

    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.

    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 NombreDelProcedimiento

    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

    ; Contenido del procedimiento
    Mov Bx, 0
    Mov Bl, Ah
    Mov Ah, 00
    Add Bx, Ax

    ; Directiva de regreso
    Ret
    ; Declaración de final del procedimiento
    Suma Endp

    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.

     

     

     

    Definición de una macro

     

    Una macro es un grupo de instrucciones repetitivas en un programa que se codifican solo una vez y pueden utilizarse cuantas veces sea necesario.

    La principal diferencia entre una macro y un procedimiento es que en la macro se hace posible el paso de parámetros y en el procedimiento no (esto es aplicable solo para el MASM, hay otros lenguajes de programación que si lo permiten). Al momento de ejecutarse la macro cada parámetro es sustituido por el nombre o valor especificado al momento de llamarla.

    Podemos decir entonces que un procedimiento es una extensión de un determinado programa, mientras que la macro es un módulo con funciones específicas que puede ser utilizado por diferentes programas.

    Otra diferencia entre una macro y un procedimiento es la forma de llamar a cada uno, para llamar a un procedimiento se requiere el uso de una directiva, en cambio la llamada a las macros se realiza como si se tratara de una instrucción del ensamblador.

     

     

    Sintaxis de una macro

     

    Las partes que componen a una macro son:

    Declaración de la macro
    Código de la macro
    Directiva de terminación de la macro

    La declaración de la macro se lleva a cabo de la siguiente forma:

    NombreMacro MACRO [parametro1, parametro2...]

    Aunque se tiene la funcionalidad de los parametros es posible crear una macro que no los necesite.

    La directiva de terminación de la macro es: ENDM

    Un ejemplo de macro, para colocar el cursor en alguna posición determinada de la pantalla es:

     

     

    Posicion MACRO Fila, Columna
    PUSH AX
    PUSH BX
    PUSH DX
    MOV AH, 02H
    MOV DH, Fila
    MOV DL, Columna
    MOV BH, 0
    INT 10H
    POP DX
    POP BX
    POP AX
    ENDM

    Para utilizar una macro solo es necesario llamarla por su nombre, como si fuera una instrucción mas del ensamblador, ya no son necesarias las directivas como en el caso de los procedimientos. Ejemplo:

    Posicion 8, 6

     

     

     

    Bibliotecas de macros

     

    Una de las facilidades que ofrece el uso de las macros es la creación de bibliotecas, las cuales son grupos de macros que pueden ser incluidas en un programa desde un archivo diferente.

    La creación de estas bibliotecas es muy sencilla, unicamente tenemos que escribir un archivo con todas las macros que se necesitarán y guardarlo como archivo de texto.

    Para llamar a estas macros solo es necesario utilizar la instrucción Include NombreDelArchivo, en la parte de nuestro programa donde escribiriamos normalmente las macros, esto es, al principio de nuestro programa (antes de la declaración del modelo de memoria).

    Suponiendo que se guardó el archivo de las macros con el nombre de MACROS.TXT la instrucción Include se utilizaría de la siguiente forma:

    ;Inicio del programa
    Include MACROS.TXT
    .MODEL SMALL
    .DATA
    ;Aqui van los datos
    .CODE
    Inicio:
    ;Aqui se inserta el código del programa
    .STACK
    ;Se define la pila
    End Inicio
    ;Termina nuestro programa