• No se han encontrado resultados

El microprocesador de 16 bits MC68000

N/A
N/A
Protected

Academic year: 2021

Share "El microprocesador de 16 bits MC68000"

Copied!
15
0
0

Texto completo

(1)

El microprocesador de 16 bits MC68000

INTRODUCCIÓN

El microprocesador MC68000 fue presentado por Motorola en 1979 como el primero de una amplia familia de periféricos, microprocesadores y microcontroladores derivados de él. Se trata de un potente microprocesador con bus de datos de 16 bits pero registros internos de 32 bits.

El MC68000 dispone de dos modos de funcionamiento: el modo usuario y el modo supervisor. En el modo supervisor el programa puede acceder a todos los recursos del sistema, pudiendo también ejecutar instrucciones restringidas en el modo usuario.

MODELO DE PROGRAMACIÓN

SEÑALES EN EL MC68000

• Alimentación única de +5 V.

• Bus de datos triestado bidireccional de 16 bits (D0-D15) que puede manejar datos de 8 y de 16 bits.

• Bus de direcciones triestado de 23 bits (A1-A23) que le permiten direccionar 16 Mb (no existe la línea A0).

• Señales de salida FC0, FC1 y FC2 para informar del estado del procesador indicando, entre otros aspectos si los accesos a datos y a programas se hacen en modo usuario o en modo supervisor así como el reconocimiento de interrupciones.

Terminal de salida /AS (Address strobe) de validación de la dirección presente en el bus.

Señal de entrada /DTACK (Data Transer Acknowledge) para indicar que se ha completado la transferencia de datos. Permite el manejo de los buses de forma asíncrona.

Línea de salida R/W (Read/Write) para indicar la operación sobre la memoria.

7 0 15 8 31 16 7 0 15 8 31 16 7 0 15 8 31 16 7 0 15 8 31 16 7 0 15 8 31 16 7 0 15 8 31 16 7 0 15 8 31 16 7 0 15 8 31 16 D0 D1 D2 D3 D4 D5 D6 D7 31 16 15 0 A0 31 16 15 0 A1 31 16 15 0 A2 31 16 15 0 A3 31 16 15 0 A4 31 16 15 0 A5 31 16 15 0 A6 31 0 A7 USP 7 0 CCR 31 0 PC 31 0 A7’ SSP 7 CCR 0 15 8 SR Modo Supervisor

(2)

Señales de salida /UDS (Upper Data Strobe) y /LDS (Lower Data Strobe) que complementan el bus de direcciones para indicar si el acceso se hace al byte alto, al byte bajo o a ambos bytes de la dirección presente en el bus.

Señal de entrada /BR (Bus Request) de petición del bus.

Señal de salida /BG (Bus Grant) para indicar cesión del bus.

• Señal de entrada /BGACK para indicar que un dispositivo externo se ha convertido en el maestro del sistema de buses.

• Terminal de salida E que proporciona una señal de reloj de frecuencia 10 veces inferior a la del reloj de la CPU y que cumple las especificaciones de los periféricos 68XX.

Línea de salida /VMA (Valid Memory Address) equivalente a la del 6800.

Terminal de entrada /VPA (Valid Peripheral Address) que modifica el ciclo de trabajo para hacerlo compatible con el del 6800.

• Líneas de entrada IPL0, IPL1 y IPL2 para la petición codificada de hasta 7 niveles de interrupción.

• Terminal bidireccional /RESET que si se activa externamente inicializa la CPU y que permite la inicializar el resto del sistema mediante la instrucción RESET.

• Terminal bidireccional /HALT que puede ser activada desde el exterior para parar la CPU. Como salida indica que la CPU se ha detenido por alguna causa de error.

Señal de entrada /BERR (Bus Error) que indica a la CPU fallos en los ciclos de acceso a memoria.

EL REGISTRO DE ESTADO (SR)

El byte bajo del registro de estado (SR) se denomina Registro de Códigos de Condición (CCR) y contiene los flags accesibles en modo usuario:

• C (carry) es el indicador de acarreo.

• V (overflow) es el indicador de desbordamiento.

• Z (zero) es el indicador de cero (resultado nulo).

• N (negative) es el indicador de resultado negativo.

• X es el bit indicador de extensión. No cambia con las instrucciones de movimiento de datos y, cuando cambia, lo hace igual que el bit de acarreo.

El byte alto del SR solo es accesible en modo supervisor y contiene los flags de control del sistema:

• I2-I1-I0 son los bits de máscara de interrupción por niveles.

• S es el bit de modo usuario/supervisor.

• T (Trace) es el bit indicador de modo paso a paso.

INTERRUPCIONES

En el MC68000 no se habla de interrupciones sino de excepciones como término más general. Las excepciones son sucesos (externos o internos) que interrumpen la ejecución normal de un programa y hacen que la CPU desarrolle las siguientes fases:

1. Guarda el registro de estado y se activa el bit S.

2. Obtiene la dirección de comienzo de la rutina de atención específica a la excepción.

3. Guarda en la pila el PC , el registro de estado original y los parámetros que permitirán la continuación del programa.

(3)

Las interrupciones externas enmascarables se producen a través de las líneas IPL0, IPL1 y IPL2 y permiten establecer un sistema 7 niveles de prioridad (111-Nivel cero, ausencia de interrupción). Los bits I0, I1 y I2 del registro de estado delimitan los niveles de interrupción permitidos (000-todas las interrupciones permitidas). Cuando la CPU reconoce y acepta una petición de interrupción, pone en las líneas A1, A2 y A3 el número de nivel atendido y espera en el bus de datos el número del vector de interrupción.

Las interrupciones software se producen mediante la instrucción TRAP #n, donde n es un número entre 0 y 15 que provoca una excepción cuyo vector está comprendido entre 32 y 47.

Además de las interrupciones software y de las interrupciones externas enmascarables, en el MC68000 hay diferentes circunstancias que pueden producir excepciones:

• La activación de la señal /RESET provoca la excepción cuyo vector es el 0.

La activación de la señal /BERR provoca la excepción de error de bus (vector 2).

La excepción de overflow se produce si, al ejecutarse la instrucción TRAPV, el bit V del registro de estado está a 1.

• La instrucción CHK compara el contenido de un registro con un operando y provoca la

excepción de CHK (vector 6) si el contenido del registro es menor que cero o mayor que

el operando.

• Las instrucciones DIVS (División con signo) y DIVU (División sin signo) provocan la

excepción de división por cero (vector 5) si el dividendo es cero.

La excepción por error de dirección (vector 3) se produce automáticamente si se intenta buscar un dato de 16 o 32 bits en una dirección impar.

La excepción de violación de privilegio (vector 8) se produce si se intenta ejecutar en modo usuario alguna instrucción exclusiva del modo supervisor.

• Si la CPU lee un código de operación que no se corresponde con ninguna instrucción del MC68000, se produce la excepción de instrucción ilegal (vector 4).

La ejecución de programas paso a paso puede realizarse gracias a que al finalizar cada instrucción se produce la excepción de modo traza (vector 9), que permite la depuración de programas y que se produce cuando el bit T del registro de estado está a 1.

MODOS DE DIRECCIONAMIENTO

En el MC68000 los modos de direccionamiento se refieren al modo de obtener uno de los operandos de la instrucción, pues se da el caso de instrucciones que precisan dos operandos que se obtienen por distintos modos de direccionamiento. Se habla de dirección efectiva (EA) al hacer referencia a la localización exacta del operando.

• DIRECTO DE REGISTRO: El operando está incluido en uno de los 16 registros multifunción: registros de dirección A0...A7 ó registros de datosD0...D7.

CLR.L D1 Pone a cero todos los bits del registro D1.

ADD A1,A2 Suma la palabra contenida en A1 con la contenida en A2 y almacena el resultado en A2.

• INMEDIATO: En el direccionamiento inmediato el operando va incluido en la propia instrucción y se trata de un número precedido del símbolo «#».

ADD.W #5,D0 Suma el número 5 a la palabra de menor peso de D0.

• INDIRECTO DE REGISTRO: En este modo el operando se encuentra siempre en memoria y en el cálculo de la EA interviene siempre al menos un registro de direcciones que se incluye en la propia instrucción.

(4)

MOVE #27,(A3) Guarda el valor 27 en la palabra cuya dirección está contenida en el registro A3.

• INDIRECTO DE REGISTRO CON POSTINCREMENTO: La dirección del operando está contenida en el registro que se incluye en la instrucción; tras localizar el operando, el contenido del registro se incrementa en una, dos o en cuatro unidades según el tamaño del operando (.B, .W ó .L).

MOVE.L (A0)+,D1 Mueve la doble palabra cuya dirección está en A0 al registro D1; a continuación incrementa el registro A0 en cuatro unidades.

• INDIRECTO DE REGISTRO CON PREDECREMENTO: La dirección del operando está contenida en el registro que se incluye en la instrucción; antes de obtener el operando, el contenido del registro se decrementa en una, dos o en cuatro unidades según el tamaño del operando (.B, .W ó .L).

CLR.L -(A0) Resta 4 a A0 y, a continuación, pone a cero la doble palabra cuya dirección está contenida en A0.

• INDIRECTO DE REGISTRO CON DESPLAZAMIENTO: La dirección del operando se obtiene al sumar el contenido de un registro de direcciones con el desplazamiento dd 16 bits incluido en la instrucción, con extensión de signo.

CLR.W #9(A0) Pone a cero la palabra cuya dirección viene dada por la suma del contenido del número 9 con el contenido de A0.

• INDIRECTO DE REGISTRO CON ÍNDICE: La dirección del operando se obtiene al sumar el contenido del registro de direcciones con un desplazamiento de 8 bits extendido en signo y con el contenido de un registro adicional que se denomina registro índice y que puede ser de datos o de direcciones.

ADD #9(A0,D0.B),D1 Suma a la palabra de menor peso de D1 la palabra cuya dirección se obtiene al sumar 9 al contenido del registro A0 y al byte de menor peso del registro índice D0.

• ABSOLUTO: La dirección del operando se especifica explícitamente en la instrucción. Si en la instrucción se incluye un dato de 16 bits, se hace extensión de signo, por lo que el rango de direcciones estará entre 0 y $7FFF.

JMP $400 Salta a la dirección hexadecimal 400. MOVE 12000,D1 Copia la palabra de dirección 12000 en D1.

• RELATIVO AL CONTADOR DE PROGRAMA CON DESPLAZAMIENTO: La dirección

del operando se indica de forma relativa al contador de programa. Durante la ejecución de una instrucción el contador de programa se ha incrementado en dos unidades con respecto a la dirección de la instrucción que se está ejecutando. La dirección del operando resulta al sumar el contenido del contador del programa y un desplazamiento extendido en signo.

BEQ BUCLE Salta a la posición representada por BUCLE si la condición EQ es cierta.

• RELATIVO AL CONTADOR DE PROGRAMA CON ÍNDICE Y DESPLAZAMIENTO:

La dirección del operando se obtiene al sumar el contenido del contador de programa con el valor del desplazamiento extendido en signo y el contenido de un registro índice (A o D).

JMP #SALTO(A0.W) Salta a la posición definida por la etiqueta SALTO más la palabra de menor peso de A0 extendida en signo.

(5)

• IMPLÍCITO: La propia instrucción indica implícitamente donde se encuentra el operando (SR, CCR y USP).

ORGANIZACIÓN DE LA MEMORIA EN EL MC68000

Como no existe la línea A0, las direcciones de memoria que aparecen en el bus son siempre direcciones pares, aunque es posible acceder a datos de tipo byte mediante las señales UDS y LDS.

El MC68000 soporta datos de tipo byte, palabra, doble palabra y BCD y se colocan en memoria según el convenio de Motorola, es decir, con la parte más significativa siempre en la dirección más baja, comenzando las palabras y dobles palabras siempre en direcciones pares. Las instrucciones del programa deben comenzar siempre en direcciones pares.

LENGUAJE ENSAMBLADOR DEL MC68000

El ensamblador del MC68000 establece que en cada línea pueden incluirse hasta 4 campos, separados entre sí por, al menos, un espacio:

Etiqueta Código_de_Operación Operandos Comentarios

El campo Etiqueta es opcional; puede empezar en la primera columna y terminar en espacio o empezar en cualquier columna y finalizar con dos puntos «:».

El campo correspondiente al Código_de_Operación debe separarse del campo anterior mediante un espacio y puede ser el mnemónico de una instrucción o a una directiva del ensamblador. En el primer caso puede incluir un sufijo de extensión de tamaño, que especifica el tamaño de los datos con los que opera: .B para byte, .W para palabra (tamaño por defecto) o .L para doble palabra (32 bits).

El campo Operandos incluirá uno o dos operandos, según la instrucción. Si son dos los operandos necesarios, se incluirán separados por una coma, sin espacios entre ambos y de acuerdo con la sintaxis Operando_Fuente,Operando_Destino.

El campo Comentarios debe separarse del anterior por, al menos, un espacio. También se considera comentario cualquier línea con un asterisco «*» en la primera columna.

EXPRESIONES EN ENSAMBLADOR

La utilización de etiquetas y símbolos está permitida de acuerdo con los convenios habituales, quedando reservadas las siguientes: D0...D7 para los registros de datos, A0...A7 para los registros de direcciones, A7 o SP para el puntero de pila, USP para el puntero de pila cuando se programa en modo supervisor, CCR para el registro de códigos de condición (8 bits de menor peso de SR) y SR para el registro de estado.

El ensamblador del MC68000 permite la utilización de los operadores aritméticos y lógicos más habituales, con la condición de no incluirse espacios en las expresiones: Menos unario (-), negación unaria (~), desplazamiento lógico a la derecha (>>) o izquierda (<<), and (&), or (!), or exclusiva (^), multiplicación (*), división (/), módulo (%), suma (+) y resta (-).

(6)

Los números pueden expresarse en diferentes bases según el prefijo que se incluya: % para binario, @ para octal, & para decimal y $ para hexadecimal, considerándose números decimales por defecto si no se incluye ninguno.

DIRECTIVAS DEL ENSAMBLADOR

Las directivas deben escribirse separadas del margen izquierdo al menos un espacio. Las mas importantes son las siguientes:

Dirección inicial del programa: ORG dirección.

Fin de archivo fuente: END dirección.

Definición de constantes simbólicas: etiqueta EQU expresión.

Inicialización de datos en memoria: etiqueta DC operandos.

Reserva de memoria sin inicializar: etiqueta DS operandos.

EJEMPLOS DE PROGRAMAS PARA EL MC68000

• Programa que suma sin signo los contenidos de las direcciones 0600h y 0601h y guarda el resultado en la posiciones 0610h y 0611h, de acuerdo con el orden que el MC68000 guarda los datos en memoria.

ORG $400

inicio movea.w #$600,a0 En A0 la dirección del primer operando movea.w #$610,a1 En A1 la dirección del resultado

eor d1,d1 D1 a cero

move.b (a0)+,d0 Carga operando y apunta al siguiente add.b (a0),d0 Suma y guarda el resultado en D0 addx.b d1,d1 Byte alto en D1

move.b d1,(a1)+ Byte alto del resultado a memoria move.b d0,(a1) Byte bajo del resultado a memoria move.b #9,d0 D0.B=9 para finalizar con TRAP #15 trap #15 Retorno al programa monitor.

END inicio

• Programa que inicializa a FFh las posiciones de memoria comprendidas entre la 0600h y 06FFh.

ORG $400

inicio movea.w #$600,a0 En A0 la dirección inicial move.b #$ff,d0 En D0 el dato (FF)

bucle move.b d0,(a0)+ Guarda dato e incrementa A0 puntero cmpa.w #$700,a0 Compara A0 con el final

bne.s bucle Si no llegó al final salta a bucle move.b #9,d0 D0.B=9 para finalizar con TRAP #15 trap #15 Retorno al programa monitor.

END inicio

• Programa que inicializa el bloque de memoria entre las direcciones 600h y 6FFh con los valores 0, 1, 2, ..., FFh.

ORG $400

(7)

eori.b #$0,d0 En D0 el dato (inicialmente 0) bucle move.b d0,(a0)+ Guarda dato e incrementa puntero addq.b #1,d0 Incrementa dato

cmpa.w #$700,a0 Compara A0 con el final

bne.s bucle Si no llegó al final salta a bucle move.b #9,d0 D0.B=9 para finalizar con TRAP #15 trap #15 Retorno al programa monitor.

END inicio

• Programa anterior modificado para que la inicialización se realice en orden inverso (de la 600h a la 6FFh con los valores FFh, FEh, FDh, ...0).

ORG $400

inicio movea.w #$600,a0 En A0 la dirección inicial

eori.b #$FF,d0 En D0 el dato (inicialmente FFh) bucle move.b d0,(a0)+ Guarda dato e incrementa puntero subq.b #1,d0 Decrementa dato

cmpa.w #$700,a0 Compara A0 con el final

bne.s bucle Si no llegó al final salta a bucle move.b #9,d0 D0.B=9 para finalizar con TRAP #15 trap #15 Retorno al programa monitor.

END inicio

• Programa que copia el bloque de memoria comprendido entre las direcciones 600h y 6FFh a partir de la dirección 1000h.

ORG $400

inicio movea.w #$600,a0 Líneas 2 a 7 NO NECESARIAS

eori.b #$0,d0 Inicializan el bloque con 0, 1, 2, ... $FF sigue move.b d0,(a0)+

addq.b #1,d0 cmpa.w #$700,a0 bne.s sigue

*INICIO DEL PROGRAMA SEGÚN EL ENUNCIADO

origen movea.w #$0600,a1 Dirección origen en A1 movea.w #$1000,a0 Dirección destino en A0

bucle move.b (a1)+,(a0)+ Copia e incrementa las direcciones cmpa.w #$0700,a1 Compara con la última dirección bne.s bucle

move.b #9,d0 D0.B=9 para finalizar con TRAP #15 trap #15 Retorno al programa monitor.

END inicio

• Programa que localiza el mayor y el menor de los 16 datos de un byte almacenados a partir de la posición 600h y los almacena, respectivamente, en las posiciones 620h y 630h.

* Números SIN signo ORG $400

(8)

inicio movea.w #$600,a0 En A0 la dirección de los datos movea.w #$620,a1 En A1 la dirección del mayor movea.w #$630,a2 En A2 la dirección del menor move.b (a0),d0 En D0 el dato a comparar move.b d0,(a1)

move.b d0,(a2) adda.w #$1,a0 bucle move.b (a0)+,d0

cmp.b (a1),d0 (Destino-Fuente) D0-(A1) bcs nomayor Si hay acarreo D0 no es mayor move.b d0,(a1)

nomayor cmp.b (a2),d0 (Destino-Fuente) D0-(A2) bcc nomenor Si hay acarreo D0 no es menor move.b d0,(a2)

nomenor cmpa #$610,a0

bne bucle Si A0 es 610h termina

fin move.b #9,d0 D0.B=9 para finalizar con TRAP #15 trap #15 Retorno al programa monitor.

END inicio

* Números CON signo ORG $400

inicio movea.w #$600,a0 En A0 la dirección de los datos movea.w #$620,a1 En A1 la dirección del mayor movea.w #$630,a2 En A2 la dirección del menor move.b (a0),d0 En D0 el dato a comparar move.b d0,(a1)

move.b d0,(a2) adda.w #$1,a0 bucle move.b (a0)+,d0

cmp.b (a1),d0 (Destino-Fuente) D0-(A1)

blt nomayor Signo y Overflow distintos ( (A1) =< D0 ) move.b d0,(a1)

nomayor cmp.b (a2),d0 (Destino-Fuente) D0-(A2)

bge nomenor Signo y Overflow iguales ( (A2) < D0 ) move.b d0,(a2)

nomenor cmpa #$610,a0

bne bucle Si A0 es 610h termina

fin move.b #9,d0 D0.B=9 para finalizar con TRAP #15 trap #15 Retorno al programa monitor.

END inicio

• Programa que suma dos datos de 32 bytes cada uno y almacena el resultado en 33 bytes. ORG $400

inicio

* INICIALIZA DATO1 A FFh indat1 move.b #$FF,d0

lea dato1,a0 Dirección de DATO1 en A0 movea.w a0,a1 Copia A0 en A1

add.w #$20,a1 Suma 32 a A1 bucle1 move.b d0,(a0)+

cmpa.w a0,a1 bne.s bucle1

(9)

* INICIALIZA DATO2 A FFh indat2 move.b #$FF,d0

lea dato2,a0 Dirección de DATO2 en A0 movea.w a0,a1 Copia A0 en A1

add.w #$20,a1 Suma 32 a A1 bucle2 move.b d0,(a0)+

cmpa.w a0,a1 bne.s bucle2

* INICIO DEL PROGRAMA SEGÚN EL ENUNCIADO

suma lea dato1,a1 En A1 la dirección de comienzo de DATO1 adda.w #$20,a1 A1 apunta al byte de menor peso de DATO1 lea dato2,a2 Idem para DATO2

adda.w #$20,a2

lea resul,a3 Idem para RESUL

movea.w a3,a4 A4 contiene la dirección del último byte a sumar

adda.w #$20,a3

andi.b #$0ee,ccr $0EE=11101110 - Pone a cero C y X bucle3 move.b -(a1),d1 Primer sumando en D1

move.b -(a2),d2 Segundo sumando en D2 addx.b d1,d2 Suma

move.b d2,-(a3) Resultado en la dirección almacenada en A3 cmp a4,a3 ¿Es el último byte el sumado?

bgt.s bucle3

move.b #0,d0 Acarreo final: move.b d0,d1 D0=D1=0

addx.b d1,d0 Suma D0+D1+X

move.b d0,acarr Resultado a la dirección más baja de RESUL fin move.b #9,d0 D0.B=9 para finalizar con TRAP #15

trap #15 Retorno al programa monitor. ORG $500

dato1 DS.b $30 Reserva 30h bytes a partir de la $500 dato2 DS.b $30 Reserva 30h bytes a partir de la $530 acarr DS.b 1 Reserva un byte en la dirección $560 resul DS.b $20 Reserva 20h bytes a partir de la $561 END inicio

REPERTORIO DE INSTRUCCIONES

El repertorio de instrucciones del MC68000 incluye instrucciones de movimiento de datos, de aritmética entera, lógicas, de desplazamiento y rotación, de manipulación de bits, para BCD, de control de programa y de control del sistema. (Ver páginas siguientes).

Algunas instrucciones admiten variaciones en sus códigos de operación básicos, al añadirles uno de los siguientes sufijos: A (dirección), I (inmediato), Q (Rápido), M (memoria) y X (extendido).

(10)
(11)
(12)
(13)
(14)
(15)

Referencias

Documento similar

You may wish to take a note of your Organisation ID, which, in addition to the organisation name, can be used to search for an organisation you will need to affiliate with when you

Where possible, the EU IG and more specifically the data fields and associated business rules present in Chapter 2 –Data elements for the electronic submission of information

The 'On-boarding of users to Substance, Product, Organisation and Referentials (SPOR) data services' document must be considered the reference guidance, as this document includes the

In medicinal products containing more than one manufactured item (e.g., contraceptive having different strengths and fixed dose combination as part of the same medicinal

Products Management Services (PMS) - Implementation of International Organization for Standardization (ISO) standards for the identification of medicinal products (IDMP) in

Products Management Services (PMS) - Implementation of International Organization for Standardization (ISO) standards for the identification of medicinal products (IDMP) in

This section provides guidance with examples on encoding medicinal product packaging information, together with the relationship between Pack Size, Package Item (container)

Package Item (Container) Type : Vial (100000073563) Quantity Operator: equal to (100000000049) Package Item (Container) Quantity : 1 Material : Glass type I (200000003204)