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

16/11/2011

Ejercicio
2

UNIDAD 5 3A PARTE
PROGRAMANDO EN EL
ENSAMBLADOR DEL Z80

Los puertos de entrada F1H y F2H estan conectados


a 7 switches cada uno. El bit mas significativo D 7 esta
conectado a un una seal de emergencia
El puerto de salida (F3H) esta conectado a 7 bandas
transportadoras y debe encenderse solo si el switch
correspondiente esta encendido en ambos puertos
Enciende o apaga los 7 bandas transportadoras de
acuerdo a las posiciones de on y off de los switches
en ambos puertos
Monitorea los switches continuamente

Microprocesadores

Otoo 2010

Solucin

Ejercicio

START:

IN A,(F1H)

AND 7FH

Reset bits D0 y D1 del acumulador


Set bits D0 y D1 del acumulador
Complementa los bits D0 y D1 del acumulador

LD B,A
IN A,(F2H)
AND B
OUT (F3H),A
JP START
HALT

Solucin

D7

D6

D5

D4

D3

D2

D1

D0

Acumulador

AND FCH

Resultado

Comparaciones

OPCODE OPERANDO BYTES


D7

D6

D5

D4

D3

D2

D1

D0

Acumulador

OR 03H

Resultado

D7

D6

D5

D4

D3

D2

D1

D0

Acumulador

XOR 03H

Resultado

D1

D0

DESCRIPCION

CP

Compara el contenido del acumulador con el


registro indicado

CP

8-bits

Compara el contenido del acumulador con el


nmero indicado

CP

(HL)

CP

(IX+d)

Condicin

Compara el contenido del acumulador con la


locacin de memoria indicada

Banderas
Carry

Cero

A < operando

A = operando

A > operando

16/11/2011

Ejemplo

Ejercicio

Las siguiente instrucciones comparan el contenido de


la locacion 1850H con 80H
Si el byte es igual salta a la locacin check
Si el byte es mayor salta a overload

LD HL, 1850H

Un conjunto de 10 lecturas se encuentra


almacenado en memoria en la direccin inicial
INBUF
Escribe un programa que encuentre la lectura mas
grande en el conjunto
Almacena este dato en el buffer OUTBUF

LD A,80H
CP (HL)
JP Z,CHECK
JP C,OVRLOD

Solucin

Rotaciones

10

START:

NEXT:

SKIP:

XOR A

; Empieza con una lectura mnima

LD B,0AH

; Inicializa el contador B a 10

LD HL,INBUF

; Apunta HL hacia INBUF

CP (HL)

; Compara la lectura de memoria con el apuntador

JP NC, SKIP

; Si la lectura es menor no cambies el valor de A

LD A, (HL)

; Actualiza el mximo

INC HL

; Apunta a la siguiente locacin de memoria

DEC B

; Decrementa el contador

JP NZ,NEXT

; Obtn la siguiente lectura si el contador 0

LD (OUTBUF),A

; Guarda el resultado

8-bits

RLC

9-bits

RL

8-bits

RRC

9-bits

RR

Izquierda
Rotaciones
Derecha

HALT

Rotaciones

Shift y Rotacin

11

12

OPCODE

OPERANDO

RLC

R
RL
RRC

(HL)

DESCRIPCION
Rotacin de bits a la izquierda de un registro o
memoria
Rotacin de bits a la izquierda a travs del carry
de un registro o memoria
Rotacin de bits a la derecha de un registro o
memoria

RR

Rotacin de bits a la derecha a travs del carry


de un registro o memoria

SLA

Shift de bits a la izquierda a travs del carry de


un registro o memoria

(IX + d)
SRL

Shift de bits a la derecha a travs del carry de un


registro o memoria

RLCA: Rota el acumulador a la


izquierda. El carry es
afectado por D7

D7

D6

D5

D4

D3

D2

D1

D0

RLA: Rota el acumulador a la


izquierda a travs del
carry

D7

D6

D5

D4

D3

D2

D1

D0

RRCA: Rota el acumulador a la


derecha. El carry es
afectado por D0

D7

D6

D5

D4

D3

D2

D1

D0

RRA: Rota el acumulador a la


derecha a travs del
carry

D7

D6

D5

D4

D3

D2

D1

D0

16/11/2011

Shift y Rotacin

Rotaciones y Shift

13

14

SLA: Recorre los bits del


registro hacia la
izquierda a travs del
carry. Introduce ceros en
el bit D0

SRL: Recorre los bits del


registro hacia la
derecha a travs del
carry. Introduce ceros en
el bit D7

D7

D6

D5

D4

D3

D2

D1

D0

D7

D6

D5

D4

D3

D2

D1

D0

Ejemplo

En estas instrucciones, la direccin de memoria puede


ser especificada usando el registro HL o los registros
ndice con un offset
Las banderas Z, S y P/V son modificadas de acuerdo a
las condiciones del resultado.
El valor del carry es determinado por D7 en la rotacin
(shift) a la izquierda o por D0 en la rotacin (shift) a la
derecha

Manipulacin de bits

15

16

A 10 A 8 2
A 8 A 2

El operando B representa un bit del D7 al D0


SET/RES no afectan las banderas

OPCODE

LD HL,1850H

; HL apunta a la direccin 1850H

LD A,(HL)

; Lee el numero de la locacin de memoria

SLA A

; Multiplica por 2

LD B,A

; Guarda el resultado en B

SLA A

; Multiplica por 4

SLA A

; Multiplica por 8

ADD A,B

; Para multiplicar por 10, suma la multiplicacin por 2

LD (HL),A

; Guarda el resultado

OPERANDO
B,R

BIT

DESCRIPCION
Prueba el bit B en el registro o locacin de memoria. Si
el bit es 0, la bandera del cero (Z) es encender, de
otra manera permanecer apagada

B,(HL)
B, (IX+d)
B,R

SET

B,(HL)

Asigna un 1 al bit B del registro o locacin de memoria

B, (IX+d)
B,R
RES

HALT

Asigna un 0 al bit B del registro o locacin de memoria

B,(HL)
B, (IX+d)

Retardos y Formas de Onda

Retardo

17

18

INICIO
Carga el patrn de bits

Manipulacin de bits

Copia la cuenta del


retardo en un registro

Decrementa el contador

Salida para generar el


pulso
Retardo

No

f 2MHz; Tc 1 f 0.5s
LT 14
N10 64H 100

TL 0.5 106 14 100 700s

Contador
=0?
Si

Regresa a cambiar el
pulso

TL Tc LT N10

donde
TC es el periodo del reloj
LT son los T-states en el ciclo
N10 es la cuenta en decimal

LOOP:

Mnemnicos

T-States

LD B,64H

DEC B

JP NZ,LOOP

10

16/11/2011

Retardo

Ejemplo

19

20

El retardo total se obtiene de la siguiente manera

Ttotal T0 TL

START:

LD C,01010101B ; Carga el patrn de bits

ROTATE:

LD A,C

; Coloca el patrn de bits en el acumulador

RLCA

; Cambia el patrn de bits para la siguiente salida

LD C,A

; Guarda el patrn de bits

AND 01H

; Enmascara los bits D7-D1

OUT (PORT1),A

; Cambia el nivel de voltaje

11

LD B,COUNT

; Carga el registro B con el contador del retardo

DEC B

; Inicia el retardo

Tc L0 LT N10 0.5s7 14 100


3.5 s 700s 703.5s

Para encontrar el numero de veces que el ciclo


debe ser ejecutado para obtener un cierto retardo
entonces

N10

DELAY:

JN NZ,DELAY
JP ROTATE

Ttotal
L
0
TC LT LT

Calculando N10

10
; Regresa a cambiar el nivel del pulso

10

Incrementando el Retardo

21

22

El pulso debe tener un periodo de 500s, lo cual


implica que debe mantenerse en alto por 250s y
en bajo por 250s.
El programa se toma los siguientes ciclos de reloj

Existen tres formas de incrementar el retardo,


Incluir instrucciones adicionales
dentro del lazo
NOP toma 4 ciclos T en ejecutarse

T-states

dentro del ciclo = 14


T-states fuera del ciclo = 47

Usar un par de registros

La cuenta debe ser

BC, DE, o HL

N10

250 106
47

32
6
0.5 10 14 14

Usar lazos anidados

Ejemplo

Instrucciones especiales del Z80

23

24

LD D,10
LD BC,7143

10

LOOP1:

DEC BC

NOP

LD A,C

OR B

JP NZ,LOOP1

10

DEC B

JN NZ,LOOP

10

DELAY:

LOOP:

LD BC,7143

10

DJNZ
100 ms

DELAY:

DEC B

JN NZ,LOOP

10

TL1 0.5 10 28 7143 100ms

OPCODE OPERANDO DESCRIPCION

LD D,10

LOOP:

label

Decremento B y Salto Relativo sobre NZ


Esta instruccin decrementa el registro B y si B 0,
salta a la direccin de memoria especificada por
el valor de offset label

LDI

Carga e Incrementa
Copia un byte a la direccin de memoria apuntada
por HL dentro de la locacin de memoria apuntada
por DE. Los registro HL y DE son incrementados y
BC es decrementado

LDIR

Carga, Incrementa y Repite


Esto es similar a la instruccin LDI, excepto que es
repetida hasta que BC = 0

TL 10 0.5 106 24 TL1 1000ms 120s

16/11/2011

Instrucciones especiales del Z80


25

Ejercicio
26

OPCODE OPERANDO DESCRIPCION


Carga y decrementa
Copia un byte a la direccin de
memoria apuntada por HL dentro de
LDD
la locacin de memoria apuntada por
DE. Los registro HL, DE y BC son
decrementados
Carga, Decrementa y Repite
Esto es similar a la instruccin LDD,
LDDR
excepto que es repetida hasta que
BC = 0

Escriba un programa que sume 10 bytes almacenados


en memoria empezando en la direccion INBUF
Cuente el numero de carries generado en la suma
Guerde guarde el valor de la suma en OUTBUF y
OUTBUF + 1
Suponga que
OUTBUF EQU 1850H
COUNT EQU 10
INBUF: DEFB 0A2H, 37H,4FH,97H,22H,6BH,
DEFB 75H,8EH9AH,0C7H

Solucin

Calculando el Offset

27

28

1800

XOR A

; Limpia A para acumular la suma

1801

LD C,A

; Limpia C para acumular los carries

1802

LD HL, INBUF

; HL apunta a INBUF

1805

LD B,COUNT

; Copia 10 al contador B

LD D,(HL)

; Carga el dato almacenado en INBUF

1808

ADD A,D

; Suma A y el dato obtenido de INBUF

1809

JP NC, SKIPCY

; Si no hay carry salta a incrementar HL

180C

INC C

; Si hay carry incrementa C

INC HL

; Incrementa HL

Program Counter

180E

DJNZ NXTBYT

; Decrementa B y salta si no es igual a cero

Direccin destino

1810

LD HL,OUTBUF

; Apunta HL a OUTBUF

1813

LD (HL),A

; Copia el resultado del acumulador

1814

INC HL

; Incrementa HL

1815

LD (HL),C

; Copia C a OUTBUF + 1

1807

180D

START:

NXTBYT:

SKIPCY:

Complemento a 2s

Instrucciones especiales del Z80


29

El salto debe ser realizado hacia atrs a la


direccin 1807H
Debido a que es un salto hacia atrs, entonces el
offset es un numero negativo que debe ser
representado en complemento a 2s

00001001

11110111

Caractersticas Generales
30

OPCODE

OPERANDO

DESCRIPCION

CPI

Compara e Incrementa
Compara el contenido de la locacin de memoria
apuntada por HL con el contenido del acumulador.
Incrementa HL y decrementa BC

CPIR

Compara, Incrementa y Repite


Esta instruccin es igual a CPI pero se repite hasta que
BC = 0 o el contenido de HL es igual al acumulador

CPD

Compara y Decrementa
Compara el contenido de la locacin de memoria
apuntada por HL con el contenido del acumulador.
Decrementa HL y BC

CPDR

Compara, Decrementa y Repite


Esta instruccin es igual a CPD pero se repite hasta que
BC = 0 o el contenido de HL es igual al acumulador

Estas son instrucciones de 2 bytes


La bandera del cero (Z) se enciende si los nmeros
comparados son iguales. Esto es, si el valor del
acumulador y la locacin de memoria son iguales
La bandera del signo (S) se enciende si el byte es
mas grande que el acumulador
La bandera P/V se apaga si BC es igual a cero
La bandera del carry no es afectada

16/11/2011

Ejemplo

Ejercicio

31

32

El buffer INBUF contiene 256 datos. Realiza una


bsqueda para encontrar el valor 24H en el buffer
de entrada. Si lo encuentra salta a START, de lo
contrario salta a ERROR
LD HL,INBUF

; HL debe apuntar a INBUF

LD BC,0100H

; BC es el contador = 256

LD A,24H

; El acumulador debe contener el byte buscado

CPIR

; busca 24H dentro del buffer

JP Z,START

; Si el byte fue encontrado, inicia el proceso

JP ERROR

; Despliega el mensaje de error

START:

LD HL,1850H

LD D,00H
Solucin
LD C,02
33

CHECK:

Un conjunto de 3 lecturas han sido almacenadas en


memoria iniciando en la direccion1850H
87
56
42

Ordena las lecturas en orden ascendente

; Apunta HL hacia los datos


; Usa D como una bandera de intercambio
; Cuenta de comparaciones

LD A,(HL)

; Obtn el dato

INC HL

; Incrementa el apuntador al siguiente dato

CP (HL)

; Compara los nmeros

JP C,NEXTBYT

; Si A < segundo byte, no intercambies

LD B,(HL)

; Obtn el segundo byte para intercambio

LD (HL),A

; Almacena el byte anterior en la posicin siguiente

DEC HL

; Apunto a la locacin posterior

LD (HL),B

; Almacena el byte en la locacin anterior

INC HL

; restaura HL a la posicin de comparacin

LD D,01

; D = 1 para recordar que se realizo un intercambio

NEXTBYT: DEC C

; Decrementa el contador de comparaciones

JP NZ, CHECK

; Si la cuenta es diferente de cero regresa a check

BIT 0,D

; Checa la bandera de intercambio

JP NZ,START

; Si la bandera es 1 realiza una nueva pasada

HALT

; fin del ordenamiento

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