Está en la página 1de 31

PRÁCTICAS DE LABORATORIO

CON EL MICROPROCESADOR Z-80

Eric Vallejo R.
enero de 2010
PROGRAMACIÓN DEL MICROPROCESADOR Z-80

Practicas de laboratorio

Contenido

Introducción
Practica 1 Transferencia de datos
Practica 2 Operaciones Aritméticas y lógicas
Practica 3 Instrucciones de salto y programas con Bucles
Practica 4 Operaciones con el Stack y subrutinas
Practica 5 Instrucciones de manipulación de bit, rotación y
desplazamiento
Practica 6 Operaciones Aritméticas
Practica 7 Transferencia y búsqueda de bloques de datos
Practica 8 Tiempos y ciclos de máquina
Bibliografía

2
INTRODUCCIÓN

La revolución tecnológica propiciada por la microelectrónica, comparable en magnitud e


importancia a la Revolución Industrial dentro del mundo digital, ha hecho posible el disponer
de todo un sistema de microcomputador en un solo circuito integrado a unos costos de
adquisición y operación muy bajos.
Actualmente, muchas compañías han desarrollado diferentes tipos de microprocesadores de 8,
16, 32 y 64 bits, todos ellos con ventajas y desventajas, si se compran entre sí. El
microprocesador Z-80 y sus circuitos periféricos de soporte, creados por el Zilog en 1976,
conforman uno de los mejores, más completos y más poderosos grupos dentro de los sistemas
procesadores de 8 bits.
Es cierto que el microprocesador Z-80 representa a una generación un tanto antigua, que en su
momento marcó pautas ahora disponibles y mejoradas en procesadores modernos y más
avanzados. Por otra parte, el Z-80 continúa aún vigente y los conceptos aprendidos sobre él y
afianzados con las prácticas, constituyen una formidable base para entender el funcionamiento
de cualquier otro microprocesador. Sobre este punto podría afirmarse que "Conocido un
Microprocesador, conocidos todos", obviamente que reconociendo las particularidades de
cada uno. La ventaja de iniciar el aprendizaje del funcionamiento de un microprocesador con
un dispositivo ya extensamente conocido, como un Z-80, que además de su sencillez posee
otras características especiales (tales como la disponibilidad de canales de datos y direcciones
separados, memoria en un solo bloque y un potente manejo de interrupciones), es que se
dispone fácilmente de mucha información.
Esta guía de prácticas de laboratorio introduce al estudiante en la ardua tarea de programar
microprocesadores en Lenguaje Assembler, colocando además los códigos de operación
manualmente en el sistema. El proceso, aunque se realice fundamentalmente con simuladores,
es lento y a veces tedioso, pero se compensa con un profundo conocimiento del
microprocesador como un poderoso dispositivo lógico programable, presente actualmente en
cualquier equipo electrónico. Las prácticas se inician con ejercicios muy simples, sin ser por
esto poco importantes, como la transferencia de datos y el manejo de las instrucciones
aritméticas y lógicas, llegando a la creación de programas más complejos en los que aparecen
las instrucciones para el manejo de bloques y búsqueda de datos. Antes de llegar a programas
complejos, se dan los elementos de diseño de bucles y subrutinas y se cubre casi todo el
conjunto de instrucciones de Z-80.
En cada una de las prácticas de laboratorio se entrega un soporte teórico para el entendimiento
y desarrollo de las mismas. Sin embargo, es aconsejable disponer, a manera de complemento
teórico, la información sobre los sistemas de desarrollo disponibles y el Conjunto (repertorio)
de Instrucciones de los Microprocesadores Z-80 con sus explicaciones. También, en cada
práctica, se insta al estudiante a realizar un programa propio.
El manual se divide en dos partes; en la primera se trabaja exclusivamente con los registros
internos y la memoria del sistema de prácticas para obtener un conocimiento general del
microprocesador y desarrollar habilidades para construcción de algoritmos y programas. En la

3
segunda parte se trabaja más internamente con el hardware al proponer una práctica en la que
se analizan aspectos relacionados con el mismo. En esta parte no se han planteado más
prácticas por cuanto ellas dependen en gran medida de la disponibilidad de elementos de
soporte en el laboratorio; además, el trabajo con periféricos se realizará utilizando
microcontroladores en un segundo curso. De todas formas, se deja a iniciativa del estudiante la
presentación de alguna práctica al respecto.
Se espera que este material brinde al estudiante las herramientas necesarias para entender
cabalmente el funcionamiento de un microprocesador y dejarlo preparado para trabajar de
manera idónea con cualquier procesador digital y a cualquier nivel.

4
PRACTICA No. 1
TRANSFERENCIA DE DATOS

1. OBJETIVOS
1.1 Familiarizar al estudiante con las funciones de las instrucciones de transferencia de datos.
1.2 Practicar el ajuste de valores iniciales.
1.3 Practicar el lenguaje de Máquina, cargando y ejecutando programas.

2. EQUIPO UTILIZADO
Simuladores y sistemas de desarrollo.

3. PROCEDIMIENTO
3.1 Escribir en programa en lenguajes Assembler y de Máquina para poner los contenidos de
los registros como sigue: A=00H, B=01H, C=02H, D=03H, E=04H, H=05H y L=06H (Utilizar
instrucciones LD de 8 bits para transferir un byte de dato a la vez).
3.2 Escribir un programa en Lenguajes Assembler y de Máquina para poner los contenidos de
los registros como sigue: B=12, C=34, D=56, E=78, H=9 y L=A (Utilizar instrucciones LD de
16 bits para transferir dos bytes de dato al tiempo)
3.3 Cargar un byte cualquiera en el registro B, y luego transferirlo a los registros C, D, E, H, L
y A, en el siguiente orden: de B a C, de C a D, de D a E, de E a H, de H a L y de L a A.
3.4 Repetir la secuencia indicada en el numeral anterior, pero antes de realizar la transferencia
de registros, alterar el valor de estos así: Incrementar B, C, D y decrementar E, H, L, A.
Inicializar B con valor igual a 60H.
3.5 El programa siguiente pone en cero los contenidos de 32 posiciones de memoria
diferentes; desde la dirección NNH hasta la dirección NN+20H.

LD B, 20H
LD HL, NNH ;NN Depende de la ubicación de la RAM en el
; mapa de memoria del equipo que está ;utilizando
LD A, 00H
BUCLE LD (HL), A
INC HL
DEC B
JP NZ, BUCLE
RST NH ;N depende del equipo que esté usando

5
Escribir el anterior programa en lenguaje de máquina, ejecutarlo en el sistema Micro-
Professor o MEUZ-80 y comprobar los resultados.
3.6 Escribir un programa en lenguajes Assembler y de Máquina para poner los contenidos de
las direcciones NNH-NN+FH como sigue: 0, 1, 2, …..F.

4. INFORME
4.1 Entregar el listado de los programas con una breve explicación de los mismos y con los
comentarios que se considere pertinentes.
Utilizar el siguiente formato para el listado de los programas:

DIRECCIÓN ETIQUETA CÓDIGOS DE LENGUAJE COMENTARIOS


DE MEMORIA OPERACIÓN ASSEMBLER

4.2 Realizar los diagramas de flujo correspondientes a los programas planteados en los
numerales 3.5 y 3.6.
4.3 Conclusiones
NOTA: Si por iniciativa propia realizó algún programa, por favor explíquelo.

5. COMPLEMENTO TEÓRICO
L a gran mayoría de las operaciones de transferencia de datos se realizan mediante la
utilización de las instrucciones LD (cargar). Los datos pueden transferirse en bloques de 8 bits
o de 16 bits en el caso específico del Z-80 y en general en los microprocesadores de 8 bits.
Las instrucciones del tipo LDD, LDI, LDDR, LDIR son utilizadas, sobre todo, para realizar
movimientos de un grupo de bytes. Estas instrucciones se estudiarán en una práctica de
laboratorio más adelante.
Las operaciones del tipo LD incluyen dos operandos. El primer operando, llamado destino,
representa el sitio (registro o memoria) donde se almacenará el dato. El segundo operando,
llamado fuente, representa el sitio (registro o memoria) de origen del dato. Estos son algunos
ejemplos de transferencia de datos

1. De registro a registro ej. LD B, C


2. De memoria a registro ej. LD A, (HL)
3. Un dato inmediato a registro ej. LD E, 20H
4. De registro a memoria ej. LD (HL), C

6
5. De memoria a memoria ej. LDDR
6. Un dato inmediato a memoria ej. LD (HL), 26H

7
PRACTICA No. 2
OPERACIONES ARITMÉTICAS Y LÓGICAS

1. OBJETIVOS
1.1 Estudiar el conjunto de instrucciones del Z-80 relacionado con las Operaciones
Aritméticas y Lógicas.
1.2 Entender el significado del Registro de Indicadores de Estado (Registro F).

2. EQUIPO Y MATERIALES
Simuladores y sistemas de desarrollo.

3. PROCEDIMIENTO
3.1 Escribir un programa en lenguajes Assembler y de Máquina para sumar los contenidos de
los registros D y E y almacenar el resultado en el registro par HL. (Nota: Debe tenerse en
cuenta el carry generado).
3.2 El siguiente programa suma un dato de 16 bits, contenido en dos posiciones de memoria
sucesivas NN H y NN+1H, con el valor del registro par DE. El resultado es almacenado en
registro par HL. Pasar el programa a Lenguaje de Máquina y comprobar resultados.

LD DE, dato
LD A, (NNH) ; Depende del equipo utilizado
ADD A, E
LD L, A ; ¿Por qué es esto posible?
ADC A, D
LD H, A
RST N ; Depende del equipo utilizado

3.3 Modificar el anterior programa para realizar una sustracción de 16 bits.


3.4 El siguiente programa suma dos números de 32 bits.
Los números en binario a sumarse deben almacenarse en 8 posiciones de memoria
consecutivas; por ejemplo, el primer sumando se almacena en NNH - NN+3H , el segundo en
NN+4 - NN+7H. El resultado se almacena en NN+8H - NN+BH. El byte de mayor orden se
almacena en la dirección más alta. Pasar el programa a Lenguaje de Máquina y comprobar
resultados.

LD B, 4H
LD IX, NNH

8
XOR A
BUCLE: LD A, (IX)
ADC A, (IX+4)
LD (IX+8), A
INC IX
DEC B
JP NZ, BUCLE
RSTN

3.5 Modificar el programa anterior para realizar una resta de 32 bits; además, insertar
adecuadamente la instrucción de Ajuste Decimal del Acumulador (DAA), de forma tal que los
resultados entregados por los programas de suma y resta sean codificados en BCD.
3.6 Escribir un programa que realice una operación lógica AND entre el contenido del par de
registros BC y DE, y almacenar el resultado en el registro par HL.

4. INFORME
4.1 Entregar el listado, comentarios y resultados obtenidos de cada uno de los programas
ejecutados. Si se ejecutó algún programa por iniciativa propia, por favor informarlo.
4.2 Conclusiones

5. COMPLEMENTO TEÓRICO
Las operaciones aritméticas y lógicas definidas en el Z-80 son efectuadas en el registro A
(Acumulador), además se utilizan como operandos los registros A, B, C, D, E, H y L. También
se utilizan como operando la memoria apuntada por HL y los registros índice IX o IY.
El grupo de instrucciones aritméticas de 8 bits abarca las operaciones de suma y resta entre
bytes. Las instrucciones INC y DEC suman o restan 01H a un operando especificado. Las
instrucciones de ADD y SUB determinan el operando que se ha de sumar o restar con el
contenido de A y el resultado se almacena en A.
El Z-80 posee un grupo de operaciones aritméticas de 16 bits definidas de forma análoga como
para los 8 bits. Los operandos utilizados son los pares de registros de 16 bits: BC, DE, HL, SP,
IX e IY.

9
PRACTICA No. 3
INSTRUCCIONES DE SALTO Y PROGRAMAS DE BUCLES

1. OBJETIVOS
1.1 Estudiar la transferencia del control del programa analizando los cambios en el registro
contador de programa (PC).
1.2 Introducir las técnicas de diseño de programas de Bucles.
1.3 Practicar el uso de los flags de Estado en instrucciones de decisión.

2. EQUIPO Y MATERIALES
Simuladores y sistemas de desarrollo.

3. PROCEDIMIENTO
3.1 Programa de Retardo
3.1.1 Para determinar el tiempo requerido para ejecutar una instrucción, debe multiplicarse el
número de estados necesarios para ejecutar esa instrucción por el tiempo del estado de reloj de
microprocesador. Conociendo la frecuencia de operación del Microprocesador Z-80 en el
Sistema con el que está trabajando, el siguiente programa está diseñado para proporcionar un
retardo de 200 mseg. Ensamblarlo, ejecutarlo y comprobar resultados.
Programa Generador de Retardo

DELAY 1: LD E, 00H ; Cargar E con 0 decimal


LD D, xxH ; Cargar D
WAIT: DEC E
JR NZ, WAIT ; Si E≠0 retorna a WAIT
DEC D ; Si E=0 Decrementar D
JR NZ, WAIT ; Si D≠0 retorna a WAIT
RST NH ; Si E=0 Fin del programa

3.1.2 Tomado como base de tiempo el programa anterior, diseñar un programa que genere un
retardo de 30 segundos. Escribirlo en lenguaje de máquina, ejecutarlo en sistema y comprobar
resultados.
3.2 Bucles Anidados

10
3.2.1 En programas más complicados, un bucle puede estar totalmente animada, o sea dentro
de otro bucle. El siguiente programa muestra tal configuración, y además ilustra la utilización
de la instrucción DJNZ para implementar un bucle de retardo.

LD B, 09H ; Inicializar registro B


BUCLE 1: LD C, 00H ; Inicializar registro C
BUCLE 2: LD D, 00H ; Inicializar registro D
BUCLE 3: DEC D
JR NZ, BUCLE 3 ; Bucle más interna
DEC C
JR NZ, BUCLE2 ; Bucle intermedio
DJ NZ BUCLE1 ; Bucle más externa
RST NH

Ensamblar el programa anterior y ejecutarlo con diferentes valores iniciales para el registro B.
3.2.2 Escribir un programa que divida los 256 bytes de datos almacenados en memoria en l6
grupos. La dirección de inicio de la memoria es NNH. Poner los contenidos de cada grupo de
datos en forma de un número hexadecimal.
0. . . (1er Grupo), 1. . . (2º Grupo), 2. . . (3er Grupo),. . . . , F. . . (16º Grupo).

4. INFORME
4.1 Entregar el diagrama de flujo, el listado, comentarios y resultados obtenidos de cada uno
de los programas ejecutados. Si ejecutó algún programa por propia iniciativa, por favor
informarlo.
4.2 Conclusiones

5. COMPLEMENTO TEÓRICO
5.1 Programas de Bucles
Una de las ventajas importantes de un microprocesador es que éste puede ejecutar los pasos en
una tarea repetitiva tantas veces como sea necesario para completar un proceso. Esta labor se
cumple diseñando adecuadamente un programa en bucle. Un bucle básico debe contener lo
siguiente:
• Ajuste de un contador de ciclos con el número de lazos a ser ejecutados. Usualmente, se
utiliza un registro de la CPU como el contador de Lazo. Por supuesto que un registro de la
memoria también puede utilizarse como contador.
• El contador de bucle es decrementado por 1 después de ejecutar un ciclo de bucle. Luego de
cada ciclo debe chequearse el valor del lazo. Si el contador no es cero, entonces la bucle se
repite hasta que el contador de bucle es igual a 0.

11
5.2 Saltos Absolutos y Saltos Relativos
Las instrucciones del tipo JP se definen como de salto absoluto porque la dirección de salto de
16 bits hace parte de la instrucción. Los saltos relativos (JR),en cambio, especifican un
desplazamiento en complemento a dos en un byte de la instrucción; así, la ejecución de un
salto relativo incluye un paso extra para determinar la dirección del salto a partir de la suma
del valor del PC actualizado y del byte de desplazamiento.
Un error que comúnmente se comete consiste en determinar el byte de desplazamiento referido
al PC antes de la ejecución de la instrucción JR. Esto es incorrecto e invariablemente genera
conflictos. El desplazamiento para una instrucción de salto relativo debe determinarse siempre
con relación a la primera posición después de la instrucción de dos bytes JR.

12
PRACTICA No. 4
OPERACIONES CON EL STACK SUBRUTINAS

1. OBJETIVOS
1.1 Estudiar los llamados a subrutinas y retorno haciendo referencia a los cambios ocurridos en
el registro contador de programa (PC), el indicador de Stack (SP), y el Stack.
1.2 Introducir las técnicas de diseño y aplicaciones de las subrutinas

2. EQUIPO Y MATERIALES
Simuladores y sistemas de desarrollo.

3. PROCEDIMIENTO
3.1 Utilizando las operaciones con el Stack, escribir una rutina para mover los datos
almacenados en HL, DE y BC, hacia BC, HL y DE respectivamente.
3.2 Solucionar el problema planteado en la sección 3.2.1 de Bucles anidadas de la Práctica de
Laboratorio No.3, utilizando únicamente como contador el registro B. Como ejemplo de este
tipo de aplicaciones, se puede tomar el siguiente programa, cuya función es desplazar 4 bits
hacia la izquierda de cada uno de los bytes almacenados en las direcciones NN - NN+20H.

LD B, 21H
LD HL, NNH
BUCLE1: PUSH BC
LD A, (HL)
LD B, 4H
BUCLE 2: ADD A, A
DJNZ BUCLE2
LD (HL), A
INC HL
POP BC
DJNZ BUCLE1
RST NH

3.3 Escribir un programa para generar un retardo de 30 segundos, utilizando el programa de la


práctica No. 3 de generación de retardos de 200 mseg como un subrutina del programa
principal. El anterior programa, de retardo de 30 segundos, utilizarlo a su vez como una
subrutina para diseñar un programa que genere un retardo de 2 minutos.
3.4 La siguiente subrutina cambia los 16 bits del registro HL a su complemento a dos:

13
COMP2: PUSH AF
LD A, L
CPL ; Complemento a 1 de L
LD L, A
LD A, H
CPL ; Complemento a 1 de H
LD H, A
INC HL ; Complemento a 2 de HL

Escribir un programa para cambiar los contenidos de IX e IY a su complemento a dos. Nota:


utilizar la subrutina COMP2.

4. INFORME
4.1 Entregar el listado de los programas con una breve explicación de los mismos y con los
comentarios que se considere pertinentes.
4.2 Explicar en forma de bloque, la ejecución de los programas planteados en el numeral 3.3.
del procedimiento.
4.3 Conclusiones
NOTA: Si por iniciativa propia realizó algún programa, por favor infórmelo.

5. COMPLEMENTO TEÓRICO
Cuando se está trabajando con un programa de extensión considerable, o se recurre a un
mismo bloque de instrucciones en diferentes sitios del programa, entonces es aconsejable
utilizar las subrutinas como técnica de programación.
Las subrutinas reducen el espacio de memoria utilizado por un programa, reducen la
probabilidad de cometer errores y además facilitan el mantenimiento o actualización del
software de un sistema.
Una instrucción de "llamada de subrutina" (CALL) es semejante a una instrucción del salto,
pero esta instrucción almacena en el Stack el contenido del PC, o sea que mantiene en
memoria la dirección desde donde se originó el salto. La instrucción retorno (RET), toma el
valor de PC almacenado antes del salto y lo carga nuevamente en PC ejecutando entonces la
instrucción siguiente a la última llamada ejecutada.
En consecuencia, las instrucciones CALL (llamada) y RET (retorno) presentan una gran
utilidad, pues permiten que el mismo bloque de instrucciones sea ejecutado en diferentes
sitios, no solo de un programa principal sino de diversos programas.
En esta práctica se ha desarrollado un programa que permite realizar el complemento a dos de
un número. El objetivo es de tipo didáctico, pues el microprocesador Z-80 posee una

14
instrucción (NEG) que permite hacerlo de manera directa, función no común en otros
procesadores.

15
PRACTICA No. 5

INSTRUCCIONES DE MANIPULACIÓN DE BITS, ROTACIÓN Y


DESPLAZAMIENTO

1. OBJETIVOS
1.1 Estudiar el conjunto de instrucciones de prueba y manipulación de bits: BIT, SET y
RESET.
1.2 Estudiar las instrucciones de rotación y desplazamiento.
1.3 Mostrar algunas aplicaciones de las instrucciones de manipulación de bits, rotación y
desplazamiento.

2. EQUIPO Y MATERIALES
Simuladores y sistemas de desarrollo.

3. PROCEDIMIENTO
3.1 El siguiente programa es una aplicación de las instrucciones de rotación y prueba de bit.
En este programa se encuentra el bit de mayor orden que es diferente de cero en el Registro
Acumulador.

LD A, Byte ; Cargar A con el byte a probar


LD C, 08H ; Contador de bit
TEST: DEC C ; Actualizar el contador del bit.
JP M, END ; Control de bytes probados
RL A ; Llevar el MSB a C
JP NC, TEST ; Probar si el bit es 0 ó 1
END: RST NH ; Fin del programa.

Analizar el programa, ensamblarlo y ejecutarlo. Comprobar resultados para diferentes valores


en A.
3.2 Diseñar un programa para efectuar la prueba descrita en el numeral 3.1, a un bloque de
memoria localizado en RAM; y almacenar los resultados en otro bloque de memoria.
(SUGERENCIA: Utilizar el programa anterior como bloque constitutivo de un bucle, o como
una subrutina de un programa principal).
3.3 El programa listado abajo decodifica la información en binario del registro C y luego la
codifica en ASCII.

16
En la siguiente tabla se muestra la representación ASCII de los números 0 al 9.

Número Decimal Número Binario Representación ASCII en Hex.


0 00000000 30
1 00000001 31
2 00000010 32
3 00000011 33
4 00000100 34
5 00000101 35
6 00000110 36
7 00000111 37
8 00001000 38
9 00001001 39

El programa toma el número en binario almacenado en C y lo convierte a una representación


ASCII; es decir, toma los caracteres 0 y 1, y entrega la correspondiente secuencia de 30 y 31
almacenada en memoria, a partir de la posición NNH.

LD C, DATO ; Dato a codificar en ASCII


LD B, 08H ; Contador de bit
LD HL, NNH ; Puntero de memoria
TEST: LD (HL), 30H ; Cero en ASCII
BIT 0, C ; Prueba del bit
JRZ CERO ; Si es cero pasar a un nuevo bit.
INC (HL) ; Uno en ASCII
CERO: INC HL
RR B ; Desplazar para probar un nuevo bit
DJNZ TEST ;¿Hay un nuevo bit a probar?
RST NH

Analizar el programa, ensamblarlo y ejecutarlo para diferentes valores de C y comprobar


resultados. (Opcionalmente, plantear un problema similar al del numeral 3.2., pero aplicable al
caso del numeral 3.3).
3.4 Diseñar un programa para realizar la operación contraria a la planteada en 3.3, es decir,
para convertir ASCII a representación binaria. (SUGERENCIA: Mover el bit menos
significativo del byte a convertir en binario hacia el carry, y luego desplazar el carry hacia un
registro cualquiera de la CPU).

17
4. INFORME
4.1 Presentar los diagramas de flujo, listado y comentarios de los programas ejecutados en el
laboratorio.
4.2 Conclusiones
NOTA: Si por propia iniciativa ejecutó un programa diferente a los propuestos, por favor
infórmelo.

5. COMPLEMENTO TEÓRICO
El objetivo de este laboratorio es el de estudiar el grupo de instrucciones de manipulación de
Bits, de rotación y desplazamiento. Este grupo es muy importante pues hacen del Z-80 uno de
los más poderosos dentro del conjunto de microprocesadores de 8 bits, pues no muchos de
ellos las tienen (manipulación de bits). Este tipo de instrucciones son comunes en los
microcontroladores y en otros procesadores avanzados y son de gran utilidad en aplicaciones
de control secuencial.

18
PRACTICA No. 6
OPERACIONES ARITMÉTICAS

1. OBJETIVOS
1.1 Adquirir una visión global del conjunto de instrucciones del Z-80 aplicada en la solución
de un problema específico.
1.2 Entregar al estudiante un grupo de programas ejemplo, que sirvan de soporte para futuros
desarrollos.

2. EQUIPO Y MATERIALES
Simuladores y sistemas de desarrollo.

3. PROCEDIMIENTO
3.1 Adición Decimal
El programa siguiente ejecuta la suma de dos números de 4 dígitos codificados en BCD. Los
números se escriben previamente en las direcciones NNH, NN+2H (para el primer sumando),
y NN+1H, NN+3H (para el segundo sumando). El resultado es almacenado en las posiciones
de memoria apuntadas por NN+1H y NN+3H.
El programa fuente es el siguiente:

SUMA: LD B, 03H ; Inicio del contador


X0R A ; Borrador de A y CY
LD HL, NNH ; Inicio de puntero
INICIO: LD A, (HL)
INC HL
ADC A, (HL)
DAA
LD (HL), A
INC HL
DJNZ INICIO
FIN

Los datos deben almacenarse así:


NNH: Dato a2 a1
NN+1H: Dato b2 b1
NN+2H: Dato a4 a3
NN+3H: Dato b4 b3

19
Analizar el programa anterior, ensamblarlo, ejecutarlo y comprobar resultados para diferentes
datos.
3.2 Multiplicación Binaria (8 bits).
El problema planteado es el siguiente: Diseñar un programa que permita el cálculo del
producto de dos número binarios A y B de 8 bits, previamente almacenados en dos posiciones
de memoria específicas. El resultado se almacenará en el par de registros HL.
Para solucionar el problema planteado se toma el siguiente algoritmo:
La multiplicación binaria es una sucesión de sumas y desplazamientos. Como ejemplo se
puede tomar la multiplicación de dos números de 3 bits: A=010 y B=110

010 A La multiplicación de A por el primer


x1 1 0 B Bit de B (LSB) resulta: A x 0 = 0
0 0 0

0 10 A La multiplicación de A por el segundo


x1 1 0 B Bit de B da el segundo resultado
000 Parcial: A x 1 = A. Este resultado es
+0 1 0 desplazado hacia la izquierda antes de
0100 sumarse al precedente.

0 1 0 A La Multiplicación de A por el tercer


x1 1 0 B bit de B da el tercer resultado parcial:
0 0 0 A x 1 = A . Este resultado es desplazado
+ 0 1 0 hacia la izquierda dos lugares., antes de
0 1 0 0 sumarlo al resultado precedente.
+ 0 1 0______ _
0 11 0 0
Con base en este algoritmo se ha diseñado el siguiente programa que soluciona el problema
planteado así:

Datos almacenados: NNH: Dato A


NN+1H: Dato B
Programa Fuente:
LD B, 08H ; Inicio del contador
LD HL, NNH ; Inicio del puntero
LD E, (HL)
INC HL
LD C, (HL)
LD D, 00H
LD HL, 0000H

20
TEST: RRC C
JP NC, ROT
ADD HL, DE
ROT: SLA E
RL D
DJNZ TEST
FIN

3. 3 Multiplicación Binaria (32 Bits)


Escribir un programa para multiplicar los 32 bits del dato almacenado en las posiciones de
memoria NNH - NN+3H, por el dato de 32 bits almacenado en las posiciones de memoria
NN+4H - NN+7H.
Nota: La solución de este programa se deja como opcional, dada la complejidad del mismo
para el nivel de conocimientos del estudiante

3. 4 Multiplicación Decimal
La solución al problema de realizar la multiplicación decimal de dos números en BCD, A y B,
de dos dígitos es básicamente una aplicación del concepto de subrutinas, ya que multiplicar 3
por 4 es los mismo que sumar 3 consigo mismo 4 veces; por lo tanto, la multiplicación
decimal va a efectuar recurriendo al programa de adición decimal.
Los números A y B a sumar deben almacenarse previamente en las posiciones NNH y NN+1H.
El resultado se encontrará en las direcciones NN+1H (LSB) y NN+3H (MSD).
Programa Fuente:
MULT_DEC: LD HL, NN+1H ; Cargar el número B en
LD C, (HL) ; el registro C
LD (HL), 00H
XOR A
ADD A, C
BUCLE: JR Z, FIN
PUSH AF ; Preservación del acumulador.
CALL SUMA
POP AF ; Restitución del Acumulador.
ADD A, 99 ; Descrementar 1BCD
DAA
JR BUCLE
FIN: FIN

4. INFORME
4.1 Entregar el diagrama de flujo, el listado, los resultados obtenidos y una explicación de cada
uno de los programas ejecutados en el laboratorio.

21
4.2 Conclusiones.

5. COMPLEMENTO TEÓRICO
Las operaciones aritméticas constituyen un grupo de instrucciones indispensables en un
microprocesador, pues la mayoría de sus aplicaciones requieren de ellas en algún momento.
Una de las características que diferencian un procesador de otro es la potencia de tales
operaciones, especialmente en eficiencia. El microprocesador Z-80 posee un amplio y potente
conjunto de instrucciones aritméticas para 8 bits y uno más limitado para operaciones a 16
bits. Para su estudio se proponen algunos ejercicios que muestran la forma de efectuar
operaciones a 16 y 32 bits con este procesador.

22
PRACTICA No. 7
TRANSFERENCIA Y BÚSQUEDA DE BLOQUE DE DATOS

1. OBJETIVOS
1.1 Estudiar las instrucciones del Z–80 especialmente diseñadas para mover bloques de datos
desde una posición de memoria a otra.
1.2 Estudiar las instrucciones de búsqueda de bloques de datos y comparación.

2. EQUIPO Y MATERIALES
Simuladores y sistemas de desarrollo.

3. PROCEDIMIENTO
3.1 Mover un bloque de memoria de 16 bytes, comprendido entre las posiciones NNH y
NN+FH, hacia otro bloque de memoria que inicie en NN+10H. Solucionar el problema de dos
maneras así:
♦ Únicamente utilizando la instrucción LDD o LDI.
♦ Utilizando cualquiera de las instrucciones LDDR o LDIR.
3. 2 Transferir un bloque de memoria que empieza en la dirección NNH y su final está
indicado por el valor 00H en una posición de memoria cualquiera. (SUGERENCIA: Antes de
transferir el nuevo dato determina si éste es igual o diferente de cero).
3.3 El siguiente programa es una aplicación de las instrucciones de búsqueda de bloque de
datos. El programa busca un caracter específico dentro de una serie de caracteres
determinados.

LD HL, NNH ; Dirección inicial de la serie


; de caracteres
LD BC, 0010H ; Número de caracteres
; a comparar
LD A, 39H ; Caracter a localizar
CPIR ; Búsqueda de 39H
JP NZ, NOCAR ; Sí Z=0, no se ha encontrado el caracter
DEC HL ; Apuntar con HL el caracter
INC BC ; Entregar la posición relativa del
;caracter
NOCAR: FIN

23
Analizar el anterior programa, escribir una serie de caracteres que contenga el caracter a
buscar, ensamblar el anterior programa y ejecutarlo para comprobar resultados.
Repetir el proceso para diferentes casos y para uno en el cual el caracter a canalcar no haga
parte de la serie de caracteres.

4. INFORME
4.1 Entregar el diagrama de flujo, el listado, los resultados obtenidos y una explicación de cada
uno de los programas ejecutados en el laboratorio.
4.2 Conclusiones
NOTA: Si por propia iniciativa ejecutó un programa diferente a los propuestos, por favor
infórmelo.

5. COMPLEMENTO TEÓRICO
Las operaciones de manipulación de bloques de datos representan una herramienta poderosa
para el tratamiento automático de información, aplicación común de los computadores. El
microprocesador Z-80 posee cuatro instrucciones especializadas para la transferencia de
bloques de datos y cuatro instrucciones especializadas para la búsqueda de datos. Ellas son
otras de las particularidades excepcionales de este procesador y que actualmente se encuentran
en los modernos procesadores de 16 y 32 bits.

24
PRACTICA No. 8
TIEMPOS Y CICLOS DE MAQUINA

1. OBJETIVOS
Observar y analizar las señales de reloj, estados de reloj, ciclos de máquina y ciclos de
instrucción en el microprocesador Z–80.

2. EQUIPO Y MATERIALES
• Sistema de desarrollo y simulador.
• Osciloscopio.
• Cables

3. PROCEDIMIENTO
En esta práctica y en las que siguen (opcionales), es imprescindible ser muy cuidadosos por
cuanto se trabajará con el hardware del sistema y si no se toman en cuenta las medidas
necesarias, pueden dañarse los equipos.
3.1 Con este primer ejercicio se pretende analizar el ciclo de máquina /M1 (fetch). Para ello
escriba en memoria el siguiente programa:

BUCLE: INC B
JP BUCLE

3.1.1 Unifique las tierras del osciloscopio y del microprocesador. Con la señal de reloj
sincronice externamente el osciloscopio y observe las señales CLK, /RD, /M1, /MREQ y
/RFSH.
3.1.2 Con la señal /M1 sincronice externamente el osciloscopio y determine los contenidos
del canal de direcciones para los dos ciclos de búsqueda de código. Realice lo mismo con
algunas de las líneas del canal de datos, determinando en que momento se dispone de un
dato válido.
3. 2 Para estudiar el ciclo de máquina de lectura escriba el siguiente programa en memoria:

LD HL, NNH
LD (HL), F3H

25
BUCLE: LD B, (HL)
JP BUCLE

3.2.1 Sincronice externamente el osciloscopio con la señal /M1 y observe las señales CLK,
/MREQ, /RD, /WR y /M1.
3.2.2 Sincronice ahora el osciloscopio con la señal /RD y con el apoyo de /M1 determine el
instante en donde el canal de datos se estabiliza para que el microprocesador pueda leer el
contenido de memoria seleccionado. Confirme el contenido leyendo el canal de datos.
3.3 Para estudiar el ciclo de escritura escriba en memoria el siguiente programa:

LD HL, NNH
LD A, C5H
BUCLE: LD (HL), A
JP BUCLE

Repetir el proceso anterior pero sincronizando ahora el osciloscopio con la señal /WR.
3.4 Estudiaremos ahora los ciclos para instrucciones I/O. En primer lugar analizaremos los
ciclos para lectura; para ello escribir en memoria el siguiente programa:

BUCLE: IN A, (NH) ;N depende del hardware conque


;esté trabajando
JP BUCLE

Sincronice el osciloscopio con la señal /IORQ y observe las señales CLK, /IORQ, /RD y /WR.
Efectúe los procedimientos anteriores realizados para las operaciones con memoria pero
mirando independientemente los contenidos de las partes alta y baja del canal de direcciones.
3.5 Repetir el procedimiento anterior para los ciclos de escritura en puertos. Válgase del
programa siguiente:

BUCLE: OUT (NH), A


JP BUCLE

4. INFORME
4.1 Realizar los diagramas de tiempo correspondientes a cada ejercicio y explicar los
procedimientos.
4.2 Conclusiones

26
NOTA: Si por propia iniciativa ejecutó un programa diferente a los propuestos, por favor
infórmelo.

5. COMPLEMENTO TEÓRICO
Para todas las instrucciones que ejecuta un microprocesador este debe cumplir con unos ciclos
determinados por el diseño del hardware y por lo tanto se requieren unos ciclos de tiempo
específicos para cada instrucción. El microprocesador Z-80 presenta unas ventajas didácticas
debidas a su baja velocidad de operación y la posibilidad de observar fácilmente en los canales
los ciclos de instrucciones y de máquina.

27
PRACTICA No. 9
INTERFACES Y DISPOSITIVOS I/O

1. OBJETIVOS
Estudiar el funcionamiento de las operaciones de entrada/salida y las instrucciones
correspondientes en el microprocesador Z–80.

2. EQUIPO Y MATERIALES
• Sistema de desarrollo y simulador.
• 2 circuitos integrados 74xx373 de 8 biestables.
• Un LED.
• Dos resistencias (330 Ohms y 10k) de ½ vatio.
• Conectores
• Cables

3. PROCEDIMIENTO
En esta práctica y en las que siguen (opcionales), es imprescindible ser muy cuidadosos por
cuanto se trabajará con el hardware del sistema y si no se toman en cuenta las medidas
necesarias, pueden dañarse los equipos.
3.1 Realice el montaje de la figura adjunta teniendo en cuenta que la señal /CS se tomará de
una línea libre y disponible del decodificador de dispositivos externos del equipo. Si es
preciso, adicione la circuitería necesaria para ubicar los nuevos periféricos en un espacio de
memoria I/O libre.
3.2 Escriba un programa que permita realizar la lectura de la activación del interruptor y que
en consecuencia encienda y apague el led.

28
5V

EN
10K
D0 1Q 1D

DATA BUS

OC 8D
D7
RD
1
CS
Gnd

1 5V
WR 330

EN
D0 1D 1Q
DATA BUS

OC 8Q
D7

Gnd

4. INFORME
4.1 Realizar los diagramas de tiempo correspondientes a cada ejercicio y explicar los
procedimientos.
4.2 Conclusiones
NOTA: Si por propia iniciativa ejecutó un programa diferente a los propuestos, por favor
infórmelo.

5. COMPLEMENTO TEÓRICO
Uno de los aspectos más importantes de los microprocesadores lo constituyen sus capacidades
para interactuar con el mundo real, lo cual pueden llevar a cabo gracias la implementación de
circuitos de interfaz más o menos complejos para la implantación de puertos del sistema. Esta
circuitería permite ubicar los dispositivos externos en direcciones específicas de la memoria

29
del sistema, establecer protocolos y realizar la interfaz entre características físicas diferentes de
cada sub-sistema.

30
BIBLIOGRAFÍA

ACER, MPF-IP Experiment guide, 1988.


URUÑUELA, J.M. Microprocesadores, programación e interconexión. Ed. McGraw-Hill, 2ª.
Edición 1990. Méjico.
BREY, B. Los microprocesadores Intel, arquitectura, programación e interfaces. 3ª edición.
Prentice - Hall, 1995. Méjico.

31

También podría gustarte