Vous êtes sur la page 1sur 28

Microprocesador 8085 de INTEL

LA PROGRAMACIN

Algoritmo
Pseudocdigos
Estructuras de datos
Diagramas de flujo
Ejemplos de algoritmos
Ejercicios
microprocesadores
microprocesador
electronica
instrucciones
set
direcciones
datos
bus
8085
intel
foto
macro
olympus
zuiko
potencia
direccionamiento
decodificador
salto
bucle
logicas
aritmeticas
condicionales
programa
ensamblador

http://micros.myblog.es/

http://issuu.com/microprocesadores/

2010 Celestino Bentez Vzquez

Todos los contenidos e imgenes publicados en la revista microprocesadores tienen los derechos
reservados quedando prohibida la reproduccin total o parcial de esta publicacin sin el consentimiento
expreso de su autor.
5. LA PROGRAMACIN.

Despus de haber tratado y examinado el repertorio de instrucciones del microprocesador, vamos


a introducir algunas cuestiones bsicas y primordiales sobre la metodologa de la programacin, que nos
faciliten el desarrollo de programas aplicables a nuestro sistema fsico.

Planteamos aqu la base de la programacin estructurada que nos ayudar a construir programas
ms o menos complejos, que se apoyarn en unidades o bloques ms elementales para a partir de ellos
obtener otros ms largos y complicados. Se obtendrn algoritmos que no dependern en absoluto de
ningn lenguaje de programacin en concreto y que posteriormente sern convertidos al lenguaje deseado
en cada caso (para nosotros el ensamblador).

El proceso de programacin debe desarrollarse partiendo de unas ideas que deben ser
perfectamente asimiladas, comprendidas y organizadas por la persona o personas que vayan a construir el
programa en cuestin. Esto lleva implcita la disminucin de errores durante el proceso programador, por
lo que se facilita enormemente la tarea.

El objetivo final de la programacin ser, adems de conseguir programas que funcionen


correctamente y sean eficientes, proporcionar sobre ellos toda la documentacin necesaria. Debe tenerse
en cuenta que un programa indebidamente documentado sera muy difcil de modificar en un futuro, o al
menos podra resultar tan costoso que nos hara renunciar a tal propsito.
5.1 EL ALGORITMO.
Puede decirse que un algoritmo no es ms que un mtodo que vamos a utilizar para resolver un
problema o mejor an para resolver un tipo de problemas. Para afrontar la construccin de un programa
determinado, resulta esencial conocer de un modo preciso el problema que se desea resolver y los datos
iniciales de los que se dispone para, a travs del algoritmo, describir exactamente y con la mayor
precisin posible, la secuencia de pasos a seguir hasta llegar a la solucin deseada.

El algoritmo debe ser construido mediante la especificacin de un proceso que muestre de forma
clara la relacin entre los estados iniciales y los estados o resultados finales. Los elementos que
componen una especificacin son fundamentalmente:

1. El nombre del algoritmo que se desarrolla.


2. La funcin o tarea que realiza lo ms clara posible.
3. Las condiciones iniciales (precondiciones).
4. Los estados finales una vez ejecutado el algoritmo (postcondiciones).
5. La exposicin de las variables que intervienen.

Las especificaciones que se realicen deben ser claras y precisas de forma que no quede lugar a
ambigedades y deben ser propuestas de la forma ms general posible. Puede suceder que en
determinados algoritmos no sea necesario exponer de forma explcita todos los elementos de la
especificacin.

Los programas que trataremos, en general, se desarrollaran de forma lineal o secuencial, es decir,
ejecutaremos las instrucciones en el orden programado, aunque dispondremos de los medios adecuados
para romper esta secuencia y continuar la ejecucin en otro punto del programa que nos interese.
Podremos tambin en circunstancias concretas, establecer determinados bloques o conjuntos de
instrucciones que se repitan cclicamente un estipulado nmero de veces, incluso determinadas partes del
programa podrn ejecutarse o no en funcin de que se cumplan ciertos condicionamientos.

Cuando se pretende resolver un problema mediante la programacin, lo normal es que se


encuentren distintas formas o modos de solucionarlo, es decir, distintos algoritmos que nos proporcionen
el mismo resultado. Debe quedar claro, por tanto, que no hay una solucin nica en el momento de
construir un algoritmo.

Fundamentalmente debemos conseguir que todos los algoritmos construidos renan las
siguientes caractersticas:

Que sean fcilmente comprensibles para quien pretenda leerlos.


Deben obtener el resultado deseado de forma rpida.
Deben ocupar el menor espacio posible.
Es conveniente que el programa se encuentre subdividido en programas ms elementales, es decir, el
programa debe ser modular.
Adems debe ser razonablemente fcil de modificar. A esto ayuda la modularidad y la
documentacin que acompae al programa (la informacin que suministra la documentacin es muy
importante en los procesos de modificaciones).

Existen diversas formas de abordar la construccin de un algoritmo, desde la realizacin de


tablas de decisin que nos sealan las distintas cuestiones planteadas y nos apuntan a las acciones a
tomar, pasando por la realizacin de los diagramas de flujo que nos resuelven el problema
grficamente, las especificaciones formales que pretenden introducir un lenguaje ms preciso y
matemtico que anule en lo posible las indefiniciones y los errores, hasta la utilizacin conjunta del
lenguaje comn y palabras clave, constituyendo lo que se llama el pseudocdigo.
Debe entenderse que cada uno de estos mtodos de construccin de algoritmos tiene sus ventajas
e inconvenientes. Por ejemplo, es claro que para resolver un problema pequeo, puede resultar muy
sencillo e ilustrativo emplear el diagrama de flujo. Sin embargo, si el problema es mucho ms complejo,
este mtodo podra resultar muy dificultoso, nos causara muchos problemas si tuviramos que realizar
alguna modificacin e incluso podra llegar a no ser utilizable dependiendo del nivel de dificultad.

En ocasiones puede ser interesante utilizar una mezcla de dos mtodos, siempre que nos facilite
la tarea de programar. Nosotros emplearemos los diagramas de flujo siempre que sea posible y el
pseudocdigo, todo ello con vistas al paso posterior, que ser la codificacin del algoritmo en lenguaje
ensamblador.

5.2 LOS PSEUDOCDIGOS-


Como se ha mencionado anteriormente, al emplear el pseudocdigo para la construccin de un
algoritmo, se utiliza una mezcla entre el lenguaje comn y determinadas instrucciones cruciales que
veremos a continuacin.

Hay que recordar que este procedimiento empleado en la creacin de los algoritmos no siempre
puede seguir una estructura rgida, debiendo adaptarnos al problema concreto que estemos tratando.

Al objeto de ir concretando algo ms sobre los aspectos que nosotros trataremos finalmente para
la puesta en funcionamiento de nuestro sistema, debemos indicar que:

Las condiciones iniciales (precondiciones) que normalmente observaremos harn referencia a


determinados registros o posiciones de memoria que contienen los datos precisos para ejecutar ese
algoritmo.
Las condiciones finales (postcondiciones) harn referencia al modo de obtencin del resultado de la
ejecucin, dnde queda almacenado un dato o resultado, como se ejecuta una accin, registros
modificados durante la ejecucin, direcciones de memoria alteradas, etc.

Puede decirse, por tanto, que la estructura bsica de un algoritmo ser del tipo que a
continuacin se muestra:

NOMBRE:
FUNCION:
PRECONDICIONES:
POSTCONDICIONES:

VARIABLES:

..............................................
..............................................

CUERPO DEL PROGRAMA

..............................................
..............................................

FINAL

La instruccin ms elemental y bsica que se emplea en el diseo de algoritmos es la de


asignacin, que consiste en dar un determinado valor a una variable. Esta operacin se realiza
simblicamente mediante el signo =. Debe tenerse cuidado en las asignaciones con los tipos de datos
que se est trabajando. En nuestro caso es imprescindible saber si se trata de palabras de 8 bits, 16 bits,
valores decimales, hexadecimales, caracteres ASCII, etc.
Por otro lado, como ya se ha apuntado anteriormente, el desarrollo de un algoritmo est basado
en la composicin secuencial de instrucciones, es decir, en la ejecucin de las instrucciones que lo
componen de manera consecutiva. Esto quiere decir que cuando partimos de unas precondiciones
determinadas (Pr1) y ejecutamos una serie de instrucciones, se obtendrn unas postcondiciones concretas
(Po1). Si ahora estas postcondiciones nos sirven como precondiciones (Po1=Pr2) para ejecutar a
continuacin otra serie de instrucciones que nos proporcionen nuevas postcondiciones (Po2), quiere esto
decir que es posible que no necesitemos explicar los estadios intermedios pudiendo limitarnos a partir de
las precondiciones iniciales (Pr1) para obtener las postcondiciones finales (Po2), producindose de esta
manera la asociacin de instrucciones.

Sin embargo este proceso de composicin secuencial no proporciona los medios adecuados o
suficientes para desarrollar algoritmos que nos exijan un mnimo de complejidad. Disponemos entonces
de una serie de acciones o mecanismos que nos permiten variar o modificar el desarrollo de una secuencia
en funcin de alguna caracterstica determinada. Entre estas acciones destacan:

Las decisiones: Constituyen una nueva estructura que nos permite ejecutar o no, una parte del
programa, atendiendo a determinada condicin. Este tipo de estructura responde a la siguiente notacin:

SI condicin
Instruccin 1
Instruccin 2
Instruccin 3
....................
Instruccin N
FIN DE SI
Al ejecutar el programa, cuando se llega a este punto condicional, nuestro microprocesador
comprobar si se cumple la condicin. Si la respuesta es positiva se ejecutan las instrucciones
pertenecientes al condicional SI (Instruccin 1, Instruccin 2, ..., Instruccin N) y a continuacin prosigue
con el resto del programa que exista despus de FIN DE SI. En caso de que no se cumpla la condicin, no
se ejecutarn las instrucciones del condicional SI y el microprocesador continuar la ejecucin del
programa que sigue a FIN DE SI. (Debemos recordar ahora algunas de las instrucciones del 8085 y
fijarnos que la comprobacin de la condicin por parte del microprocesador est basada en la inspeccin
de los flags o sealizadores).

En ocasiones se necesita no solo elegir si vamos a desarrollar un proceso o no, sino que
deseamos realizar un proceso u otro segn una determinada condicin. Es decir, estamos ante estructuras
que nos permiten elegir entre dos procesos distintos. Dichas acciones responden a la siguiente notacin:

SI condicin
Instruccin 1
Instruccin 2
....................
Instruccin N
SI NO
Instruccin N+1
Instruccin N+2
......................
Instruccin 2N
FIN DE SI

Cuando se alcanza este condicional, el microprocesador comprueba la condicin y en caso de


que se cumpla ejecuta Instruccin 1, Instruccin 2, ..., Instruccin N, y a continuacin pasan a ejecutarse
las instrucciones del programa que van despus de FIN DE SI. En caso de que la condicin no se cumpla,
se ejecutarn Instruccin N+1, Instruccin N+2, ..., Instruccin 2N, y a continuacin las instrucciones que
van despus de FIN DE SI.

Estas situaciones condicionales (tomas de decisin) pueden estar anidadas, es decir, entre las
instrucciones que hay dentro de estos lazos, puede haber otras instrucciones de tomas de decisin,
obteniendo estructuras cada vez ms complejas, pero que nos proporcionan mayor flexibilidad, del tipo:

SI condicion1
Instruccin 1
Instruccin 2
SI condicin2
Instruccin a
Instruccin b
Instruccin c
FIN DE SI
SI NO
Instruccin 3
Instruccin 4
FIN DE SI

Los bucles: Tambin denominados ciclos, son estructuras que nos permiten la ejecucin de una
serie de instrucciones un determinado nmero de veces que depende del estado o condicin inicial. Los
bucles constituyen lo que llamaremos composiciones iterativas. Estn compuestos bsicamente por una
condicin inicial y el cuerpo del bucle, respondiendo a la siguiente notacin:

MIENTRAS condicin
Instruccin 1
Instruccin 2
.....................
Instruccin N
FIN DE MIENTRAS
Cuando nos encontremos ante una estructura de este tipo, si se cumple la condicin inicial, se
ejecutar el cuerpo del bucle (Instruccin 1, Instruccin 2, ..., Instruccin N) hasta que deje de cumplirse
la condicin, momento en el que pasarn a ejecutarse las instrucciones que van despus de FIN DE
MIENTRAS. Si la condicin inicial no se cumple no se entra en el ciclo y se contina despus de FIN DE
MIENTRAS.

Debe tenerse especial cuidado en que despus de un determinado nmero de iteraciones la


condicin deje de cumplirse, de otro modo entraramos en un bucle sin fin. Las condiciones de los bucles,
normalmente se establecen mediante contadores que son variables que contienen nmeros enteros y que,
en el interior del cuerpo del bucle, son incrementadas o decrementadas de forma constante en cada
iteracin que se realiza.
5.3 LAS ESTRUCTURAS DE DATOS.
Hasta el momento hemos visto algunos aspectos de las herramientas disponibles para desarrollar
algoritmos. Sin embargo cuando se presenta la necesidad de manejar un elevado nmero de datos, es
preciso agruparlos y organizarlos atendiendo a unas caractersticas concretas que sean comunes a todos
ellos, constituyendo de este modo las estructuras de datos.

La estructura ms sencilla y con la que trabajaremos nosotros es el array unidimensional,


constituido por un conjunto de datos de idnticas propiedades, colocados por un orden dentro de un
conjunto. El lugar que ocupan dentro de ese conjunto o array es sealado o marcado por la variable ndice
que puede tomar valores enteros de tal forma que apunte desde el primer dato al ltimo del array. Por
tanto un array (tambin llamado lista) estar representado por un nombre y un ndice que apunta a todos
los elementos del array. Un elemento ser sealado por el nombre del array seguido del lugar que ocupa,
es decir, del ndice. Por ejemplo VALOR(3) se refiere al elemento 3 del array que lleva el nombre de
VALOR.

Para recorrer un array debemos conocer con anterioridad el nmero total de elementos que lo
componen y emplear un ciclo de repeticin que responda a la estructura siguiente:

REPETIR DESDE I=1 HASTA N


Instruccin 1
Instruccin 2
.....................
Instruccin x
FIN DE REPETIR DESDE

Adems del array unidimensional, podemos hacer referencia tambin al array bidimensional, que
esta compuesto por un conjunto de datos homogneos sealados por dos ndices. Podremos asimilar los
elementos de un array bidimensional a los elementos de una tabla que disponga de varias filas y varias
columnas, es decir, el nmero de elementos ser (filas x columnas). Por tanto para referirse a un
elemento situado en la fila f y en la columna c, emplearemos la expresin NOMBRE(f,c).

5.4 LOS DIAGRAMAS DE FLUJO.


Emplear para la construccin de algoritmos, los diagramas de flujo, puede resultar muy
ilustrativo, incluso podra decirse que hasta conveniente. Sin embargo hay que tener en cuenta que para
determinadas cuestiones o bien cuando intentamos abordar la construccin de algoritmos complejos, el
mtodo de los diagramas de flujo pueden incluso resultar comprometedores en el sentido de llevarnos a
ms confusin y aadir cierta rigidez en los diseos.

Por este motivo no se proceder aqu a un estudio pormenorizado del empleo de los diagramas
de flujo, aunque intentaremos siempre incluir junto a nuestros desarrollos de pseudocdigo, el diagrama
de flujo correspondiente, de forma que pueda verse el efecto ilustrativo de los mismos.

Los diagramas de flujo estarn constituidos por una serie de smbolos, en los que se indicar la
funcin que desempean. Estos smbolos que estn representados en la FIG.54A en su mayora, van
unidos entre s por flechas que nos indican el sentido en que se desarrolla el programa. Sobre ellas
podemos hacer las anotaciones que consideremos precisas.
S1 S2 S3

S4 S5 S6

S7 S8 S9

S10 S11 S12

S13 S14 S15

FIG.54A

A continuacin se indica el significado de cada uno de los smbolos representados en la


mencionada figura:

S1 Representa un proceso a ejecutar.


S2 Almacenamiento de datos interno.
S3 Es un conector empleado para cambiar de pgina.
S4 Proceso alternativo.
S5 Indicador de comienzo o fin.
S6 Datos almacenados.
S7 Toma de decisin.
S8 Entrada de datos manual.
S9 Producir un retraso.
S10 Datos.
S11 Operacin realizada manualmente.
S12 Operacin lgica Y.
S13 Acceso a un proceso ya definido.
S14 Conector de diagrama de flujo.
S15 Operacin lgica O.
5.5 EJEMPLOS DE ALGORITMOS.
Ahora desarrollaremos algunos algoritmos sencillos, que nos permitirn llevar a la prctica las
normas hasta ahora apuntadas. Estos algoritmos desarrollados a travs de pseudocdigo sern
complementados con sus correspondientes diagramas de flujo. Debemos decir que stos no son
imprescindibles en la confeccin de programas.
Ejemplo 1.- Leer un nmero de una direccin determinada y si es mayor que 12 cargarlo en un
registro.
En primer lugar debemos analizar el problema detenidamente hasta entenderlo de forma correcta
y poder as realizar las especificaciones y acotaciones que consideremos oportunas. Se hace referencia a
una direccin de memoria, por tanto se trata de un byte que contiene el Dato buscado. Se supone que
buscamos un nmero positivo (no dicen nada en contra). Y adems aadimos que la direccin de
memoria en la que se encuentra el Dato, la tenemos en el registro par HL. Adems, podemos intuir que se
trata de una toma de decisin sencilla ya que establece una accin a ejecutar si se cumple una condicin
determinada y en caso contrario no se debe hacer nada.

El algoritmo puede ser de la forma:

NOMBRE: MAYOR12
FUNCION: Leer dato memoria y almacenarlo en registro si es mayor que 12.
PRECONDICIONES: HL = Direccin de memoria.
POSTCONDICIONES: Resultado en el registro B.

Leer Dato de la memoria


SI Dato > 12
B = Dato
FIN DE SI
Fin del Programa
A continuacin se muestra en la FIG.55A el diagrama de flujo correspondiente, en el que podemos ver
paso a paso la ejecucin del pseudocdigo. Para el seguimiento de dicho diagrama de flujo no se requiere
ninguna indicacin especial.

INICIO

Leer Dato memoria (HL)

No
Dato>12

Si

B=Dato

FIN

FIG.55A

Ejemplo 2.- Leer un nmero de una direccin de memoria determinada, si es mayor que 12
cargarlo en el registro B y en caso contrario cargarlo en el registro C.

Debemos hacer un anlisis de principio similar al anterior, estableciendo consideraciones


similares resultando en este caso el siguiente pseudocdigo:

NOMBRE: MENOR12
FUNCION: Leer dato memoria y almacenarlo en B (>12) o en C
PRECONDICIONES: HL = Direccin memoria, B=0, C=0
POSTCONDICIONES: Dato en B o en C

Leer Dato de la memoria


SI Dato > 12
B = Dato
SI NO
C = Dato
FIN DE SI
Fin del Programa

A continuacin se muestra el diagrama de flujo correspondiente a este pseudocdigo, FIG.55B,


donde se puede comprobar el desarrollo del programa.
INICIO

Leer Dato memoria (HL)

No
Dato>12

Si

B=Dato C=Dato

FIN

FIG.55B
Ejemplo 3.- Convertir un byte decimal en ASCII

Para desarrollar este ejemplo, analizamos como siempre todos los datos que nos proporcionan en
el enunciado. Vemos que en principio nos piden una conversin de cdigo sin imponernos ningn tipo de
restriccin ni condicionamiento adicional.

Como sabemos, los dgitos decimales son 0, 1, 2, 3, 4, 5, 6, 7, 8 y 9 siendo su representacin en


binario realizada con 4 bits. Como en cada byte disponemos de 8 bits, suponemos que el byte decimal
contiene dos dgitos decimales, el primero en los cuatro bits menos significativos y el segundo en los
cuatro bits ms significativos. Por consiguiente, tendremos que separar el byte en dos partes para tratarlas
independientemente y construir las equivalencias a cdigo ASCII de cada una de ellas. Como las
representaciones ASCII se realizan con palabras de ocho bits, el resultado ser obtenido en dos bytes.

Supondremos que el byte que contiene el dato decimal, se encuentra en una direccin de
memoria determinada, a la que apunta el valor asignado a DIREDAT. Adems, almacenaremos el
resultado tambin en memoria a partir de la direccin sealada por DIRERES.

Si observamos los cdigos binarios de los dgitos decimales y sus equivalentes ASCII (ver la
tabla de equivalencias que a continuacin se presenta), notaremos que nicamente se diferencian en los
cuatro bits ms significativos.

DIGITO BINARIO ASCII


0 0000 0011 0000
1 0001 0011 0001
2 0010 0011 0010
3 0011 0011 0011
4 0100 0011 0100
5 0101 0011 0101
6 0110 0011 0110
7 0111 0011 0111
8 1000 0011 1000
9 1001 0011 1001

No tendremos ms que, dejar los cuatro bits que representan la cifra decimal, en la parte baja del
nuevo byte a construir y en la parte alta de dicho byte situar el cdigo 0011, para que automticamente se
obtenga el equivalente ASCII buscado.

Basndose en estas consideraciones previas obtendremos el pseudocdigo siguiente:

NOMBRE: ASCII1
FUNCION: Convertir byte decimal a ASCII
PRECONDICIONES: DIREDAT = Direccin Dato
DIRERES = Direccin resultado
POSTCONDICIONES: Resultado en DIRERES y DIRERES+1

Leer Dato de la memoria apuntada por DIREDAT


Poner a cero los 4 bits menos significativos de DATO
Intercambiar los 4 bits de mayor peso con los 4 de menor peso del Dato
Agregar 0011 a la parte alta del Dato
Guardar Dato en memoria apuntada por DIRERES
Leer Dato de la memoria apuntada por DIREDAT
Poner a cero los 4 bits ms significativos de Dato
Agregar 0011 a la parte alta del Dato
Guardar Dato en memoria apuntada por DIRERES+1
Fin del Programa
A continuacin se muestra en la FIG.55C, el diagrama de flujo correspondiente a este ejercicio.
En l pueden apreciarse con claridad la forma de llevar a cabo todas las operaciones de modo secuencial.
Suele ser corriente expresar varias operaciones dentro de un mismo bloque de operacin.

INICIO

Leer Dato Memoria (HL)

Dato=XXXX 0000

Dato=0000 XXXX

Dato=0011 XXXX

Guardar Dato en DIRERES

Leer Dato Memoria (HL)

Dato=0000 YYYY

Dato=0011 YYYY

Guardar Dato en DIRERES+1

FIN

FIG.55C

(Como vemos, cuando en el diagrama de flujo no se hace referencia a DIREDAT sino al registro par HL,
se est haciendo la equivalencia HL=DIREDAT)

Ejemplo 4.- Convertir un byte hexadecimal a ASCII.

En este ejercicio se nos plantea un simple proceso de conversin a cdigo ASCII, de un valor
escrito en un byte segn el cdigo hexadecimal. Puesto que las representaciones en hexadecimal se
realizan con los smbolos 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E y F, siendo sus equivalentes binarios
obtenidos con cuatro bits, suponemos que en un byte hexadecimal estn contenidos dos dgitos
hexadecimales. Ser por tanto, preciso separar el byte del Dato en dos partes (parte ms significativa y
parte menos significativa) y buscar la representacin ASCII de cada una de ellas.

Supondremos adems que el byte que contiene el dato pertenece a una direccin de memoria
apuntada por DIREDAT. Y la solucin pedida, es decir, los dos caracteres ASCII pedidos, sern
almacenados en la memoria en las direcciones sealadas por DIRERES y DIRERES+1.

Por tratarse de valores hexadecimales, para efectuar la conversin a ASCII, tendremos que
aadir 0011 0000B si se trata de un valor menor que 10, o bien aadir 0011 0111B si se trata de un valor
mayor o igual que 10.
Teniendo en cuenta todas estas consideraciones, podemos obtener el siguiente pseudocdigo:
NOMBRE: ASCII2
FUNCION: Convertir byte hexadecimal a ASCII
PRECONDICIONES: DIREDAT = Direccin Dato
DIRERES = Direccin resultado
POSTCONDICIONES: Resultado en DIRERES y DIRERES+1
Leer Dato de la memoria apuntada por DIREDAT
Poner a cero los 4 bits menos significativos de DATO
Intercambiar los 4 bits de mayor peso con los 4 de menor peso del Dato
Ir a ASCII
Guardar Dato en memoria apuntada por DIRERES
Leer Dato de la memoria apuntada por DIREDAT
Poner a cero los 4 bits ms significativos de Dato
Ir a ASCII
Guardar Dato en memoria apuntada por DIRERES+1
Fin del Programa
NOMBRE: ASCII
FUNCION: Calcula el equivalente ASCII
PRECONDICIONES: Dato est disponible
POSTCONDICIONES: Dato = Valor en ASCII
SI Dato<10
Dato=Dato+30H
SI NO
Dato=Dato+37H
FIN DE SI
Volver
A continuacin se muestra el diagrama de flujo correspondiente al pseudocdigo propuesto
(FIG.55D). En l, destacan las llamadas a la subrutina ASCII, que se realizan en dos ocasiones.
INICIO

Leer Dato Memoria (HL) ASCII

INICIO
Dato=XXXX 0000

Dato=0000 XXXX Si No
Dato<10

Ir a ASCII

SALT1
Dato=Dato+30H
Guardar Dato en DIRERES

Dato=Dato+37H
Leer Dato Memoria (HL)

Dato=0000 YYYY

Ir a ASCII
Volver

Guardar Dato en DIRERES+1

FIN

FIG.55D

Ejemplo 5.- Llenar una zona de memoria RAM con el mismo dato.

La tarea que debemos resolver en este caso, consiste en llenar una zona de la memoria RAM con
un mismo Dato. Puesto que no nos indican nada acerca de los lmites de la zona a tratar, nosotros
supondremos que el principio de la misma viene sealado por PRIRAM. Del mismo modo, supondremos
que el nmero de elementos de la RAM a tratar est marcado por NUMDAT.
Hechas estas consideraciones iniciales, debemos fijarnos que tendremos que realizar un bucle
que se repita un determinado nmero de veces y mediante el cual realicemos las operaciones de
almacenaje adecuadas. Para ello, tendremos que emplear un contador que nos seale el final del bucle y
nos permita abandonar o finalizar el programa. Teniendo en cuenta todo lo anterior se desarrolla el
siguiente pseudocdigo:

NOMBRE: LLENARAM
FUNCION: Almacenar en una zona de RAM el mismo Dato
PRECONDICIONES: Conocemos PRIRAM, NUMDAT y Dato
POSTCONDICIONES: Zona de RAM con mismo Dato

Tomar Dato a almacenar


Iniciar Contador = NUMDAT
Apuntar al principio de la zona de RAM (PRIRAM)
MIENTRAS Contador>0
Almacenar Dato en RAM
Apuntar a la siguiente direccin de RAM
Decrementar Contador
FIN DE MIENTRAS
Fin de Programa
A continuacin se presenta, como en los ejercicios anteriores, el diagrama de flujo, que nos
puede orientar sobre el desarrollo del programa. (FIG.55E).

INICIO

Tomar Dato a almacenar

Contador = NUMDAT

Apuntar a direccin de RAM (PRIRAM)

No
Contador > 0

Si
FIN
Almacenar Dato

Incrementar direccin de RAM

Contador = Contador - 1

FIG.55E
Ejemplo 6.- Realizar una suma decimal de varios dgitos.

Con este ejercicio se llevar a cabo la suma de dos nmeros decimales de varias cifras. Puesto
que no nos dicen nada en el enunciado, supondremos que se trata de nmeros de ocho cifras. Los nmeros
a sumar (los sumandos) se encuentran almacenados en la memoria RAM expresados segn el sistema
decimal (BCD). Puesto que en cada byte disponemos de ocho bits, podemos tener representadas dos cifras
decimales en cada byte, por lo que para completar las ocho cifras de cada nmero se necesitarn cuatro
bytes por nmero.

La direccin donde se encuentra almacenado el primer byte del primer sumando, vendr dada
por SUM1 y el resto en direcciones consecutivas. La direccin del primer byte del segundo sumando,
estar dada por SUM2 y el resto en direcciones consecutivas. El resultado de la operacin ser
almacenado en las direcciones del primer sumando, por tanto, ste se perder.

Necesitamos desarrollar un bucle que sume los cuatro bytes representativos de cada nmero.
Para realizar este proceso, es preciso iniciar un Contador que nos permita establecer el final del bucle.

El pseudocdigo propuesto es el siguiente:

NOMBRE: SUMA
FUNCION: Suma dos nmeros decimales de 8 cifras cada uno
PRECONDICIONES: Primer sumando en SUM1
Segundo sumando en SUM2
POSTCONDICIONES: El resultado se almacena en lugar de SUM1

Apuntar a SUM1
Apuntar a SUM2
Iniciar Contador = 4
MIENTRAS Contador > 0
Sumar bytes SUM1+SUM2
Ajuste decimal
Guardar resultado en SUM1
Apuntar a SUM1+1
Apuntar a SUM2+1
Contador = Contador 1
FIN DE MIENTRAS
Fin del Programa

En la FIG.55F se representa el diagrama de flujo correspondiente a este pseudocdigo y en l


puede apreciarse el desarrollo o flujo de las rdenes a ejecutar por la computadora o sistema.
INICIO

Apuntar a SUM1
Apuntar a SUM2

Contador = 4

No
Contador > 0

Si
FIN
Sumar SUM1+SUM2

Ajuste decimal

Almacenar resultado en SUM1

Apuntar a SUM1+1
Apuntar a SUM2+1

Contador = Contador - 1

FIG.55F

Ejemplo 7.- Desarrollar una temporizacin.

En este caso nos piden desarrollar una subrutina o un programa de temporizacin. No se nos
indica cunto tiempo se debe permanecer en este estado, por lo que ser una caracterstica que
impondremos nosotros. Tampoco se dice nada acerca de qu debe hacer el microprocesador durante ese
tiempo.
El programa bsicamente consistir en desarrollar un bucle o ciclo que se repita durante un
tiempo, o un determinado nmero de veces, y en el que el microprocesador no haga nada. Es decir,
estableceremos un tiempo de espera. Como se ha hecho en otras ocasiones se establecer un Contador que
nos seale el final del bucle y por tanto el final del tiempo de espera.

Segn las condiciones expresadas, tendremos el siguiente pseudocdigo:


NOMBRE: TEMPORIZ
FUNCION: Realiza un tiempo de espera
PRECONDICIONES: Conocemos el dato del Contador
POSTCONDICIONES: Ninguna

Iniciar el Contador
MIENTRAS Contador > 0
No hacer nada
Decrementar Contador
FIN DE MIENTRAS
Final del Programa
En la FIG.55G se muestra el diagrama de flujo.

INICIO

Iniciar Contador

No
Contador > 0

Si

FIN
No hacer nada

Contador = Contador - 1

FIG.55G
Ejemplo 8.- Mover un bloque de memoria RAM.

En este ejercicio se llevar a cabo la traslacin de un bloque o conjunto de datos almacenados en


una zona de memoria RAM, que llamaremos zona ORIGEN, hacia otra zona de memoria RAM que
llamaremos zona DESTINO. Los datos de la zona ORIGEN, deben ser trasladados y situados en el mismo
orden. Los datos que se encuentren almacenados en la zona DESTINO, se perdern. Debemos tener en
cuenta que existe la posibilidad de que las zonas ORIGEN y DESTINO se encuentren superpuestas. Esto
plantear un problema aadido que debe ser resuelto, de lo contrario, podran perderse determinados
datos de la zona ORIGEN. Para ello tendremos que conocer de forma precisa el nmero de elementos de
la zona ORIGEN que deseamos mover. A este nmero le llamaremos NUM.

Con estos tres valores, ORIGEN, DESTINO y NUM, podremos saber si existe superposicin o
no. Para ello calcularemos la diferencia entre DESTINO y ORIGEN, para despus compararla con NUM.
Si no existe este problema, se proceder a mover datos de la zona ORIGEN a la zona DESTINO hasta
completar el proceso. En caso de que s exista superposicin se cambiarn los punteros de ORIGEN y
DESTINO a las posiciones finales de sus respectivas zonas para comenzar a mover los datos partiendo
del final hacia el principio hasta completar todos el proceso.

Debemos considerar adems la posibilidad de que las posiciones de ORIGEN y DESTINO


coincidan, en este caso daremos por finalizado el proceso ya que no ser necesario mover ningn dato.

El pseudocdigo que debemos plantear puede ser el siguiente:

NOMBRE: MOVERDAT
FUNCION: Traslada datos de una zona de RAM a otra zona de RAM
PRECONDICIONES: Conocemos ORIGEN, DESTINO y NUM
POSTCONDICIONES: Datos cambiados de ORIGEN a DESTINO
Datos iniciales de DESTINO perdidos
Apuntar a ORIGEN
Apuntar a DESTINO
Contador = NUM
SI Contador = 0
Final del Programa
FIN DE SI
SI DESTINO = ORIGEN
Final del Programa
FIN DE SI
Diferencia entre DESTINO y ORIGEN
Comparar Diferencia con NUM
SI no hay superposicin
MIENTRAS Contador > 0
Leer Dato de ORIGEN
Almacenar Dato en DESTINO
ORIGEN = ORIGEN + 1
DESTINO = DESTINO + 1
Contador = Contador 1
FIN DE MIENTRAS
Final del Programa
FIN DE SI
ORIGEN = ORIGEN + NUM
DESTINO = DESTINO + NUM
MIENTRAS Contador > 0
ORIGEN = ORIGEN 1
DESTINO = DESTINO 1
Leer Dato de ORIGEN
Almacenar Dato en DESTINO
Contador = Contador 1
FIN DE MIENTRAS
Final del Programa
A continuacin se muestra el diagrama de flujo correspondiente FIG.55H

INICIO

Apuntar a ORIGEN
Apuntar a DESTINO

Contador = NUM

Si
Contador = 0

No

Si
ORIGEN=DESTINO

No

Diferencia entre DESTINO y ORIGEN


Comparar Diferencia con NUM

Si Superposicin No

ORIGEN=ORIGEN+NUM
DESTINO=DESTINO+NUM
No
Contador > 0
Si

Contador>0 No Leer Dato de ORIGEN


Almacenar Dato en DESTINO
Si

ORIGEN=ORIGEN-1 ORIGEN=ORIGEN+1
DESTINO=RESTINO-1 DESTINO=DESTINO+1

Leer Dato de ORIGEN Contador=Contador-1


Almacenar Dato en DESTINO

Contador=Contador-1
FIN

FIG.55H
5.5 EJERCICIOS.

1. Definir el algoritmo. Elementos que lo componen. Caractersticas de los algoritmos.

2. Cules pueden ser las principales caractersticas de un buen algoritmo?.

3. Definir las distintas acciones del pseudocdigo.

4. Los diagramas de flujo. Dibuja los smbolos que recuerdes indicando su significado.

5. Qu son las precondiciones y las postcondiciones?.

6. Expresar la estructura bsica de un algoritmo.

7. Qu son las estructuras de datos?.

8. Definir las decisiones y los bucles mostrando sus estructuras.

9. Modificar el Ejemplo 1 desarrollado en este tema, de modo que el dato ledo quede almacenado en
una direccin de memoria, en el caso de que sea menor que 12.

10. Disear un algoritmo que almacene los nmeros consecutivos del 0 al 9 a partir de la direccin
8000H hacia arriba.

11. Disear un algoritmo que sume dos nmeros almacenados en dos direcciones de memoria
determinadas y guarde el resultado en otra direccin de la RAM.

12. Disear los diagramas de flujo correspondientes a los dos ejercicios anteriores.
En nuestro prximo nmero:
Desarrollo de programas bsicos.
El lenguaje ensamblador.
Instrucciones ejecutables en ensamblador.
Las directivas en ensamblador
ensamblador
Las subrutinas
Ejemplos de subrutinas
Errores corrientes programando en ensamblador
Ejercicios