Вы находитесь на странице: 1из 14

La modularizacin es la manera de partir un problema en pequeos problemas, de manera que se puedan resolver pequeos problemas ms fcilmente.

En Java la modularizacin se realiza teniendo clases que se encarguen del manejo de los objetos que correspondan a esa clase, a su vez, dentro de una clase, el uso de mtodos es importante para poder resolver un pequeo problema.

3.1.- Macros

Introduccin.
Para cada instruccin simblica que usted codifica, el ensamblador genera una instruccin de lenguaje de maquina. El ensamblador tiene facilidades que el programador puede utilizar para definir macros. Primero hay que definir un nombre especifico para la macro, junto con el conjunto de instrucciones en lenguaje ensamblador que la macro va a generar. Despus, siempre que necesite codificar el conjunto de instrucciones, solo hay que codificar el nombre de la macro y el ensamblador genera de forma automtica las instrucciones que han sido definidas en la macro. Las macros son tiles para los siguientes propsitos:

* Simplificar y reducir la cantidad de codificacin repetitiva. * Reducir errores causados por la codificacin repetitiva. * Linealizar un programa en lenguaje ensamblador para hacerlo mas legible.

3.1.1 Internas.
Para definir una macro, se utiliza la directiva MACRO. El formato de esta directiva es : (nombre_de_macro) MACRO (lista_parmetros) Una macro consta de tres partes esenciales: a) CABECERA: Contiene el nombre de la macro, la pseudo-op MACRO y opcionalmente, variables ficticias que sern pasadas desde la macro. b) CUERPO: Contiene el cdigo real que ser insertado en cualquier programa que llame al nombre de la macro. c) FIN: Debe incluir la sentencia ENDM. Ejemplo de una macro sencilla:
INICIO MACRO MOV AX, DATA MOV DS, AX MOV ES, AX ; ; ; ; Define macro cuerpo de la definicin de la macro

ENDM

Internas. Una macro interna es aquella que se declara y se llaman dentro del mismo programa. Arriba.

3.1.2 Externas o Bibliotecas de Macros.


Una de las facilidades que ofrece el uso de las macros es la creacin de bibliotecas, las cuales son grupos de macros que pueden ser incluidas en un programa desde un archivo diferente.
La creacin de estas bibliotecas es muy sencilla, unicamente tenemos que escribir un archivo con todas las macros que se necesitarn y guardarlo como archivo de texto. Para llamar a estas macros solo es necesario utilizar la instruccin Include NombreDelArchivo, en la parte de nuestro programa donde escribiriamos normalmente las macros, esto es, al principio de nuestro programa (antes de la declaracin del modelo de memoria). Suponiendo que se guard el archivo de las macros con el nombre de MACROS.TXT la instruccin Include se utilizara de la siguiente forma: ;Inicio del programa Include MACROS.TXT .MODEL SMALL .DATA ;Aqui van los datos .CODE Inicio: ;Aqui se inserta el cdigo del programa .STACK ;Se define la pila End Inicio ;Termina nuestro programa

3.2.- Procedimientos.
3.2.1 Procedimientos internos. 3.2.2 Procedimientos externos,

Definicin de procedimientos Un procedimiento es un conjunto de instrucciones que tienen la finalidad de ejecutar una tarea especifica dentro de un programa. Los procedimientos son muy similares a las macros. Un procedimiento se declara una sola vez en el codigo fuente y cuando el programa se ensambla y ejecuta, el procedimiento se coloca en memoria para que pueda ser utilizado por el programa. Acontinuacin se presentan los pasos necesarios para ejecutar 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 al Procedimiento 4.-El microprocesador ejecuta las instrucciones del procedimiento 5.-El procedimiento termina cuando se encuentra la instruccin Ret 6.-Se saca de la pila el valor original del IP y se continua el flujo del programa. Un procedimiento se declara de la siguiente forma: PROC nombre instruccin instruccin... RET ENDP NOMBRE

3.2.1 Procedimientos internos.


Los procedimientos internos son aquellos que se declaran y semismo programa, tambin son llamados procedimientos locales. Un ejemplo de procedimiento interno es el siguiente: ;Procedimiento: GotoXY ;Descripcin: Coloca el cursor una posicin especifica de la pantalla ;Parmetros: Dl=X,Dh=Y ;********************************************************************** PROC GotoXY xor bh,bh mov ah,02h int 10h ret endp GotoXY Arriba.

3.2.2 Procedimientos externos.


Los procedimientos externos, a diferencia de los internos, se declaran en mdulos o programas separados al programa donde el procedimiento es llamado, en otras palabras, la llamada al procedimiento se encuentra en un programa y el procedimiento en otro. Para poder utilizar procedimientos externos, es necesario que sean declarados como pblicos en el programa donde se encuentran y que sean llamados como externos en el programa donde sern usados. Se debe contar con tres directivas de ensamble: .PUBLIC para declarar los procedimientos como pblicos, .EXTERN para indicar que el procedimiento que se va a usar est fuera del programa y .INCLUDE para enlazar el programa que contiene los procedimientos con el programa que los llama.

PUBLIC PROC1 ; Se define como pblico PROC1 PROC FAR ; comienzo del procedimiento (lejano) (instrucciones) ; Instrucciones del procedimiento RET ;Instruccin para retornar PROC1 ENDP ; Final del procedimiento Para llamar a un procedimiento se utiliza la instruccin CALL: CALL nombre_procedimiento Por ejemplo Este programa muestra la forma de utilizar procedimientos y datos externos en los programas por medio de las directivas de inclusin include y public.

.MODEL TINY .INCLUDE proc2.ASM ;Incluir el archivo proc2.asm ;el cual contiene la variable de cadena ;Cad1 y los procedimientos externos ;usados en este programa. .DATA Cad2 db 'Esta es una cadena de prueba 2...',13,10,'$' .CODE INICIO: ;Punto de entrada al programa Mov Dl,20 ;X=20 Mov Dh,10 ;Y=10 Call GotoXY ;GotoXY 20,10 Lea DX,Cad2 ;DX->Cad2 en Proc3.asm Call Imprime_Cad ;Imprime Cad2 Lea DX,Cad1 ;DX->Cad1 en Proc2.asm Call Imprime_Cad ;Imprime Cad1 Mov AX,04C00h ;Fin del programa Int 21h ; END INICIO END

5. Macros Definicin Una de las principales desventajas de la programacin en lenguaje ensamblador es la repeticin constante de ciertos grupos de instrucciones. Por ejemplo el siguiente conjunto de instrucciones nos permite imprimir una variable de tipo cadena en la pantalla: Lea DX,Cadena ;Direccionar la cadena Mov AH,09h ;Usar la funcin 09h para imprimir cadenas Int 21h ;llamada a la interrupcin 21h del DOS Si necesitamos que en nuestro programa se muestren mensajes constantemente, es obvio que debemos duplicar este conjunto de instrucciones por cada mensaje que se desea enviar a pantalla. El principal problema que esto nos ocasiona es que el tamao de nuestro programa crece considerablemente, y mientras ms grande sea el programa, ms difcil ser encontrar la causa de algn error cuando ste ocurra. La mejor solucin en estos casos es el uso de las MACROS. Una macro es un conjunto de instrucciones que se agrupan bajo un nombre descriptivo (macroinstruccin) y que slo es necesario declarar una vez (macrodefinicin). Una vez que la macro ha sido declarada, slo es necesario indicar su nombre en el cuerpo del programa y el ensamblador se encargara de reemplazar la macroinstruccin por las instrucciones de la macro (expansin de la macro). El formato general de una macro es el siguiente: .MACRO Nombre [(parametro1, parametro2, etc)] INSTRUCCIONES ENDM Nuevamente, lo que se encuentra entre parntesis cuadrados es opcional. De acuerdo con esto, la macro para imprimir cadenas quedara de la siguiente forma: .MACRO Imprime_Cad(Cadena) Lea DX,Cadena Mov Ah,09h Int 21h ENDM Parmetros y etiquetas Dentro de las propiedades ms importantes de las macros se deben destacar la posibilidad de utilizar parmetros y etiquetas. Los parmetros permiten que una misma macro pueda ser usada bajo diferentes condiciones, por ejemplo, se puede crear una macro para posicionar el cursor en diferentes coordenadas de la pantalla e indicar sus coordenadas por medio de parmetros. La siguiente macro nos muestra esta propiedad: ;Esta macro posiciona el cursor en las coordenadas que se le indican como ;parmetros. Es el equivalente al GotoXY de Pascal. .MACRO gotoxy (x,y) xor bh,bh ;Seleccionar pgina cero de video mov dl,x ;Columna mov dh,y ;Rengln

mov ah,02h ;Funcin 02h para posicionar cursor int 10h ;llamada a la int 10h del BIOS ENDM Tambin existen situaciones en las que los parmetros no son necesarios, es por esta razn que los parmetros son opcionales en la declaracin de la macro. ;Esta macro realiza una pausa en el programa hasta que una tecla es ;presionada. Es el equivalente del readkey en Pascal. .MACRO tecla mov ah,10h int 16h ENDM Por otro lado, las etiquetas tambin son tiles dentro de las macros. Suponga que se desea crear una macro que imprima una cadena un numero n de veces, esta macro podra ser declarada de la siguiente forma: .MACRO Imprime_nCad (Cadena, Cuantos) Mov CX,Cuantos ;Iniciar Contador Lea DX,Cadena ;Direccionar la cadena que se va a imprimir Mov Ah,09h ;Usar la funcin 09h Otra: ;Etiqueta interna Int 21h ;Imprimir la Cadena n veces Loop Otra ;Siguiente Impresin ENDM Ensamble de macros Como ya se mencion antes, una macro es declarada una sola vez y puede ser llamada cuantas veces sea necesario dentro del cuerpo del programa. Cada vez que el ensamblador encuentra una macroinstruccin, verifica si sta fue declarada; si esta verificacin es exitosa, el ensamblador toma las instrucciones del cuerpo de la macro y las reemplaza en el lugar donde la macro fue llamada. El siguiente programa muestra la declaracin y uso de las macros: .COMMENT Programa: Macros1.ASM Autor: Juan Carlos Guzmn C. Descripcin: Este programa muestra el uso de macros. .MODEL TINY ; Declaracin de variables .DATA cad db 'Ejemplo del uso de macros...',13,10,'$' cad1 db 'Presiona una tecla...','$' cad2 db 'Ejemplo del uso de la macro gotoxy...','$' ;Aqu se declaran las macros. ;************************************************************************ ;-----------------------------------------------------------------------;Esta macro imprime una cadena pasada como parmetro. ;Utiliza la funcin 09h de la Int 21h del DOS. .MACRO imprime_cad(cadena)

lea dx,cadena mov ah,09h int 21h ENDM ;-----------------------------------------------------------------------;Esta macro realiza una pausa en el programa hasta que una tecla se ;presione. Es el equivalente del readkey en Pascal. .MACRO tecla mov ah,10h int 16h ENDM ;-----------------------------------------------------------------------;Esta macro posiciona el cursor en las coordenadas que se le indican como ;parmetros. Es el equivalente al GotoXY de Pascal. .MACRO gotoxy (x,y) xor bh,bh mov dl,x mov dh,y mov ah,02h int 10h ENDM ;------------------------------------------------------------;Esta macro limpia la pantalla. ;Utiliza la funcin 06h de la Int 10h del Bios. .MACRO limpiar_pantalla mov ax,0600h mov bh,17h mov cx,0000h mov dx,184fh int 10h ENDM ;------------------------------------------------------------;Aqu comienza el cuerpo del programa principal .CODE inicio: ;Declaracin del punto de entrada limpiar_pantalla ;Llamada a la macro gotoxy (0,0) ;Colocar el cursor en 0,0 imprime_cad(cad) ;Imprime el primer mensaje imprime_cad(cad1) ;Imprime el segundo mensaje tecla ;Espera a que se presione una tecla gotoxy (30,12) ;Colocar el cursor en 30,12 imprime_cad(cad2) ;Imprimir el tercer mensaje gotoxy (50,24) ;Colocar el cursor en 50,24 imprime_cad(cad1) ;Imprimir el segundo mensaje tecla ;Esperar por una tecla mov ax,4c00h ;Fin del programa y regresar al DOS. int 21h

END inicio END Ventajas y desventajas Si bien es cierto que las macros proporcionan mayor flexibilidad a la hora de programar, tambin es cierto que tienen algunas desventajas. La siguiente es una lista de la principales ventajas y desventajas del uso de las macros. Ventajas:

Menor posibilidad de cometer errores por repeticin. Mayor flexibilidad en la programacin al permitir el uso de parmetros. Cdigo fuente ms compacto. Al ser ms pequeo el cdigo fuente, tambin es ms fcil de leer por otros.

Desventajas:

El cdigo ejecutable se vuelve ms grande con cada llamada a la macro. Las macros deben ser bien planeadas para evitar la redundancia de cdigo.

Macros y procedimientos

Procedimientos.
o o

Definicin de procedimiento Sintaxis de un procedimiento

Macros.
o o o

Definicin de una macro Sintaxis de una macro Bibliotecas de macros

Definicin de procedimiento
Un procedimiento es un conjunto de instrucciones a los que podemos dirigir el flujo de nuestro programa, y una vez terminada la ejecucin de dichas instrucciones se devuelve el control a la siguiente linea a procesar del cdigo que mando llamar al procedimiento. Los procedimientos nos ayudan a crear programas legibles y fciles de modificar.

Al momento de invocar a un procedimiento se guarda en la pila la direccin de la siguiente instruccin 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:

Declaracin del procedimiento cdigo del procedimiento Directiva de regreso Terminacin 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 ;Declaracin del procedimiento Mov Bx, 0 ;Contenido del procedimiento Mov Bl, Ah Mov Ah, 00 Add Bx, Ax Ret ;Directiva de regreso Suma Endp ;Declaracin de final del procedimiento En la declaracin 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 direccin 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 Programacin comparadas con los procedimientos, pero no por ello se dejarn de utilizar estos ltimos.

Definicin 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 parmetros y en el procedimiento no (esto es aplicable solo para el MASM, hay otros lenguajes de Programacin que si lo permiten). Al momento de ejecutarse la macro cada parmetro es sustituido por el nombre o valor especificado al momento de llamarla. Podemos decir entonces que un procedimiento es una extensin de un determinado programa, mientras que la macro es un mdulo con funciones especficas 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 instruccin del ensamblador.

Sintaxis de una macro


Las partes que componen a una macro son:
o o o

Declaracin de la macro cdigo de la macro Directiva de terminacin de la macro

La declaracin 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 terminacin de la macro es: ENDM

Un ejemplo de macro, para colocar el cursor en alguna posicin 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 instruccin 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 creacin de bibliotecas, las cuales son grupos de macros que pueden ser incluidas en un programa desde un archivo diferente. La creacin de estas bibliotecas es muy sencilla, unicamente tenemos que escribir un archivo con todas las macros que se necesitarn y guardarlo como archivo de texto. Para llamar a estas macros solo es necesario utilizar la instruccin Include NombreDelArchivo, en la parte de nuestro programa donde escribiriamos normalmente las macros, esto es, al principio de nuestro programa (antes de la declaracin del modelo de memoria). Suponiendo que se guard el archivo de las macros con el nombre de MACROS.TXT la instruccin Include se utilizara de la siguiente forma: ;Inicio del programa Include MACROS.TXT .MODEL SMALL .DATA ;Aqui van los datos .CODE

Inicio: ;Aqui se inserta el cdigo del programa .STACK ;Se define la pila End Inicio ;Termina nuestro programa