Clase 5 - 6. Procedimientos y Macros

download Clase 5 - 6. Procedimientos y Macros

of 18

Transcript of Clase 5 - 6. Procedimientos y Macros

  • 8/17/2019 Clase 5 - 6. Procedimientos y Macros

    1/18

    10/05/20

    PROCEDIMIENTOS Y MACROS

    INTRODUCCIÓN

    Una de las principales desventajas de la programación en lenguaje ensambladores la repetición constante de ciertos grupos de instrucciones. Por ejemplo elsiguiente conjunto de instrucciones nos permite imprimir una variable de tipocadena en la pantalla:

    Lea DX,Cadena ;Direccionar la cadena

    Mov AH,09h ;función 09h para imprimir cadenas

    Int 21h ;llamada a la interrupción 21h del DOS

  • 8/17/2019 Clase 5 - 6. Procedimientos y Macros

    2/18

    10/05/20

    PROGRAMACIÓN MODULAR

    El diseño modular es una de las piedras angulares de la programaciónestructurada.

    Un programa modular contiene bloques de código con puntos de entrada y desalida individuales. Es posible volver a utilizar secciones de código bien escritasen otros programas o en otras secciones de un programa existente. Si sereutiliza un segmento de código existente, no es necesario diseñar, código, nidepurar esa sección de código ya que (presumiblemente) se ha hecho ya

    PROCEDIMIENTOS

    La unidad básica de un ambiente procedural es el procedimiento

    Un Procedimiento es una parte de código que puede ser llamada desde unprograma con el fin de realizar alguna tarea específica. Los procedimientos hacenel programa más estructural y más fácil de entender. Generalmente un

    procedimiento vuelve al mismo punto desde donde fue llamado.

    Un procedimiento se declara una sola vez en el código fuente y cuando elprograma se ensambla y ejecuta, el procedimiento se coloca en memoria paraque pueda ser utilizado por el programa

  • 8/17/2019 Clase 5 - 6. Procedimientos y Macros

    3/18

    10/05/20

    VENTAJAS

    Las principales ventajas en el uso de procedimientos son: permiten unacodificació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 mismoprocedimiento puede ser llamado varias veces en el mismo programa y sólorequiere memoria una vez.

    DESVENTAJAS

    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 procedimientosse ejecutan

  • 8/17/2019 Clase 5 - 6. Procedimientos y Macros

    4/18

    10/05/20

    SINTAXIS DECLARACIÓN DE UN

    PROCEDIMIENTOname PROC

    ; aqui va el código; de el procedimiento...

    RETname ENDP

    Name es el nombre del procedimiento

    La instrucción RET es usada para retornar de un procedimiento de tipo near PROC y ENDP son directivas para que el compilador recuerde la dirección del

    procedimiento

    INSTRUCCIÓN CALL

    Transfiere el control a un procedimiento, la dirección de retorno (IP) esempujada a la pila.

    Sintaxis

    CALL operando

    Asume que el operando se encuentra en el mismo segmento de codigo, el operandoes el nombre del procedimiento

  • 8/17/2019 Clase 5 - 6. Procedimientos y Macros

    5/18

    10/05/20

    PASOS EN LA EJECUCIÓN DE 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 alProcedimiento

    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

    EJEMPLO

    CALL mm1

    MOV AX, 2

    JMP salir ; go to the end of program.

    mm1 PROC

    MOV BX, 5RET ; return to caller.

    mm1 ENDPD

    The above example calls procedure m1, does MOV BX, 5, and returns to the nextinstruction after CALL: MOV AX, 2.

  • 8/17/2019 Clase 5 - 6. Procedimientos y Macros

    6/18

    10/05/20

    SUGERENCIAS PARA EL DISEÑO MODULAR Guardar en el stack y restaurar todos los registros que se modificaran dentro

    del procedimiento, excepto aquellos en los que se devolverán valores por elprocedimiento.

    Ser consistente acerca de que registros se utilizaran para pasar información a unprocedimiento, por ejemplo:

    DL,DX - Mandar valores, bytes y palabras.

    AL,AX - Regresar valores, bytes y palabras.

    BX:AX - Regresar valores, palabras dobles.

    CX - Contadores, o repetidores.

    OTRAS CARACTERÍSTICAS

    Los procedimientos siempre estarán en el segmento de código y la últimainstrucción del mismo será la de retorno RET para la familia del 8086.

    Si el procedimiento va a ser llamado desde otro segmento de código, se deberádeclarar de tipo FAR, pudiéndose especificar NEAR o no en caso contrario.

    En la fase de ensamblado, automáticamente se sustituye la instrucción RET porRETF si el procedimiento es lejano.

    La llamada a un procedimiento se hace de a través de la instrucción CALL:

    call nombre_proc

  • 8/17/2019 Clase 5 - 6. Procedimientos y Macros

    7/18

    10/05/20

    EJEMPLO

    Crear un procedimiento para imprimir cadenas

    Crear un procedimiento para pedir cadenas

    Crear un procedimiento que eleve un numero a un potencia

    Proc.asm

    Proc2.asm

    EJERCICIOS

    Realice los ejercicios de la clase anterior utilizando procedimientos

  • 8/17/2019 Clase 5 - 6. Procedimientos y Macros

    8/18

    10/05/20

    LA PILA

    La Pila es un área de memoria para guardar los datos temporales. La Pila esutilizada por la instrucción CALL para mantener la dirección de retorno para unprocedimiento, la instrucción RET obtiene este valor de la pila y vuelve aldesplazamiento. También podemos utilizar la pila para guardar cualquier otrodato

    INSTRUCCIONES PUSH Y POP

    PUSH - almacena valores de16 bit en la pila

    POP - Obtiene valores de 16 bit de la pila.

    Sintaxis

    PUSH operand

    POP operand

    Donde el operando generalmente es un registro a guardar u obtener

  • 8/17/2019 Clase 5 - 6. Procedimientos y Macros

    9/18

    10/05/20

    USO DE LA PILA La pila utiliza el algoritmo LIFO(Last In First Out)

    Es importante realizar el mismo numero de PUSHs y POPs

    de lo contrario la pila podría verse corrupta y sería imposible

    retornar el control al sistema operativo

    PUSH y POP son muy útiles debido a que no tenemos muchos

    registros para operar, por ello podemos hacer los siguiente

    1. Almacenar el valor original del registro en la pila

    2. Usar el registro para cualquier propósito3. Restaurar el valor original del registro desde la pila usando POP

    EJEMPLO

    ORG 100h

    MOV AX, 1234h

    PUSH AX ; store value of AX in stack.

    MOV AX, 5678h ; modify the AX value.

    POP AX ; restore the original value of AX.

    RET

    END

  • 8/17/2019 Clase 5 - 6. Procedimientos y Macros

    10/18

    10/05/20

    INTERCAMBIANDO VALORESORG 100h

    MOV AX, 1212h ; store 1212h in AX.

    MOV BX, 3434h ; store 3434h in BX

    PUSH AX ; store value of AX in stack.

    PUSH BX ; store value of BX in stack.

    POP AX ; set AX to original value of BX.

    POP BX ; set BX to original value of AX.

    RET

    END

    EJEMPLO

    Pasar por la pila los valores capturados en el programa de calculo de potencia

    Proc3.asm

  • 8/17/2019 Clase 5 - 6. Procedimientos y Macros

    11/18

    10/05/20

    GUARDANDO EL ESTADO DE LA

    MAQUINA

    mov cx, 10

    Loop0: call PrintSpaces

    loop Loop0

    PrintSpaces proc near

    mov al, ‘ ‘

    mov cx, 40

    PSLoop: putc

    loop PSLoop

    ret

    PrintSpaces endp

    ¿Cual es elproblema en esta

    rutina?

    SOLUCIÓN

    mov cx, 10

    Loop0: call PrintSpaces

    loop Loop0

    PrintSpaces proc near

     push cx

    mov al, ‘ ‘

    mov cx, 40

    PSLoop: putc

    loop PSLoop

     pop cx

    ret

    PrintSpaces endp

  • 8/17/2019 Clase 5 - 6. Procedimientos y Macros

    12/18

    10/05/20

    MACROS

    Las macros son igual que los procedimientos, pero no realmente. Las macros separecen a los procedimientos, pero sólo existen hasta que se compila el código,después de la compilación todas las macros son reemplazadas con lasinstrucciones reales. Si se declaró una macro y nunca se utilizó en el código, elcompilador simplemente la ignorará. La macro emu8086.inc es un buen ejemplode cómo se pueden utilizar las macros, este archivo contiene varias macros parahacer la codificación más fácil de programar.

    DIRECTIVA INCLUDE

    Sustituye la directiva por el contenido del archivo (ala manera del #include de c)

  • 8/17/2019 Clase 5 - 6. Procedimientos y Macros

    13/18

    10/05/20

    DEFINICIÓN DE UNA MACRO

    name MACRO [parameters,...]

    ENDM

    Donde name es el nombre de la macro

    MACRO y ENDM son directivas que indican la dirección de memoria de la macro

    DIFERENCIA CON UN PROCEDIMIENTO

    A diferencia de los procedimientos, las macros deben definirse arriba del código quelo utiliza, por ejemplo:

    MyMacro MACRO p1, p2, p3

    MOV AX, p1

    MOV BX, p2

    MOV CX, p3

    ENDM

    ORG 100h

    MyMacro 1, 2, 3

    MyMacro 4, 5, DX

    RET

  • 8/17/2019 Clase 5 - 6. Procedimientos y Macros

    14/18

    10/05/20

    EL CÓDIGO ANTERIOR SE EXPANDE EN

    MOV AX, 00001h

    MOV BX, 00002h

    MOV CX, 00003h

    MOV AX, 00004h

    MOV BX, 00005h

    MOV CX, DX

    ALGUNOS DATOS IMPORTANTES ACERCA DELAS MACROS Y PROCEDIMIENTOS:

    Cuando se utiliza un procedimiento se debe usar la instrucción CALL, porejemplo: CALL MyProc

    Cuando se desea utilizar una macro, puede simplemente escribir su nombre. Porejemplo: MyMacro

  • 8/17/2019 Clase 5 - 6. Procedimientos y Macros

    15/18

    10/05/20

    ALGUNOS DATOS IMPORTANTES ACERCA DE

    LAS MACROS Y PROCEDIMIENTOS: Un Procedimiento se encuentra en alguna dirección específica en memoria, y si

    se utiliza el mismo procedimiento 100 veces, la CPU transferirá el control a estaparte de la memoria. El control será devuelto de nuevo al programa por lainstrucción RET. La pila se utiliza para guardar la dirección de retorno. Lainstrucción CALL toma alrededor de 3 bytes, por lo que el tamaño del archivoejecutable de salida crece muy insignificante, no importa cuántas veces se utilizael procedimiento.

    Una Macro se expande directamente en el código del programa. Así que si ustedusa los mismos macro 100 veces, el compilador expande las macros 100 veces,

    por lo que el archivo ejecutable de salida se hace más grande y más grande, cadavez que se insertan todas las instrucciones de una macro.

    ALGUNOS DATOS IMPORTANTES ACERCA DELAS MACROS Y PROCEDIMIENTOS:

    Se debe utilizar la pila o cualquier registro de propósito general para pasarparámetros a un procedimiento.

    Para pasar parámetros a una macro, pueden escribirse después del nombre de lamacro. Por ejemplo:

    MiMacro 1, 2, 3

    Para marcar el final de la directiva macro ENDM es suficiente.

    Para marcar el final del procedimiento, debe escribir el nombre delprocedimiento antes de la directiva ENDP.

  • 8/17/2019 Clase 5 - 6. Procedimientos y Macros

    16/18

    10/05/20

    DECLARACIONES DUPLICADAS

    Las macros se expanden directamente en el código, por lo tanto, si hay etiquetasdentro de la definición de la macro puede obtener error de"Declaraciones duplicadas“ cuando se utiliza la macro dos veces o más. Paraevitar tal problema, utilice la directiva LOCAL seguido de los nombres de lasvariables, etiquetas o nombres de procedimientos. Por ejemplo:

    EJEMPLO - DECLARACIONES DUPLICADAS

    MyMacro2 MACRO

    LOCAL label1, label2

    CMP AX, 2

    JE label1

    CMP AX, 3

    JE label2

    label1:

    INC AX

    label2:

    ADD AX, 2

    ENDM

    ORG 100h

    MyMacro2

    MyMacro2

    RET

  • 8/17/2019 Clase 5 - 6. Procedimientos y Macros

    17/18

    10/05/20

    ARCHIVOS EXTERNOS

    Si se tiene previsto utilizar las macros en varios programas, puede ser una buenaidea colocar todas las macros en un archivo separado. Coloque el archivo en lacarpeta Inc y el uso de directiva INCLUDE nombre de archivo para usar macros.

    Ver Biblioteca de funciones comunes - La macro emu8086.inc para un ejemplode tal archivo.

    EJEMPLO

    Crear una macro para imprimir una cadena

    Crear una macro para imprimir un carácter

    Crear un macro para elevar un numero a una potencia

    Macro.asm

    Libe.inc

  • 8/17/2019 Clase 5 - 6. Procedimientos y Macros

    18/18

    10/05/20

    EJERCICIOS

    Modificar la macro para imprimir una cadena, pero en lugar de usar el servicio 9con int 21h, utilizar el servicio 0Eh con int 10h

    Programa que encuentre un carácter en una cadena usando una macro, y quedevuelva la posición en AL