Sie sind auf Seite 1von 31
PRÁCTICAS DE LABORATORIO CON EL MICROPROCESADOR Z-80 Eric Vallejo R. enero de 2010

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

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

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.

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.

BUCLE

LD B, 20H LD HL, NNH

LD A, 00H LD (HL), A INC HL DEC B JP NZ, BUCLE RST NH

;NN Depende de la ubicación de la RAM en el

; mapa de

memoria del equipo que está ;utilizando

;N depende del equipo que esté usando

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, …

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

5. De memoria a memoria

ej.

LDDR

6. Un dato inmediato a memoria

ej.

LD (HL), 26H

PRACTICA No. 2

OPERACIONES ARITMÉTICAS Y LÓGICAS

1. OBJETIVOS

1.1 Estudiar

Aritméticas y Lógicas.

el

conjunto

de

instrucciones

del

Z-80

relacionado

con

las

Operaciones

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) ADD A, E LD L, A ADC A, D LD H, A RST N

; Depende del equipo utilizado

; ¿Por qué es esto posible?

; 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

BUCLE:

XOR A 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.

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 LD D, xxH

; Cargar E con 0 decimal ; 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

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 DJ NZ BUCLE1 RST NH

; Bucle intermedio ; Bucle más externa

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.

(1er Grupo),

(2º Grupo),

(3er

,

(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.

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.

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:

COMP2:

PUSH AF LD A, L CPL LD L, A LD A, H CPL LD H, A INC HL

; Complemento a 1 de L

; Complemento a 1 de H

; 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

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

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.

TEST:

LD A, Byte LD C, 08H DEC C

; Cargar A con el byte a probar ; Contador de bit ; Actualizar el contador del bit.

END:

JP M, END RL A JP NC, TEST RST NH

; Control de bytes probados ; Llevar el MSB a C ; Probar si el bit es 0 ó 1 ; 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.

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

0 0 0 0 0 0 0 0

30

1

0 0 0 0 0 0 0 1

3 1

2

0 0 0 0 0 0 1 0

3 2

3

0 0 0 0 0 0 1 1

3 3

4

0 0 0 0 0 1 0 0

3 4

5

0 0 0 0 0 1 0 1

3 5

6

0 0 0 0 0 1 1 0

3 6

7

0 0 0 0 0 1 1 1

3 7

8

0 0 0 0 1 0 0 0

3 8

9

0 0 0 0 1 0 0 1

3 9

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.

TEST:

LD C, DATO LD B, 08H LD HL, NNH LD (HL), 30H BIT 0, C JRZ CERO INC (HL)

; Dato a codificar en ASCII ; Contador de bit ; Puntero de memoria ; Cero en ASCII ; Prueba del bit ; Si es cero pasar a un nuevo bit. ; Uno en ASCII

CERO:

INC HL

RR B DJNZ TEST RST NH

; Desplazar para probar un nuevo bit ;¿Hay un nuevo bit a probar?

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).

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.

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 X0R A LD HL, NNH

; Inicio del contador ; Borrador de A y CY ; Inicio de puntero

INICIO:

LD A, (HL) INC HL ADC A, (HL) DAA LD (HL), A INC HL DJNZ INICIO F I N

Los datos deben almacenarse así:

NNH:

Dato

a 2 a 1

a 4 a 3

NN+1H:

Dato b 2 b 1

NN+2H:

NN+3H:

Dato

Dato b 4 b 3

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

0 1 0

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

1 0

 

A

La multiplicación de A por el segundo Bit de B da el segundo resultado Parcial: A x 1 = A. Este resultado es

desplazado hacia la izquierda antes de sumarse al precedente.

 

x1 1 0 0 0 0 +0 1 0

B

0 1 0 0

 
 

0

1

0

A

La Multiplicación de A por el tercer bit de B da el tercer resultado parcial:

 

x1 1

0

B

0

0

0

A

x 1 = A . Este resultado es desplazado

+

0

1

0

hacia la izquierda dos lugares., antes de sumarlo al resultado precedente.

 

0

1

0

0

+

0

1 0

 

_

0

1 1

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 LD HL, NNH LD E, (HL) INC HL LD C, (HL) LD D, 00H LD HL, 0000H

; Inicio del contador ; Inicio del puntero

TEST:

RRC C

ROT:

JP NC, ROT ADD HL, DE SLA E RL D DJNZ TEST F I N

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 LD C, (HL) LD (HL), 00H XOR A ADD A, C

; Cargar el número B en ; el registro C

BUCLE:

JR Z, FIN

PUSH AF

; Preservación del acumulador.

CALL SUMA POP AF ADD A, 99

; Restitución del Acumulador. ; Descrementar 1BCD

FIN:

DAA JR BUCLE 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.

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.

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 CPIR JP NZ, NOCAR DEC HL INC BC

; Caracter a localizar ; Búsqueda de 39H ; Sí Z=0, no se ha encontrado el caracter ; Apuntar con HL el caracter ; Entregar la posición relativa del ;caracter

NOCAR:

FIN

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.

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

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:

BUCLE:

LD HL, NNH LD A, C5H 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

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.

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.

5V

EN 10K D0 1Q 1D OC 8D D7 RD 1 Gnd CS 1 5V WR
EN
10K
D0
1Q
1D
OC
8D
D7
RD
1
Gnd
CS
1 5V
WR
330
EN
D0
1D
1Q
OC
8Q
D7
DATA BUS
DATA BUS

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

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

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.