Documento 94335

Anuncio
Universidad de Alcalá
Departamento de Automática
I. T. Informática de Sistemas
Laboratorio de Microprocesadores
El microprocesador de 8 bits M6800
INTRODUCCIÓN
El microprocesador M6800, fabricado en 1974 por Motorola, fue uno de los primeros
microprocesadores comerciales y ampliamente utilizado. De él se derivan muchos otros
microprocesadores, como la familia 65XX.
MODELO DE PROGRAMACIÓN
7
0
ACCA
7
0
A c um ul ad or A
ACCB
15
0
A c um ul ad or B
X
15
0
R e gi st ro í nd ic e
PC
15
0
C o nt ad or d e pr og ra ma
SP
P u nt er o de p il a
7
6
5
4
3
2
1
0
CCR
1
1
H
I
N
Z
V
C
R e gi st ro d e es ta do
CARACTERÍSTICAS DEL M6800












Alimentación única de +5 V.
Bus de datos bidireccional de 8 bits.
Bus de direcciones de 16 bits.
Dos entradas de reloj desfasadas 180º.
Línea de salida R/W para indicar lectura/escritura en memoria.
Dos terminales de interrupción: /IRQ (Enmascarable) y /NMI (No enmascarable).
Terminal /RESET que inicializa el sistema y da paso a una rutina específica.
Terminal /HALT que provoca la parada del procesador, con todos los buses en estado de alta
impedancia.
Terminal de salida BA (Bus available) que indica que la CPU se encuentra en un estado
HALT o en estado WAIT que se produce al ejecutar la instrucción WAIT que suspende la
actividad de la CPU hasta la llegada de una interrupción.
Terminal de entrada DBE (Data Bus Enable) que permite controlar el estado de alta
impedancia del bus de datos.
Terminal de entrada TSC (Tri-State Control) que permite controlar el estado de alta
impedancia del bus de direcciones y de la línea R/W.
Terminal de salida VMA (Valid Memory Address) que valida la dirección presente en el bus
de direcciones.
M6800
Página 1
Universidad de Alcalá
Departamento de Automática
I. T. Informática de Sistemas
Laboratorio de Microprocesadores
BITS SIGNIFICATIVOS EN EL REGISTRO DE ESTADO (CCR)






C
V
Z
N
I
H
(carry) es el indicador de acarreo.
(overflow) es el indicador de desbordamiento.
(zero) es el indicador de cero (resultado nulo).
(negative) es el indicador de resultado negativo.
(interruption) es el bit de máscara de interrupción.
(half carry) es el indicador de acarreo del bit 3 al bit 4.
MODOS DE DIRECCIONAMIENTO

IMPLÍCITO o INHERENTE: El código de operación indica implícitamente la localización
de los datos:
ABA
Sumar acumuladores

INMEDIATO: El operando está contenido en la propia instrucción (2º byte de la
instrucción):
ADDA #71

DIRECTO o ABSOLUTO: La instrucción incluye un byte con la dirección de memoria en
página cero que contiene el operando:
LDAB 10

Resta al acumulador B el contenido de la posición de memoria
cuya dirección es 1000.
INDEXADO: La dirección efectiva se obtiene sumando el contenido del registro índice X
con el operando que se incluye en la instrucción en el byte siguiente al del código de
operación, sin modificar el contenido del registro índice:
ADDA 10,X

Carga el acumulador B con el contenido de la posición de memoria
cuya dirección es 10 (en página 0).
EXTENDIDO: Los dos bytes que siguen al del código de operación representan la dirección
de memoria que contiene el operando:
SUBB 1000

Sumar al acumulador el número 71.
Suma al acumulador A el dato cuya dirección de memoria se
obtiene sumando 10 al contenido del registro X.
RELATIVO: El operando de la instrucción es un offset (de un byte y expresado en
complemento a 2), que se suma al contenido actualizado del contador de programa (PC), para
obtener la dirección de la próxima instrucción a ejecutar. Solo se utiliza en las instrucciones
de salto condicional.
INTERRUPCIONES
La línea /NMI provoca una interrupción no enmascarable (siempre será atendida) cuyo
vector de interrupción se encuentra en las posiciones FFFCh y FFFDh.
M6800
Página 2
Universidad de Alcalá
Departamento de Automática
I. T. Informática de Sistemas
Laboratorio de Microprocesadores
La línea /IRQ provoca una petición de interrupción que será atendida si el bit I del
registro de estado (CCR) está a 1. El vector de interrupción se encuentra en FFF8h y FFF9h.
La instrucción SWI permite también la interrupción por software; su vector de
interrupción se encuentra en las posiciones FFFAh y FFFBh.
Al activarse el terminal de RESET todos los registros, contadores y flags se ponen a cero
y en el contador de programa se carga el vector contenido en las posiciones FFFEh y FFFFh.
Cuando se produce una interrupción y esta es atendida, se completa la ejecución de la
instrucción en curso, se guardan todos los registros en la pila (por orden: PC, X, ACCA, ACCB y
CCR) y se coloca en el contador de programa el vector correspondiente a esa interrupción.
EJEMPLOS DE PROGRAMAS PARA EL M6800

Programa que carga en la memoria del simulador, a partir de la dirección 0000h un
programa que suma sin signo los contenidos de las direcciones 00A0h y 00A1h y guarda el
resultado en las posiciones 00B0h y 00B1h, con el orden que el M6800 guarda los datos en
memoria (bytes de mayor peso en las direcciones más bajas).
0000
0001
0003
0005
0007
0009
000B
0000

INICIO: CLRB
LDAA
ADDA
ADCB
STAA
STAB
FIN:
NOP
END
0A0h
0A1h
#0
0B1h
0B0h
;Pone B a 0
;Carga el primer operando
;Realiza la suma sin acarreo
;Pone el acarreo en B
;Guarda el byte de menor peso
;Guarda el byte de mayor peso
Programa que inicializa a FFh las posiciones de memoria comprendidas entre la 0080h y
008Fh.
0000
0003
0005
0007
0008
000B
000D
0000

5F
96A0
9BA1
C900
97B1
D7B0
01
CE0080
86FF
A700
08
8C0090
26F8
01
INICIO: LDX #0080h
LDAA #0FFh
BUCLE: STAA 0,X
INX
CPX #0090h
BNE BUCLE
FIN:
NOP
END
;X Apunta a la primera posición
;En A el dato a almacenar
;Guarda A en la posición (0h+X)
;Incrementa el contenido de X
;¿Terminó?
Programa que inicializa el bloque de memoria entre las direcciones 100h y 11Fh con los
valores 0, 1, 2, ..., 1Fh.
0000
0003
0004
0006
0007
0008
M6800
CE0100
4F
A700
08
4C
8C0120
INICIO: LDX #0100h
CLRA
BUCLE: STAA 0,X
INX
INCA
CPX #0120h
;X Apunta a la primera posición
;Pone el acumulador a cero
;Guarda el acumulador
;Incrementa el contenido de X
;Incrementa el acumulador
;¿Terminó?
Página 3
Universidad de Alcalá
Departamento de Automática
000B 26F7
000D 01
0000

CE0100
861F
A700
08
4A
8C0120
26F7
01
INICIO: LDX #0100h
LDAA #01Fh
BUCLE: STAA 0,X
INX
DECA
CPX #0120h
BNE BUCLE
FIN:
NOP
END
;X Apunta a la primera posición
;Dato inicial en A
;Guarda el acumulador
;Incrementa el contenido de X
;Decrementa el acumulador
;¿Terminó?
Programa que copia el bloque de memoria comprendido entre las direcciones 00h y 1Fh a
partir de la dirección 100h.
0000
0003
0005
0006
0008
000B
000D
0000

BNE BUCLE
NOP
END
Modificación del programa anterior para que la inicialización se realice en orden inverso (de
la 100h a la 11Fh con los valores 1Fh, 1Eh, ...0).
0000
0003
0005
0007
0008
0009
000C
000E
0000

FIN:
I. T. Informática de Sistemas
Laboratorio de Microprocesadores
CE0000
A600
08
A7FF
8C0020
26F6
01
INICIO: LDX
BUCLE: LDAA
INX
STAA
CPX
BNE
FIN:
NOP
END
#00h
0,X
0FFh,X
#0020h
BUCLE
;Indice a cero
;Carga en A el dato a transferir
;Incrementa el índice
;Se guarda el dato en (FFh+X)
;¿Llegó al final?
;Salta si no es igual (-10)
Programa que localiza el mayor y el menor de los 16 datos de un byte almacenados a partir
de la posición 50h y los almacena, respectivamente, en las posiciones A0h y B0h.
;Números CON SIGNO
0000 CE000F
INICIO:
0003 A650
0005 E650
0007 09
BUCLE:
0008 A150
000A 2E02
000C A650
000E E150
NOMAX:
0010 2D02
0012 E650
0014 8C0000
NOMIN:
0017 26EE
0019 97A0
001B D7B0
001D 01
FIN:
0000
M6800
LDX
LDAA
LDAB
DEX
CMPA
BGT
LDAA
CMPB
BLT
LDAB
CPX
BNE
STAA
STAB
NOP
END
#0Fh
50h,X
50h,X
50h,X
NOMAX
50h,X
50h,X
NOMIN
50h,X
#00
BUCLE
0A0h
0B0h
;En A el mayor
;En B el menor
;Compara con el mayor
;Salta si es menor (+2)
;Carga el dato en A
;Compara con el menor
;Salta si es mayor (+2)
;Carga el dato en B
;No es el último (-18)
;Guarda el mayor
;Guarda el menor
Página 4
Universidad de Alcalá
Departamento de Automática
;Números SIN signo
0000 CE000F
INICIO:
0003 A650
0005 E650
0007 09
BUCLE:
0008 A150
000A 2402
000C A650
000E E150
NOMAX:
0010 2502
0012 E650
0014 8C0000
NOMIN:
0017 26EE
0019 97A0
001B D7B0
001D 01
FIN:
0000

I. T. Informática de Sistemas
Laboratorio de Microprocesadores
LDX
LDAA
LDAB
DEX
CMPA
BCC
LDAA
CMPB
BCS
LDAB
CPX
BNE
STAA
STAB
NOP
END
#0Fh
50h,X
50h,X
50h,X
NOMAX
50h,X
50h,X
NOMIN
50h,X
#00
BUCLE
0A0h
0B0h
;En A el mayor
;En B el menor
;Compara con el mayor
;Salta si es menor (+2)
;Carga el dato en A
;Compara con el menor
;Salta si es mayor (+2)
;Carga el dato en B
;No es el último (-18)
;Guarda el mayor
;Guarda el menor
Programa que suma dos datos de 16 bytes que comienzan en las posiciones 0050h y 0060h y
almacena el resultado a partir de la dirección 00A0h. Como el M6800 almacena los datos en
memoria con los bytes de pesos mayores en las direcciones menores, los bytes de mayor peso
de los operandos se encuentran en las direcciones 0050h y 0060h, por lo que el acarreo final
se almacenará en la dirección 009Fh.
0000
0003
0004
0006
0008
000A
000B
000D
000F
0011
0013
0015
0017
0019
0000
M6800
CE000F
0C
A650
A960
A7A0
09
26F7
9650
9960
97A0
8600
8900
979F
01
INICIO: LDX
CLC
BUCLE: LDAA
ADCA
STAA
DEX
BNE
LDAA
ADCA
STAA
LDAA
ADCA
STAA
FIN:
NOP
END
#0Fh
;Número de datos
50h,X ;Primer operando en 005Fh
60h,X ;Segundo operando en 006Fh
0A0h,X
;No cambia C. Solo cambia Z
BUCLE ;No es el penúltimo (Salta -12)
50h
;El último (mayor peso)
60h
0A0h
#00
;El acarreo final
#00
9Fh
Página 5
Universidad de Alcalá
Departamento de Automática
I. T. Informática de Sistemas
Laboratorio de Microprocesadores
REPERTORIO DE INSTRUCCIONES
En el M6800 hay alrededor de 200 códigos de operación (de un byte) mediante los cuales
se codifican todas las instrucciones con los modos de direccionamiento disponibles. (Se
muestran a continuación).
M6800
Página 6
Universidad de Alcalá
Departamento de Automática
M6800
I. T. Informática de Sistemas
Laboratorio de Microprocesadores
Página 7
Universidad de Alcalá
Departamento de Automática
M6800
I. T. Informática de Sistemas
Laboratorio de Microprocesadores
Página 8
Universidad de Alcalá
Departamento de Automática
M6800
I. T. Informática de Sistemas
Laboratorio de Microprocesadores
Página 9
Universidad de Alcalá
Departamento de Automática
M6800
I. T. Informática de Sistemas
Laboratorio de Microprocesadores
Página 10
Universidad de Alcalá
Departamento de Automática
M6800
I. T. Informática de Sistemas
Laboratorio de Microprocesadores
Página 11
Descargar