Академический Документы
Профессиональный Документы
Культура Документы
Telecomunicaciones
Asignatura: Microprocesadores
NRC: 3193
2. Objetivos:
General:
Aprender la programación del microprocesador Z80 en lenguaje
Ensamblador utilizando el software de simulación Z80 Simulator IDE
mediante la realización de ejercicios de aplicación.
Específicos:
Conocer el set de instrucciones que posee el microprocesador Z80.
Familiarizarse con el entorno del software Z80 Simulator IDE así como
aprender a utilizar todas sus herramientas.
Dar solución a problemas de la vida real mediante la programación en
Ensamblador.
3. Software
Z80 Simulator IDE
4. Marco Teórico
Microprocesador Z80
(Zilog, 2018)
Los registros de uso general pueden ser vistos como memoria muy rápida,
y por lo tanto privilegiada, de la que dispone el microprocesador. Puede
realizarse una transferencia de datos directamente entre cualquiera de
ellos y memoria, y, además, pueden utilizarse como segundo operando
en las operaciones lógicas y aritméticas.
Son los registros A, F, A’, F’, IX, IY, SP, PC, I y R. Alguno de ellos son
registros de 8 bits y otros son de 16 bits.
S – Signo
Z – Cero
H – Acarreo del tercer al cuarto bit para operaciones BCD.
P/V – Doble próposito: paridad / overflow
N – Bandera de resta, para resta BCD.
C –Carry
(Universidad de la Republica de Uruguay, 2018)
Registro PC
Registro IY
Registros I y R
Registro SP
La pila es una estructura de datos LIFO (last in, first out) es decir, el último
que entro es el primero en salir, en la Figura 5 se presenta el esquema de
un “stack”. La operación de poner un dato en el stack, será PUSH
(empujar) y la de extraer un dato, POP.
(Universidad de la Republica de Uruguay, 2018)
Transferencia e
Intercambio
Transferencia de
bloques y búsqueda
Tipos de Instrucciones
Aritmética y lógica
Girar y desplazar
Manipulación de bits
(set, reset, test)
Transferencia de
control
Entrada / Salida
Control básico de la
CPU
(Zilog, 2018)
Instrucciones de transferencia de datos
LD B, 38H
LD IX, 48F3H
LD BC, (3DB1)
Instrucciones de intercambio
Permiten:
Intercambiar datos entre registros de 16 bits de un mismo banco de
registros.
EX DE, HL
Intercambiar acumulador y palabra de estado inactivo por activo:
EX AF, AF’
Intercambiar banco de registros de uso general activo e inactivo:
EXX
Intercambiar el último dato del stack con HL, IX e IY:
EX (SP), IX
Instrucciones de búsqueda
A: Contiene la "clave"
BC: Tamaño del bloque, como en el caso anterior.
HL: Dirección de comienzo.
Se utilizan para sumar, restar, comparar, hacer AND, OR, XOR entre 2
operandos de 8 bits, uno de los cuales está en el acumulador.
Existen 2 variedades de suma: ADD y ADC. La primera es la suma común
de dos datos de 8 bits. La segunda, además de la suma entre los 2
operandos, suma el contenido de la bandera de Carry: esto es útil para
trabajar con números de más de 8 bits.
Lo mismo es cierto para "el préstamo" de la resta, por lo cual existen dos
restas, la común SUB y SBC, que efectúa la resta común y al resultado le
resta el contenido anterior del carry.
Una instrucción muy interesante es la de comparación. Si efectuamos:
CP operando_8_bits el microprocesador efectúa la resta,
A-operando_8_bits,
y afecta las banderas de cero, signo, acarreo y H, pero descarta el
resultado de la resta, es decir, no lo guarda.
RES 4, (HL)
Definición de la solución
Diagrama de Flujo
INICIO
N1=0,
N2=0, R=0
R=N1+N2
"Resultado= “, R
FIN
Código en Ensamblador
INICIO:
LD SP,1500H ;INICIALIZACION DE LA PILA (1500H)
LD HL,1000H ;INICIALIZACION DE LA RAM (1000H)
JP PROGRAMA
INPUT_VARIABLE:
IN A,(02H)
LD (HL),A
RET
SUMA:
ADD A,(HL)
DAA
RET
OUTPUT_VARIABLE:
OUT (03H),A
RET
PROGRAMA:
CALL INPUT_VARIABLE
INC HL
CALL INPUT_VARIABLE
DEC HL
CALL SUMA
CALL OUTPUT_VARIABLE
HALT
END
Prueba de funcionamiento
Definición de la solución
2+2+2+2+2 = 10,
Diagrama de Flujo
N1=0,
N2=0, R=0
Decremento
N1
NO
R=R+N2 N1 =0
SI
"Resultado= “, R
FIN
Programa
Código en Ensamblador
INICIO:
LD SP,1500H ;inicializa la PILA
LD HL,1000H ;inicializa la RAM
JP PROGRAMA ;salto-cuerpo del programa
INPUT:
;permite el ingreso de las variables a multiplicar
IN A,(00H)
LD B,10
CP B
JP NC,INPUT
RET C
MULT:
;realiza la multiplicacion mediante sumas sucesivas
ADD A,B
DAA
DEC (HL)
JP NZ,MULT
RET Z
PROGRAMA:
;cuerpo del programa, llama a las subrutinas necesarias
CALL INPUT
LD (HL),A
INC HL
CALL INPUT
LD (HL),A
LD B,A
LD A,0
DEC HL
CALL MULT
OUT (01H),A
HALT
END
Prueba de funcionamiento
Definición de la solución
INICIO
E=0, C=0,
P=0
Intentar
encender
NO
¿Encendió? Revisar auto
SI
¿Gasolina? Ir a la Llenar
NO
gasolinera tanque
SI
Tarjeta Efectivo
¿Pago?
Conducir a la
Universidad
FIN
Programa
Código en Ensamblador
CARGAR_COMB: UNIVERSIDAD:
IN A,(02H) INC A
LD B,6 ;LLENADO 6 GAL. OUT (04H),A
CP B LD B,255
JP Z,GALON_6 CP B
JP NZ,CARGAR_COMB JP NZ,ADICION
RET Z
ADICION:
ADD A,A
JP UNIVERSIDAD
PROGRAMA:
;PROGRAMA PRINCIPAL
XOR A
OUT (00H),A ;LIMPIA PORTS
OUT (03H),A ;LIMPIA LOS PUERTOS OUTPUT
OUT (04H),A ;LIMPIA LOS PUERTOS OUTPUT
CALL ENCENDER
CALL COMBUSTIBLE
CALL PAGAR
OUT (05H),A
LD A,0
CALL UNIVERSIDAD
HALT
END
Prueba de funcionamiento
Una vez que el auto este encendido se muestra el nivel de gasolina por el
puerto (03H), los dos leds encendidos indican que el tanque dispone de 2
galones de gasolina al momento, al mismo tiempo este dato es guargago
en la RAM para ser utilizado posteriormente.
Definición de la solución
INICIO
C=0, D=0,
L=0
Separar ropa
blanca
Añadir 60litros
de agua
Poner ropa
blanca en la
lavadora
Agregar
detergente
NO
1/4 de
detergente?
SI
Encender y
lavar 25 min
NO
¿Limpia?
Sacar la ropa
Enjuagar, exprimir y
secar al sol
FIN
Programa
Código en Ensamblador
CALL SEP_ROPA
CALL ACTIVACION
CALL AGUA
OUT (03H),A
CALL COLOCAR_ROPA
CALL ACTIVACION
CALL DETERGENTE
CALL ACTIVACION
LD A,14H
OUT (05H),A
CALL ENCENDER
CALL ACTIVACION
CALL LAVAR
CALL EXTRA
CALL FINAL
HALT
END
Prueba de funcionamiento
Definición de la solución
Diagrama de Flujo
C=0
NO
¿Desea
bañarse?
SI
¿Hay agua NO
caliente?
SI
Desvestirse
Calentar agua,
15 s.
NO
¿Caliente?
SI
Enjabonar
Enjuagar
NO
¿Listo?
SI
Salir y secarse
FIN
Programa
Código en Ensamblador
PROGRAMA:
XOR A
OUT (00H),A ;limpia el puerto
OUT (01H),A ;limpia el puerto
OUT (03H),A ;limpia el puerto
CALL MSJ_1
CALL DESCICION
LD A,01H
OUT (00H),A
CALL MSJ_2
CALL DESCICION
LD A,03H
OUT (00H),A
CALL MSJ_3
LD A,00H
CALL CAL_AGUA
CALL MSJ_4
CALL DESCICION_1
CALL MSJ_5
CALL MSJ_6
LD A,00H
CALL BAÑO
CALL MSJ_7
CALL DESCICION_2
CALL MSJ_8
HALT
END
Prueba de funcionamiento
Figura 47. Calentamiento del agua, juego de leds por el puerto (01H).
En este punto el programa preguntará al usuario si el agua se encuentra
caliente (Figura 48), en caso de no estar lo suficientemente caliente al
ingresar “0” volverá a transcurrir 15 segundos más de calentamiento,
realizando el proceso de conteo a través del puerto (01H) como se indicó
en la Figura 47.
Recomendaciones
El no conocimiento de todas las instrucciones que componen el set de
instrucciones del Z80, conlleva a que se realice programas demasiado
extensos, por lo que es necesario conocer el funcionamiento de cada
instrucción antes de aventurarse a realizar programas demasiado
complejos.
6. Bibliografía
[1]Lepape, O. (1985). Programación del Z80 con Ensamblador. Madrid: PARANINFO S.A.
[2]Universidad de la Republica de Uruguay. (11 de diciembre de 2018). ProEVA. Obtenido de
ProEVA:
https://eva.fing.edu.uy/pluginfile.php/54385/mod_folder/content/0/Un_microprocesador_
de_8_bits_Z80.pdf?forcedownload=1
[3]Zilog. (11 de diciembre de 2018). Zilog. Obtenido de Zilog:
http://www.zilog.com/manage_directlink.php?filepath=docs/z80/um0080&extn=.pdf