Clase 5 - 6. Procedimientos y Macros
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