Unidad 4 El lenguaje de ensamblador del z80

Anuncio
28/09/2011
1
Contenido
2
Conjunto de instrucciones
Tipos de instrucciones
 Modos de direccionamiento
 El ensamblador del Z80
 El simulador AVOCET
 Implementación de un sistema basado en
el Z80


UNIDAD 5
EL LENGUAJE DE
ENSAMBLADOR DEL Z80
Otoño 2011
Microprocesadores
Conjunto de Instrucciones
3
Formato de la Instrucción
4

El conjunto de instrucciones de un microprocesador
determina la capacidad de su operación y el
poder de su manipulación de datos y su facilidad
de programación.



Una instrucción es un comando al microprocesador
para que desempeñe una tarea dada sobre un
dato especifico y esta formada por:


Código Operacional
Operando

Formato de la Instrucción
5
El tamaño de las instrucciones en el Z80 van de 1 a
4 bytes
El opcode determina cual es la operación que se va
a realizar y esta incluido en el primer byte de la
instrucción.
Algunos opcode especializados se encuentran en
dos bytes
Instrucciones de 1 byte
6

El operando puede ser especificado de varias
formas:
Datos de 8 bits
Datos de 16 bits
 Registros
 Par de registros
 Dirección de I/O
 Dirección de Memoria




Las instrucciones son clasificadas en 4 grupos de
acuerdo a su longitud



El opcode y los operandos son especificados en el
mismo byte
Opcode
Operandos
Codigo Binario
LD
A, B
01 111 000 (78H)
Tarea
Copiar el contenido del
registro B en el Acumulador
El código operacional es especificado en los
primeros dos bits 01
El registro A es representado por el código 111
El registro B es representado por el código 000
1
28/09/2011
Instrucciones de 2 bytes
Instrucciones de 3 bytes
7
8

En una instrucción de 2 bytes, el primer byte
especifica el opcode y el segundo byte el
operando
Opcode
Operandos
Codigo Binario
LD
B, 32H
0000 0110 (06H)



Tarea

Copiar el numero 32H en el
registro B
0011 0010 (32H)
El primer byte corresponde al opcode
Los siguientes 2 bytes corresponden a una dirección o
dato de 16 bits en orden inverso
El primer byte corresponde a la parte baja del numero
El segundo byte corresponde a la parte alta del numero
Opcode
Operandos
Codigo Binario
LD
BC, 2080H
0000 0001 (01H)
1000 0000 (80H)

El opcode para LD B es 06H
0010 0000 (20H)
Instrucciones de 4 bytes
Tarea
Copiar el numero 2080H en el
registro BC
Conjunto de instrucciones
9
10



Las instrucciones anteriores son compatibles con el 8085 (244
opcodes)
Para incluir una mayor funcionalidad se diseñaron instrucciones
especiales con opcodes de 2 bytes
Estas instrucciones son generalmente asociadas a los registros
índice
Opcode
Operandos
Codigo Binario
LD
IX, 2000H
1101 1101 (DDH)
0010 0001 (21H)
0000 0000 (00H)

El conjunto de instrucciones se clasifican en 6
categorías
 Transferencia
de Datos
Aritméticas
 Operaciones Lógicas
 Manipulación de bits
 Operaciones de Decisión
 Operaciones de Control de Maquina
 Operaciones
Tarea
Copiar la dirección 2000H en
el registro índice IX
0010 0000 (20H)
Transferencia de datos
Transferencia de datos
11
12

Estas instrucciones copian los datos de una locación
llamada fuente hacia otra llamada destino
Operaciones
Ejemplos
•
Transfiere datos de un registro hacia otro registro
•
Transfiere un byte hacia un registro o una localidad
LD B,32H
de memoria
•
Transfiere datos de 16 bits hacia un par de
registros
•
Transfiere datos de una localidad de memoria
hacia un registro o viceversa
Operaciones
•
•
LD A,B
•
Transfiere datos de un puerto de entrada hacia el
acumulador
Transfiere datos del acumulador hacia el puerto de
salida
Transfiere datos de los registros del MPU hacia el
STACK y viceversa
Ejemplos
IN A,(01H)
OUT (01H),A
PUSH BC
POP BC
LD HL,2050H
LD A,(2080H)
•
Intercambio de contenido de los registros de propósito
general BC, DE, HL con los registros alternativos
EXX
LD (2080H),A
2
28/09/2011
Transferencia de datos
13
Operaciones Aritméticas
14




La instrucción de transferencia de datos el destino
es especificado primero y después la fuente.
LD destino, fuente
Las direcciones de memoria o dispositivos de
entrada y salida se especifican entre paréntesis
En algunas operaciones los operandos son implícitos
como en el caso de EXX
Las instrucciones de transferencia de datos no
afectan las banderas
Suma
Resta
Incremento/Decremento
Complemento a 1’s y a 2’s
Suma
Resta
15
16

Esta operación se realiza usando el acumulador como
uno de los operandos, el otro operando puede ser:

Cualquier número de 8 bits
El contenido de un registro
 El contenido de una localidad de memoria

Los siguientes operandos pueden ser restados del
contenido del acumulador

 Numero

 Contenido
de 8 bits
SUB 95H
de un registro
SUB C
 Contenido de una localidad de memoria SUB (HL)
Las banderas son modificadas de acuerdo al resultado
de la operación

ADD A,B
ADD A,97H
ADD A,(HL)


Incremento/Decremento
17
La resta se realiza en complemento a 2’s y el
resultado se almacena en el acumulador
El resultado afecta las banderas
El acumulador es un operando implícito
Complemento a 1’s y a 2’s
18




El contenido de un registro de 8 bits o localidad de
memoria es incrementada o decrementada por uno
El contenido de un registro de 16 bits puede ser
incrementado o decrementado por uno
Solo la operación de 8 bits afecta las banderas
Ejemplo
INC B
DEC BC



El contenido del acumulador puede ser
complementado y el resultado almacenado en el
acumulador
Estas instrucciones asumen que el operando es el
acumulador
Estas instrucciones afectan algunas banderas
Tarea
CPL
Complementa el contenido del acumulador (Complemento a 1)
NEG
Resta el contenido del acumulador de cero (Complemento a 2)
3
28/09/2011
Ejemplo
Operaciones Logicas
19
20
LD A,53H
LD B,F5H
ADD A,B
53H
+ F5H
1 48H
A
53H
F
X
B
X
C
X
A
53H
F
X
B
F5H
C
X
A
48H
F
C=1, Z=0
B
F5H
C
X
Funciones lógicas
Shift y Rotaciones
01010011
+ 11110101
1 01001000
Comparaciones
Funciones Lógicas
Shift y Rotación
21
22

Los operandos para estas funciones pueden ser un
numero de 8 bits, el contenido de un registro o
locación de memoria
Tarea
AND B
Aplicar la operación AND a cada bit del registro B
con los bits del acumulador
OR 32H
Aplicar la operación OR a cada bit del numero
32H con los bits del acumulador
XOR (HL)
Aplicar la operación XOR a cada bit del numero
contenido en la localidad apuntada por HL con los
bits del acumulador
RLCA: Rota el acumulador a la
izquierda. El carry es
afectado por D7
C
D7
D6
D5
D4
D3
D2
D1
D0
RLA: Rota el acumulador a la
izquierda a través del
carry
C
D7
D6
D5
D4
D3
D2
D1
D0
RRCA: Rota el acumulador a la
derecha. El carry es
afectado por D0
C
D7
D6
D5
D4
D3
D2
D1
D0
RRA: Rota el acumulador a la
derecha a través del
carry
C
D7
D6
D5
D4
D3
D2
D1
D0
Shift y Rotación
Shift y Rotación
23
24
Opcode
SLA: Recorre los bits del
registro hacia la
izquierda a través del
carry. Introduce ceros en
el bit D0
SRL: Recorre los bits del
registro hacia la
derecha a través del
carry. Introduce ceros en
el bit D7
C
D7
C
D6
D7
D5
D6
D4
D5
D3
D4
D2
D3
D1
D2
0
D0
D1
D0
Operando
Descripción
RLC
Reg o Memoria Rota a la izquierda los bits del registro o memoria
RL
Reg o Memoria
RRC
Reg o Memoria Rota a la derecha los bits del registro o memoria
RR
Reg o Memoria
SLA
Recorre los bits del registro o memoria a la
Reg o Memoria izquierda a través del carry e inserta 0 en la
posición D0
SRL
Recorre los bits del registro o memoria a la
Reg o Memoria derecha a través del carry e inserta 0 en la
posición D7
0
Rota a la izquierda los bits del registro o memoria
a través del carry.
Rota a la derecha los bits del registro o memoria
a través del carry.
4
28/09/2011
Comparaciones
Comparaciones
25
26

El contenido del acumulador es comparado con
 Un
numero
 Contenido de un registro
 Contenido de una localidad de memoria




CP 97H
CP B
CP (HL)
Cuando el operando
es una localidad de
memoria se especifica
por medio
El resultado de la comparación se indica con la
bandera adecuada
Esta instrucción realiza la comparación por medio
de substraer el operando del acumulador
Prueba por menor que, igual y mayor que
 El
contenido de un
registro
 Usando un registro
índice mas un offset
 CP (IX + 02H)
Manipulación de bits
Condición
A < operando
A = operando
A > operando
Banderas
Carry Cero
1
0
0
1
0
0
Comprobación de bits
27
28


Comprobación de bits

Cualquiera de los 8 bits de un registro, acumulador
o localidad de memoria puede ser verificada
La bandera Z se modificara de acuerdo al valor
del bit que se desea verificar
Ejemplo
 Verifique
Bit set/Reset
 BIT
Set y Reset
el bit 7 del registro B
7,B
Decisión
29
30


Cualquiera de los 8 bits de un registro, acumulador
o localidad de memoria puede ser puesto a uno o
cero
Ejemplo
Antes de la
operación
B = 00110111
B = 11110000
Operacion
SET 7,B
RESET 5,B
Después de la
operación
B = 10110111
B = 11010000

Este grupo de instrucciones pueden alterar la
secuencia de ejecución del programa de forma
 Condicional
 Incondicional
Saltos
Llamada a subrutina
Reinicio
5
28/09/2011
Saltos
Llamada a subrutina
31
32




Existen saltos condicionales e incondicionales
Si el salto es condicional, entonces el procesador
verifica las banderas especificadas y si la condición
es verdadera, la secuencia de instrucciones es
alterada
La locación destino puede ser especificada
directamente o relativa al PC
Ejemplo
 JP

Estas instrucciones alteran la secuencia del
programa por
 Llamado
 Regreso


 CALL
Reinicio
CALL
RET
El regreso o llamado condicional de subrutina
verifica las banderas adecuadas
Ejemplo
 CALL
C,2050H
a subrutina
de una subrutina
2050H
Z,2050H
Control de Maquina
33
34

Esta instrucción cambia la secuencia del programa
a una de 8 locaciones de reinicio localizadas en la
pagina 00.



Esta instrucción generalmente se usa con las
interrupciones
Ejemplo
 RST
28H
Deshabilitar las interrupciones poniendo a cero los
flip-flops que habilitan las interrupciones
 DI
La dirección de reinicio es 0028H
Modos de Direccionamiento
35
Suspender la ejecución de la instrucción
 HALT


Estas instrucciones controla la operación del
microcontrolador, tales como
Modos de Direccionamiento
36
Modo
Explicación
Inmediato
El byte que sigue después del opcode
LD B,97H
es el operando
Ejemplo
Modo
Explicación
Ejemplo
Registro
Indirecto
Este modo se usa para transferir
datos entre el MPU y la memoria. El
registro se utiliza como un apuntador
a la memoria
Inmediato
Extendido
Los 2 siguientes bytes después del
opcode son el operando
LD B,(HL)
Registro
El registro que se usa como operando
LD B,A
esta incluido en el opcode
Extendido
JP 2080H
El opcode contiene el operando de
forma implícita. Algunas operaciones
aritméticas y lógicas usan el
acumulador como un operando
implícito
Los dos bytes seguidos del opcode
indican un salto a la locación de
memoria especificada
Implicito
Relativo
JR 14H
El segundo byte indica el valor del
Salta 20 locaciones
desplazamiento en complemento a 2’s
después de la
para una locación de salto
siguiente instrucción
LD BC,8045H
AND B
6
28/09/2011
Modos de Direccionamiento
37
Programa Ilustrativo
38
Modo
Explicación
Indexado
El byte después del opcode
especifica el valor de desplazamiento
INC (IX+10H)
que se suma al registro índice para
indicar una locación de memoria
Bit
Este modo es usado para la
manipulación de bits. En este modo se
SET 7,B
indica un bit de un registro o una
locación de memoria
Se incluyen 8 posibles direcciones de
reinicio en la pagina cero. En este
modo se especifica la parte baja de
la dirección de memoria y la parte
alta se asume que es 00H
Pagina Cero
Ejemplo
RST 28H

Sección de
definiciones
PORT1
Punto de inicio START:
ORG
1800H
; La dirección de inicio del programa es 1800H
EQU
01H
; Dirección del puerto de salida
LD
B,32H
;Copia 32H en el registro B
LD
C,0A2H
;Carga el segundo byte a ser sumado
LD
A,C
; Copia uno de los operandos al acumulador
ADD
A,B
;Despliega el resultado
OUT
(PORT1),A
;Despliega el resultado
Detenemos la ejecución HALT
Fin del programa
Programa Ilustrativo
39
Suma dos números hexadecimales y despliega el
resultado
END
;Fin del programa
; Fin del ensamblador
Estructura de un programa
40


ORG indica la dirección en la cual se va a
almacenar el programa
EQU directiva al compilador para definir constantes
 PORT1
 MAX

Declaración de Constantes y definiciones
Rutina de Inicio
EQU 01H
EQU 10H
Subrutinas de Reinicio
Etiquetas
Cuerpo del programa principal
 Se
utilizan para marcar puntos en el programa para
ser usados en los saltos y llamados a subrutinas

Subrutinas
END marca el fin del programa en ensamblador
Transferencia de datos
41
Transferencia de datos
42
Instrucción
Bytes Descripción
LD (HL), R
1
El registro HL es usado como un apuntador a la memoria.
El contenido del registro es copiado a la locacion de
memoria apuntada por HL
LD (HL), 8-bit
2
El numero de 8 bit es copiado a la locacion de memoria
apuntada por HL
LD A, (RP)
1
LD (RP), A
1
LD A,(16-bits)
3
LD (16-bits),A
3
El contenido del registro de propósito general es
transferido al acumulador. El apuntador a memoria
puede ser el registro BC o DE. La transferencia de datos
empleando estos registros solo puede ser realizada al
acumulador
La dirección de memoria se especifica como el operando
de 16 bits, y solo se puede hacer la transferencia de
datos hacia o desde el acumulador.




Las banderas no son afectadas por esta instrucción
Las instrucciones relacionadas a la memoria son
identificadas por los paréntesis
El registro HL es un apuntador a memoria versátil
que puede ser usado para transferir datos de
memoria hacia cualquier registro de propósito
general
Los registros BC, DE y el direccionamiento inmediato
solo pueden ser usados con el acumulador
7
28/09/2011
Transferencia de Datos
Transferencia de datos
43
44

Ejemplo

locación de memoria 2050H contiene el byte 37H
 Usando los diferentes modos de direccionamiento,
transfiere el byte 37H al registro B
Direccionamiento Extendido
 La

Código Instrucción
3A
50
Direccionamiento Indirecto usando HL
21
A
LD HL,2050H
50
20
46
LD
20
47
Código Instrucción
B
C
E
20H
LD
B,A
A
B
37H
37H
F
C
D
E
H
L
2050H
37 H
F
37H
D
H
B,(HL)
LD A,(2050H)
50H
2050H
37 H
L
Ejercicio
Solucion
45
46




La localidad de memoria 2040H contiene el dato
F2H
Transfiere el dato hacia la localidad 2070H
Limpia la localidad de memoria 2040H al terminar
la transferencia
Escribe el programa que realice las operaciones
anteriormente descritas
HEX
21
OPCODE Operando
Comentario
LD
HL,2040H
; Coloca el apuntador HL a la dirección fuente
LD
BC,2070H
;Coloca el apuntador BC a la dirección destino
40
20
01
70
20
7E
LD
A,(HL)
;Transfiere el dato hacia el acumulador
02
LD
(BC),A
;Copia el dato en la dirección destino
36
LD
(HL),00
;Limpia la locación de memoria 2040H
00
76
47
Transferencia de datos hacia
dispositivos I/O
Instrucción
Bytes
Ejemplo
A,(8-bits)
2
IN A,(01H)
OUT A,(8-bits)
2
OUT
(01H),A
IN


HALT
;Detiene la ejecución del programa
Ejemplo
48
Descripción
Lee datos del puerto de entrada y
los almacena en el acumulador
Escribe datos a un puerto de
salida del acumulador
Las banderas no son afectadas por la ejecución de
estas instrucciones
Las direcciones de los puertos de entrada y salida
están compuestas por 8 bits y deben estar escritas
entre paréntesis.
8
28/09/2011
Ejemplo
Operaciones Aritméticas
49
50



Lee los switches conectados al puerto 01H
Despliega la lectura en los leds conectados al
puerto 07H.
Almacena la lectura en la direccion 2060H
OPCODE
OPERANDO
COMENTARIO
IN
A,(01H)
; Lee los switches de entrada
OUT
(07H),A
; Despliega la lectura de los switches en el puerto de salida
(2060H),A
; Almacena la lectura en memoria
LD

La suma y resta comparten las siguientes
características
 Asumen
que uno de los operandos es el acumulador
todas las banderas de acuerdo al resultado
de la operación
 El resultado es almacenado en el acumulador
 No afectan el contenido del operando, solo del
acumulador.
 Modifican
HALT
Operaciones Aritméticas
51
Operaciones Aritméticas
52
OPCODE OPERANDO

BYTES DESCRIPCION
ADD
A, r
1
Suma el contenido del registro r al acumulador y
el resultado es almacenado en el acumulador
ADD
A, 8-bit
2
Suma el dato de 8 bits al contenido del
acumulador
ADD
A, (HL)
1
Suma el contenido de la locación de memoria
apuntada por HL al contenido del acumulador
SUB
R
1
Resta el contenido del registro r del acumulador y
el resultado es almacenado en el acumulador
SUB
8-bit
2
Resta el dato de 8 bits del contenido del
acumulador
SUB
(HL)
1
Resta el contenido de la locación de memoria
apuntada por HL del contenido del acumulador
El operando puede ser un registro, un numero de 8-bits
o un dirección de memoria
 Si el operando es de 8-bits, el resultado de estas
operaciones afecta todas las banderas excepto la del
carry
 Si el operando es de 16-bits, ninguna bandera es
afectada. Esto es importante tomarlo en cuenta cuando
se usan como contadores de 16-bits
 El resultado es almacenado en mismo operando

Operaciones Aritméticas
53
El incremento y decremento comparten las
siguientes características
Operaciones Aritméticas
54
OPCODE OPERANDO
BYTES DESCRIPCION

El acumulador es el operando implicito para los
complemento a 1’s y a 2’s
El resultado es almacenado en el acumulador
INC
r
1
Incrementa el contenido del registro r
INC
(HL)
1
Incrementa el contenido de la localidad de
memoria apuntada por el registro HL

INC
rp
1
Incrementa el contenido del par de registros.
El par de registros puede ser BC, DE, HL y SP
OPCODE OPERANDO
DEC
r
1
Decrementa el contenido del registro r
DEC
(HL)
1
Decrementa el contenido de la localidad de
memoria apuntada por el registro HL
DEC
rp
1
Decrementa el contenido del par de registros.
El par de registros puede ser BC, DE, HL y SP
BYTES DESCRIPCION
CPL
1
Invierte cada bit del acumulador. Esta
operación equivale a la función NOT. Solo las
banderas H y N son afectadas
NEG
1
Substrae el contenido del acumulador de 00.
Esto es equivalente a realizar el complemento
a 2’s del contenido del acumulador. Esta
operación afecta todas las banderas
9
28/09/2011
Ejercicio
55







Cargue el numero F2H y 68H en los registros B y C
respectivamente
Almacene A2H en la locación de memoria 2065H
Reste el 68H de F2H
Complemente a 1’s el resultado
Sume A2H desde la memoria
Almacene la repuesta final en la locación de memoria
2066H
Determine el estado del signo (S), cero (Z) y el Carry
(C)
10
Descargar