Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

51
Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS

Transcript of Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Page 1: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 1© Jaime Alberto Parra Plaza

CLASE 15

MACROS Y

PROCEDIMIENTOS

Page 2: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 2© Jaime Alberto Parra Plaza

Una de las claves para poder solucionar un problema complejo está en la capacidad de fragmentarlo en subproblemas.

En la medida en que los subproblemas sean correctamente identificados, la solución será mejor que otras posibles.

Page 3: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 3© Jaime Alberto Parra Plaza

En programación hay disponibles, en primera instancia, dos herramientas para ayudar a hacer esta fragmentación:

• una es provista por el microprocesador (los procedimientos)

• otra por el ensamblador (las macros).

Page 4: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 4© Jaime Alberto Parra Plaza

MACROS:Al familiarizarse con las interrupciones se

descubre que la interacción con ellas se realiza normalmente siguiendo tres labores:

• Paso de parámetros

• Llamado

• Recepción de resultados

Page 5: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 5© Jaime Alberto Parra Plaza

1) Ubicar en ciertos registros la información requerida por la interrupción (paso de parámetros)

2) Invocar a la interrupción (llamada)

3) Tomar los resultados entregados de los registros correspondientes (valores retornados)

Sería deseable disponer de un mecanismo para automatizar esta labor y eso es precisamente lo que hace una macro.

Page 6: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 6© Jaime Alberto Parra Plaza

Una macro es una utilidad que brinda el ensamblador y que permite insertar un trozo de código en una posición cualquiera de un programa, escribiendo en tal posición una palabra que representa el código mencionado.

Además, la macro permite la recepción de parámetros, lo cual simplifica el llamado a interrupciones y a procedimientos.

DEFINICIÓN DE MACRO:

Page 7: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 7© Jaime Alberto Parra Plaza

DECLARACION:

nombre MACRO [parámetros]

; cuerpo de la macro

ENDM

nombre es el identificador que representa a la macro. Las palabras reservadas MACRO y ENDM marcan los límites de la definición. Se puede colocar, opcionalmente, una lista de parámetros para que la macro reciba y/o entregue información.

Page 8: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 8© Jaime Alberto Parra Plaza

Ejemplo:

Se sabe ya que para escribir un carácter en la pantalla se usa el siguiente esquema:

MOV AH, 02H

MOV DL, carácter

INT 21H

Page 9: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 9© Jaime Alberto Parra Plaza

A través de una macro quedaría así: Putch MACRO CharVar

MOV AH, 02HMOV DL, CharVar INT 21HENDM ; fin de la macro Putch

Observe que la “variable” CharVar es en realidad un comodín que se usa para representar lo que debe ir en la segunda línea de la macro, no es una variable que exista físicamente.

Page 10: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 10© Jaime Alberto Parra Plaza

Una vez declarada la macro, lo cual debe hacerse al comienzo del programa, se invoca simplemente colocando su nombre y añadiendo, si es el caso, los parámetros correspondientes.

A continuación se muestra un programa de ejemplo:

Page 11: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 11© Jaime Alberto Parra Plaza

MOV AL, A

Putch AL ; pueden pasarse registros

Putch 5 ; pueden pasarse constantes

Putch var8 ; pueden pasarse variables

LEA SI, var8

Putch [SI] ; pueden pasarse punteros

Page 12: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 12© Jaime Alberto Parra Plaza

Es importante aclarar que una macro NO REDUCE el tamaño del programa, es sólo una utilidad que brinda el ensamblador.

Cuando el ensamblador procesa un programa, usualmente realiza tres pasadas sobre él:

Page 13: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 13© Jaime Alberto Parra Plaza

Primera pasada: cambia las constantes por sus valores reales y expande las macros por el código que representan.

Segunda pasada: traduce cada instrucción por su código binario equivalente y va creando una tabla donde almacena las direcciones que corresponden a cada etiqueta.

Tercera pasada: remplaza las referencias a etiquetas que han quedado pendientes por sus valores, según la tabla creada.

Page 14: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 14© Jaime Alberto Parra Plaza

De acuerdo con lo dicho, el siguiente programa es IDÉNTICO al ejemplo mencionado anteriormente:

MOV AL, AMOV AH, 02HMOV DL, ALINT 21H

MOV AH, 02HMOV DL, 5INT 21H

... < sigue > ...

Page 15: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 15© Jaime Alberto Parra Plaza

... < viene > ...

MOV AH, 02HMOV DL, var8INT 21H

LEA SI, var8MOV AH, 02HMOV DL, [SI]INT 21H

Page 16: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 16© Jaime Alberto Parra Plaza

En suma, se establece para los macros que:

1. Son sólo una utilidad que le ahorra al programador tiempo, al poder remplazar con una sola palabra una secuencia de instrucciones.

2. Permiten que un programa sea más comprensible.

3. Por su propia naturaleza, no deben ser muy grandes. Se sugiere que tengan, máximo, 15 líneas de código.

Page 17: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 17© Jaime Alberto Parra Plaza

El uso de los macros se recomienda en estas situaciones:

1. Para llamar interrupciones y procedimientos, facilitando el paso de parámetros y la recepción de valores retornados

2. Para darle un nombre significativo a un código que, aunque aparezca sólo una vez, realiza algún trabajo importante o poco claro

Page 18: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 18© Jaime Alberto Parra Plaza

Ejemplo del segundo caso:

Empezar MACROMOV AX, DATA MOV DS, AXMOV ES, AXENDM ; fin de Empezar

Esta macro busca darle sentido a las primeras líneas que usualmente inician un programa típico en ensamblador.

Page 19: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 19© Jaime Alberto Parra Plaza

MACROS NO SON PROCS:

Dado que las macros NO son procedimientos o funciones no deben tener etiquetas ni saltos dentro de ellas, en particular, NUNCA utilice la opción LOCAL que permiten algunos ensambladores.

Page 20: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 20© Jaime Alberto Parra Plaza

Debe tenerse un cuidado mínimo con los parámetros que se entregan a una macro.

Las principales causas de problemas al interactuar con una macro tienen que ver con la discrepancia entre los argumentos y los parámetros en cuanto a:

• El orden en que se pasan

• El tipo que se utiliza

• El valor de los argumentos se alteradentro de la macro

Page 21: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 21© Jaime Alberto Parra Plaza

Para el ejemplo dado, observe estos casos:

MOV AH, ‘L’Putch AH

MOV BX, 102Putch BX

El primer caso falla porque al empezar la macro, el valor de AH se cambia por 02H, así que la ‘L’ entregada se pierde. En el segundo caso, el registro BX no se corresponde en tamaño con el registro DL que es quien recibe el parámetro.

Page 22: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 22© Jaime Alberto Parra Plaza

PROCEDIMIENTOS:

Un procedimiento actúa como un servicio de interrupción, pero tiene frente a él dos diferencias importantes:

• Usualmente es creado sólo para solucionar un problema particular en el programa de usuario

• No se invoca con la orden INT sino con la instrucción CALL.

Page 23: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 23© Jaime Alberto Parra Plaza

Desde el punto de vista físico cuando el uP detecta una orden

CALL Etiqueta

Procede de una forma similar a cuando se encuentra con una orden INT: Guarda en la pila el valor de IP (y CS si es un llamado lejano) y carga en este registro el valor indicado por Etiqueta. Los flags no son guardados en esta operación.

Page 24: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 24© Jaime Alberto Parra Plaza

SINTAXIS SOBRE PROCEDIMIENTOS:

Para invocar un procedimiento, se utiliza la orden Call, que requiere como operando la dirección de inicio del procedimiento, la cual usualmente se da en forma de etiqueta, mediante el propio nombre del procedimiento:

CALL NombreProc

Page 25: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 25© Jaime Alberto Parra Plaza

Para crear un procedimiento, se declara en la forma:

NombreProc PROC [Opciones]

; cuerpo del procedimiento

RET ; fin del procedimiento

NombreProc ENDP

Page 26: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 26© Jaime Alberto Parra Plaza

Las opciones pueden ser: NEAR o FAR. Un procedimiento tipo near sólo puede ser invocado desde dentro del segmento en el cual él existe. Si es de tipo far podrá ser invocado desde cualquier otro procedimiento, esté o no en el mismo segmento.

Page 27: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 27© Jaime Alberto Parra Plaza

El fin del procedimiento (y retorno al lugar de llamado) se hace con la orden RET. Aunque puede existir más de una orden RET en un procedimiento, la programación estructurada sugiere colocar uno solo y que sea justamente la última instrucción del procedimiento. Si hay más de un punto de retorno en el código, simplemente se coloca un salto hacia esa última instrucción.

Page 28: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 28© Jaime Alberto Parra Plaza

ALCANCE DE LOS SALTOS CONDICIONALES:

• Cuando se realizan ciclos (del tipo for, while o do) es importante tener en cuenta que los saltos condicionales tienen un alcance MÁXIMO de 128 bytes. Si el ciclo es mayor a este valor es una indicación de mala programación.

Page 29: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 29© Jaime Alberto Parra Plaza

ALCANCE DE LOS SALTOS CONDICIONALES:

• Una solución temporal a este problema consiste en ubicar todo o parte del cuerpo del ciclo en un procedimiento.

Page 30: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 30© Jaime Alberto Parra Plaza

PASO DE PARÁMETROS:

No existe un mecanismo prefijado por el microprocesador para el paso de parámetros a un procedimiento (tal como decir call nomproc parámetros). Por ello, el programador debe escoger entre las posibilidades que se han desarrollado o una ideada por él mismo.

Page 31: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 31© Jaime Alberto Parra Plaza

Las formas tradicionales son:

• A través de registros

• Mediante la pila

La primera tiene la ventaja de permitir intercambio rápido de información, pero a costa de no ser un mecanismo estandarizado; la segunda si es estandarizada, pero tiene por falencia su lentitud.

Page 32: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 32© Jaime Alberto Parra Plaza

EJEMPLOS DE PROCEDIMIENTOS:

Para visualizar mejor estas ideas se darán por ejemplo de procedimientos aquéllos para lectura y escritura de cadenas, que se utilizan en conjunto con sus macros respectivas, lo cual es usual para sistematizar el paso de parámetros desde el procedimiento llamador hacia el procedimiento llamado.

Page 33: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 33© Jaime Alberto Parra Plaza

LECTURA DE CADENA:

Se empieza por describir la macro que actúa como parte pública o interfaz con el exterior. En esencia, la macro se encarga se ubicar los parámetros en el sitio en donde el procedimiento supone que estarán (registros o pila). También, se encarga de salvar el valor de los registros que pudiesen ser cambiados por el procedimiento:

Page 34: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 34© Jaime Alberto Parra Plaza

Gets MACRO MaxChar, InString; Primero: preservar registros actuantes

PUSH CXPUSH SI

; Segundo: cargar parámetrosMOV CL, MaxCharLEA SI, InString

; Tercero: invocar el procedimientoCALL pGets

; Cuarto: restaurar registros usadosPOP SIPOP CX

ENDM ; Gets

Page 35: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 35© Jaime Alberto Parra Plaza

Ahora se trabajará con el procedimiento, el cual hace la tarea como tal. El nombre del procedimiento puede ser similar al de la macro, el instructor recomienda esta nomenclatura:

Para la macro: Nombre

Para el procedimiento: pNombre

Es decir, preceder el nombre del procedimiento con una letra ‘p’.

Page 36: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 36© Jaime Alberto Parra Plaza

El procedimiento a su vez hace uso de las macros Getch (Int. 21H, Servicio 08H) y Putch (Int. 21H, Servicio 02H) para leer y escribir caracteres. Se asume, además, que se han declarado las constantes:

CR EQU 13 ; retorno de carro

BS EQU 8 ; retroceso

BEEP EQU 7 ; pitido

NULL EQU 0 ; nulo

Page 37: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 37© Jaime Alberto Parra Plaza

Para facilitar la comprensión de un procedimiento se acostumbra colocar al comienzo comentarios que indiquen:

; nombre: < del procedimiento > ; propósito: < labor que hace > ; prototipo: < declaración equivalente en C >; entrada: < registros que reciben ...

... parámetros >; salida: < registros que entregan ...

... resultados >; registros: < otros registros utilizados >

Page 38: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 38© Jaime Alberto Parra Plaza

; nombre: pGets; propósito: Leer desde teclado una cadena; ASCIIZ (tamaño máximo de ; 255 caracteres); prototipo: unsinged pGets (unsigned, char *);; entrada: CL = Número máximo de ; caracteres a leer; SI = puntero a la variable ; cadena receptora; salida: BL = número de caracteres leídos; registros: AX, DL

Page 39: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 39© Jaime Alberto Parra Plaza

pGets PROCPUSH AXPUSH DX

MOV BX, 0 ; BX=cuenta cars. DO90:

Getch AL ; leer un caracter SWITCH90:CASE91:

CMP AL, CRJE ENDSWITCH90

Page 40: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 40© Jaime Alberto Parra Plaza

CASE92:CMP AL, BSJNE DEFAULT90

IF90:CMP BL, 0JBE ELSE90

THEN90:DEC BLPutch BS ; borrar último ...Putch ' ' ; ... carácter ...Putch BS ; ... escritoJMP ENDIF90

Page 41: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 41© Jaime Alberto Parra Plaza

ELSE90: Putch BEEP ; error de edición

ENDIF90: JMP ENDSWITCH90

DEFAULT90:IF91:

CMP BL, CLJAE ELSE91

Page 42: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 42© Jaime Alberto Parra Plaza

THEN91: MOV [SI][BX], ALINC BLPutch AL ; escribir el carácterJMP ENDIF91

ELSE91: Putch BEEP ; máximo alcanzado

ENDIF91:ENDSWITCH90:

Page 43: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 43© Jaime Alberto Parra Plaza

WHILE90: CMP AL, CRJNE DO90

ENDWHILE90: ; colocar final de cadena

MOV BYTE PTR [SI][BX], NULLPOP DXPOP AXRET

pGets ENDP

Page 44: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 44© Jaime Alberto Parra Plaza

ESCRITURA DE CADENA:

El proceso aquí es mucho más simple. Simplemente se leen caracteres de una variable existente hasta encontrar el carácter terminador NULO.

Como en el caso anterior, se presenta primero la macro y después el procedimiento respectivo.

Page 45: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 45© Jaime Alberto Parra Plaza

Puts MACRO OutString

PUSH SILEA SI, OutStringCALL pPutsPOP SI

ENDM ; Puts

Page 46: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 46© Jaime Alberto Parra Plaza

; nombre: pPuts; propósito: Escribir en pantalla una; cadena ASCIIZ; prototipo: void pPuts ( char * );; entrada: SI = puntero a la cadena; salida: Ninguna; registros: AH, DL

Page 47: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 47© Jaime Alberto Parra Plaza

pPuts PROCPUSH AXPUSH DX

WHILE92: CMP BYTE PTR [SI], NULLJE ENDWHILE92Putch [SI]INC SIJMP WHILE92

ENDWHILE92:POP DXPOP AXRET

pPuts ENDP

Page 48: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 48© Jaime Alberto Parra Plaza

RECOMENDACIONES:

• Es opcional preservar los registros que se usarán en una macro o procedimiento. Al hacerlo, se tiene la tranquilidad de que no se alterarán inadvertidamente sin que se tenga conocimiento de ello fuera de la macro o del procedimiento. Su desventaja es que aumenta el tamaño del código y el tiempo de ejecución

Page 49: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 49© Jaime Alberto Parra Plaza

• Por razón similar, nunca deben usarse variables globales dentro de una macro o procedimiento, si se requieren, se pasarán como parámetros o mediante un puntero

• Usar solamente una instrucción RET por procedimiento y ubicarla como instrucción final

Page 50: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 50© Jaime Alberto Parra Plaza

PREGUNTA 15:

¿Cómo funciona el uso de caracteres comodines dentro de las macros y qué utilidad tienen?.

Page 51: Pbn - 15 - 1 © Jaime Alberto Parra Plaza CLASE 15 MACROS Y PROCEDIMIENTOS.

Pbn - 15 - 51© Jaime Alberto Parra Plaza

< FIN DE LA CLASE 15 >