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

UNIDAD III

PROCEDIMIENTOS
Los programas que se han desarrollado hasta
ahora contienen pocas lneas de cdigo, una o
dos pginas a lo sumo. Conforme los programas
crecen en tamao y complejidad se vuelve difcil
y tedioso depurarlos.

En este caso, resulta conveniente dividir el
programa en varias partes llamadas
procedimientos.
Un procedimiento

Es una coleccin de instrucciones relacionadas
que realiza una tarea especfica. Tambin un
procedimiento puede contener un conjunto de
instrucciones que deseamos que se ejecuten en
varias partes del programa.

Los procedimientos del lenguaje ensamblador
tienen su contraparte en los lenguajes de alto nivel,
por ejemplo, en el lenguaje C estos procedimientos
se llaman funciones.
Definicin de un procedimiento

La sintaxis de la definicin de un procedimiento es la
siguiente:

A grandes rasgos podramos dividir los
procedimientos en los siguientes tipos:

Cercanos. Son aquellos que se encuentran dentro
del mismo segmento por el que son llamados.

En MASM podemos aadir el sufijo "NEAR" al
nombre del procedimiento, aunque no es necesario
porque es el tipo por defecto. Terminan con la orden
"RET" que recoge de la pila el valor guardado del
registro IP.

Utilizaremos la orden "CALL" para llamarlos.
Lejanos. Se hallan fuera del segmento del que los
llama.
En MASM podemos aadir el sufijo "FAR" al nombre
del procedimiento para indicar que son lejanos, por lo
que podremos llamarlos con un simple CALL.

Terminan con la orden "RETF" de Return Far que
recoge de la pila la doble palabra CS:IP (en formato
little endian).

Si no hemos usado el sufijo FAR al nombre del
procedimiento deberemos usar antes del CALL un
"PUSH CS" para llamarlos (ste ser el caso, sobre
todo de los compiladores NASM y FASM).
Interrupciones. Podremos definir nuestras propias
interrupciones como simples procedimientos
(aunque no es lo habitual ni lo ms cmodo puesto
que slo se pueden definir un mximo de 256
interrupciones en su mayor parte ya ocupadas por
el sistema), con la particularidad de que siempre
deben ser lejanos, terminar con la orden "IRET" que
recoger de la pila la doble palabra CS:IP y el
registro de banderas, por lo que antes de hacer una
llamada lejana a un procedimiento con CALL
deberemos meter en la pila el registro de banderas
con "PUSHF". Otra forma de llamarlas es
simplemente con "Int [num]".
Llamada a un procedimiento

La llamada a un procedimiento normalmente tiene
la siguiente forma:

Podemos formar a la instruccin de vuelta "RET"
para que sea cercana con "RETN" o lejana con
"RETF", adems admite una constante opcional
que especifica un nmero de bytes para ser
aadidos al valor del registro SP despus del
regreso, normalmente utilizado para borrar los
argumentos pasados al procedimiento a travs de
la pila.
En la sintaxis MASM la orden RET por defecto es
interpretada segn el tipo de modelo de memoria
usada:
"NEAR" para "TINY", "SMALL", "COMPACT" y
"FLAT"
"FAR" para "MEDIUN", "LARGE" y "HUGE"
Operaciones CALL y RET

La instruccin CALL transfiere el control a un
procedimiento llamado, y la instruccin RET regresa
del procedimiento llamado al procedimiento original
que hizo la llamada.

RET debe ser la ultima instruccin en un
procedimiento llamado.

Los formatos generales para CALL y RET son:
call etiqueta
call regW|memW
call memDW
Regresa de un procedimiento
Sintaxis:
ret
Consideraciones sobre el diseo de un
procedimiento

Un procedimiento bien diseado debe llenar los
siguientes requisitos:

Debe hacer una sola tarea.
Debe ser tan pequeo como sea posible y tan
largo como sea necesario.
Su listado no debiera de exceder una o dos
pginas.
Debe contener un comentario describiendo su
propsito, sus datos de entrada y de salida.
Debe entenderse por s solo sin necesidad de
saber que hace el programa completo.
El comportamiento interno del procedimiento debe
ser transparente para el usuario. Esto
encapsulamiento de la informacin.
El usuario slo debe saber cmo llamar al
procedimiento, esto es, qu datos se le deben
suministrar y cmo regresa el resultado.

A esto se le llama la interfase del procedimiento.
Uso de los registros en un procedimiento

Un procedimiento puede utilizar los registros de
propsito general de tres formas diferentes:

Para recibir valores o direcciones del cdigo que
lo llama.
Para regresar valores o direcciones al cdigo que
lo llama.
Como variables locales del procedimiento o como
registros de trabajo de las instrucciones del
procedimiento.
MACROS

Para cada instruccin simblica que se codifica, el
ensamblador genera una instruccin de lenguaje
mquina. Pero para cada enunciado codificado en
un lenguaje de alto nivel, como C o Pascal, el
compilador genera muchas instrucciones de
lenguaje mquina. A este respecto, puede pensar en
un lenguaje de alto nivel como consistente de macro
enunciados.
El ensamblador tienen facilidades que el
programador puede usar para definir macros.

Se define un nombre especfico 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 codifique el nombre de la macro y
el ensamblador genera de manera automtica las
instrucciones que usted defini.
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.
Una definicin sencilla de una Macro Interna:

Para macros que se necesiten incluir en un
programa, primero se tienen que definir (o copiar de
una biblioteca de macros).

Una definicin de macro aparece antes que
cualquier definicin de segmento. Examinemos una
definicin de una macro sencilla que inicializa los
registros de segmento para un programa .EXE:

INITZ MACRO ; Define macro
MOV AX,@data ; } Cuerpo de la
MOV DS,AX ; } definicin
MOV ES,AX ; } de la macro
ENDM
Macro para colocar el cursor en alguna posicin determinada
de la pantalla.

Posicin 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
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,
nicamente 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 Nombre Del Archivo, en la parte
de nuestro programa donde escribiramos
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

Вам также может понравиться