Você está na página 1de 8

3 PROCEDIMIENTOS Y MACROS

3.1 Programación Modular

Un mismo programa puede ser creado de muchas maneras distintas, dependiendo del estilo de
cada uno de los usuarios programadores. Sin lugar a duda, un buen programa no es solo aquel que
tiene un número reducido de líneas de código, sino también una buena organización y suficientes
comentarios descriptivos que expliquen qué es lo que ésta haciendo en cada parte del programa.

La programación modular y la programación estructurada, esta técnica consiste en dividir un


problema en distintos módulos con el fin de que cada uno realice una única actividad o tarea. De
esta manera cada uno de los módulos se analiza, codifican y ponen a punto por separado de los
demás módulos. Cada programa contiene un solo modulo principal que controla todo lo que
sucede.

3.2 La pila

Muchas CPU tienen soporte para una pila. La pila es un arca de memoria que está organizada de
esta manera. La instrucción PUSH añade datos a la pila y la instrucción POP quita datos. El dato
extraído siempre es el último dato insertado (esta es la razón por la cual es llamado FIFO).

push dword 1 ; 1 almacenado en 0FFCh, ESP = 0FFCh


push dword 2 ; 2 almacenado en 0FF8h, ESP = 0FF8h
push dword 3 ; 3 almacenado en 0FF4h, ESP = 0FF4h

pop eax ; EAX = 3, ESP = 0FF8h


pop ebx ; EBX = 2, ESP = 0FFCh
pop ecx ; ECX = 1, ESP = 1000h

La pila se puede usar como un almacén de datos temporal muy conveniente. También se usa para
el llamado a subprogramas, pasando parámetros y variables locales. El 80x86 también suministra la
instrucción PSHA que empuja el valor de los registros: EAX, EBX, ECX, EDX, ESI, EOI y EBP (no en
este orden). La instrucción POPA se puede usar para devolver todos estos registros a su
valor anterior.
3.3 Procedimientos
Para llamar a un procedimiento se realiza mediante las instruccines call y invoke. Las instrucción
tienen un operando que especifica el nombre del procedimiento a llamar. Cuando regresa del
procedimiento continúa la ejecución del programa en la siguiente línea de su llamado.

call pnombre o invoke pnombre

El nombre del procedimiento va en la primera línea seguida de la directiva proc, después va el


cuerpo del procedimiento, seguido de la instrucción ret (return en c)

pnombre proc

; cuerpo del procedimiento

Ret

pnombre endp

Las instrucciones proc y endp indican al ensamblador donde comienza y donde termina el
procedimiento, respectivamente. La instrucción ret función de manera similar que el return del
lenguaje c. La instrucción ret no puede retornar ningún valor, en un procedimiento se puede tener
más de un ret, todo dependerá de lo que se esté programando
Ejemplo

Convertir el siguiente código escrito en C a ensamblador


3.4 Macros
Una macro es un nombre simbólico que damos a una serie de caracteres o a una o más sentencias.
Cuando el ensamblador evalúa cada línea de un programa, si encuentra el nombre de una macro,
la sustituye por el texto de ésta en un proceso que se conoce como "expansión de una macro", por
lo que es evidente que se debería de procurar que las macros más utilizadas tengan el menor
código posible.

En la mayoría de las ocasiones utilizaremos las macros como simples sustitutos de los
procedimientos cumpliendo con las funciones de una simple subrutina, pero una macro es mucho
más que eso, realmente es un lenguaje hermano del ensamblador al que dota de mayor potencia,
usado para mecanizar acciones repetitivas.

3.4.1 Diferencia entre un procedimiento y una macro


Es que el primero es un bloque de sentencias que se encuentran localizadas en algún lugar
invariable de la memoria al que accedemos cada vez que la llamamos, mientras que una macro es
un conjunto de sentencias que se expanden en el lugar del código donde el compilador encuentra
su nombre como si allí los hubiéramos colocado manualmente. Por tanto el uso de procedimientos
optimiza el tamaño del código, mientras que el uso de macros optimiza la rapidez de éste, ya que
no es necesario meter en la pila el "IP" y recuperarlo posteriormente

3.5.2 Ventajas y desventajas del uso de macros.


Ventajas:

 Menor posibilidad de cometer errores por repetición.


 Mayor flexibilidad en la programación al permitir el uso de parámetros.
 Código fuente más compacto.
 Al ser más pequeño el código fuente, también es más fácil de leer por otros.

Desventajas:

El código ejecutable se vuelve más grande con cada llamada a la macro.

Las macros deben ser bien planeadas para evitar la redundancia de código.

3.4.3 Dónde y como declarar una MACRO


Las macros se definen al inicio de un programa, antes de .MODEL :

Sintaxis:

nombreMacro MACRO [parametros] ;Los parámetros son opcionales.

instrucciones...

ENDM ;Indica fin del macro.


Ejercicios Pendiente

1. Realizar un programa que utilice macro y/o procedimiento para realizar las 4 operaciones
básicas:
1) Suma
2) Resta
3) Multiplicación
4) División
5) Salir
Cual es su opción?:

2. El siguiente programa lee por teclado un año y calcula y muestra si es bisiesto. Para
realizar el cálculo utiliza un macro llamado bisiesto. La macro bisiesto recibe el año leído
por teclado, comprueba si es o no bisiesto y devuelve 1 si lo es ó 0 si no lo es.

3. Crea una aplicación que calcule el área de un circulo, cuadrado o triangulo. Se solicitará
que figura se desea calcular su área y según lo introducido pedirá los valores necesarios
para calcular el área. Crea un procedimiento por cada figura para calcular cada área, este
devolverá un número entero. Muestra el resultado por pantalla.

4. Realizar un programa que muestre el siguiente menú:


a) Factorial
b) Fibonacci
c) Sumatoria de 11+22+33+44+…nn
d) Fórmula general
e) Salir
Cual es su Opción?:

5. Realizar un menú que despliegue las siguientes opciones:


A) Triangulo
B) Árbol de Navidad Normal
C) Árbol de Navidad Invertido
D) Árbol transversal
E) Rectángulo o cuadrado
F) Todas de color diferente
G) Salir
Figura 1: Tipos de figuras
Cual es su opción?:

En las opciones 1,2 y 3 solo se solicita la altura, en la opción 4 se debe solicitar la anchura
y en la 5 se debe solicitar ambos datos, los resultados deber como se muestran en la figura
1.
6. Crear un procedimiento llamada ventana que reciba cuatro parámetros que serán
(x1,y1,x2,y2) y permitirán realizar una ventana con los símbolos ascii de la figura 2.

Figura 2: Tabla ascii

Você também pode gostar