MOTOROLA 68000
Como ya se dijo el MC68000 es un microprocesador de 16/32 bits fabricado por Motorola que sirve para realizar programas en assembler. Algunas características del MC68000 son: Su alimentación única es de +5V, la frecuencia de funcionamiento es de 4-25MHz también soporta 5 tipos de datos: Bits (1), BCD (4), BYTE (8), WORD (16) y LONG (32 bits), tiene 56 diferentes tipos de instrucciones y 14 modos de direccionamiento, entre otras.
ARQUITECTURA Y PROGRAMACIÓN DEL MC68000
− Consta de 16 Bus datos (D0 D1 D2…D15)
− Consta de 24 Bus direcciones: A1…A23, donde A0 es interno y apunta a los 2 bytes en memoria, A0 a A23 son direcciones de 000000H a FFFFFFH
− Tiene 8 registros de datos de 32 bits
− Tiene 8 registros de direcciones de 32 bits desde la A0 hasta A7 (A7 puntero de pila SP)
− Gran ortogonalidad ya que todas las instrucciones tienen los mismos modos de direccionamiento
– El tamaño del operando se especifica, explícitamente,
en la instrucción: MNEMÓNIICO.N (donde N es B para byte, W para Word y L para long Word)
– Otras instrucciones soportan tamaños predefinidos y no requieren el uso del formato anterior.
El MC68000 puede ejecutar sus instrucciones en dos modos diferentes estos son: el modo usuario y el modo supervisor.
- El MODO USUARIO, conforma un entorno de programación para la ejecución de los programas de aplicación. En este modo no se pueden ejecutar ciertas instrucciones y no se puede acceder a parte del registro de Estado.
- El MODO SUPERVISOR permite utilizar el juego de instrucciones completo y acceder a todo el registro de Estado, tanto en lectura como en escritura. Se establece así unos "privilegios" de utilidad en sistemas operativos y software de base de los sistemas.
Registros de Datos: Cada registro se puede considera como una palabra larga de 32 bits (bit de signo = bit 31), dos palabras de 16 bits (palabras alta y baja), en este modo sólo se accede a la palabra baja (Bit de signo = bit 15) y la escritura del tamaño de la palabra, no altera la palabra alta, y el modo cuatro bytes, en este modo byte, se accede al byte bajo de la palabra baja, dejando intactos los restantes bits (Bit de signo = bit 7).
Registros de Direcciones (A0-A6): Este registro contienen las direcciones de memoria que usan los modos de direccionamiento. La dirección del operando resultante del
modo de direccionamiento debe ser par para palabra y palabra larga, y par o impar, para
byte. Aquí solo admiten el modo palabra o el de palabra larga para lectura/escritura, sin embargo, una escritura en modo palabra modificaría los 32 bits del registro (extensión de signo). También se debe indicar que las operaciones con estos registros no modifican los bits del CCR.
Registro de Dirección A7: Este registro es el puntero de pila (Stack Point o SP), que físicamente está desdoblado en dos registros: USP y SSP accesibles según el modo de funcionamiento (Usuario o Supervisor).
El SP se decrementa cuando se introducen datos en la pila y se
incrementa cuando estos se extraen y siempre apunta al último dato
almacenado.
Contador de Programa (PC): Este contiene la dirección de memoria donde se encuentra la siguiente instrucción a ejecutar. Sólo se utilizan los 24 bits menos significativos.
Registro de estado (SR): Este registro se divide en dos mitades de 8 bits: Byte del Sistema (acceso sólo en modo supervisor) y Byte de Usuario o CCR (que contiene los flags).
Modos de direccionamiento:
1. Inmediato: En este modo el dato se encuentra en una o varias de las palabras de extensión que siguen a la palabra de operación de la propia instrucción. Este modo se utiliza para inicializar los contenidos de los registros (datos o direcciones) a un valor determinado o para incrementar su valor. Sintaxis: MNEMÓNICO.N #DATO, OPERANDO_DESTINO
2. Relativo al registro: que pueden ser mediante:
- Registro de Datos Directo: Donde el operando está en el registro de datos especificado por la dirección efectiva.
Sintaxis: MNEMÓNICO.N Dn, OPERANDO_DESTINO
Ejemplo:
- Registro Direcciones Directo: Donde el operando está en el registro de direcciones especificado por la instrucción.
Sintaxis: MNEMÓNICO.N An, OPERANDO_DESTINO
Ejemplo:
- Registro Direcciones Indirecto: En este registro el operando está en la posición de memoria indicada por el registro de direcciones especificado en la instrucción.
Sintaxis: MNEMÓNICO.N (An),OPERANDO_DESTINO
- Registro Direcciones Indirecto con Postincremento: Aquí el operando está en la posición de memoria indicada por el registro de direcciones
especificado en la instrucción. Después de acceder, el registro de direcciones se incrementa en 1, 2 o 4 unidades dependiendo si el tamaño del operando es byte, palabra o palabra larga respectivamente.
Sintaxis: MNEMÓNICO.N (An)+, OPERANDO_DESTINO
- Registro Direcciones Indirecto con Predecremento: Antes de acceder, el registro de direcciones se decrementa en 1, 2 o 4 unidades dependiendo del tamaño del operando. Después, se accede al dato en la dirección resultante.
Sintaxis: MNEMÓNICO.N -(An), OPERANDO_DESTINO
- Registro Direcciones Indirecto con desplazamiento: En este modo se requiere de una palabra de extensión detrás del código de operación. La dirección del dato es la suma de la dirección contenida en el registro An y la constante de 16 bits, extendida en signo, contenida en la palabra de extensión.
Sintaxis: MNEMÓNICO.N d16(An),OPERANDO_DESTINO
- Registro Direcciones Indirecto con índice: En este modo se requiere de una palabra de extensión con el siguiente formato:
Aquí la dirección del operando se obtiene al sumar el contenido del
registro de direcciones con la constante de 8 bits que es dada en la palabra de extensión y el contenido del registro índice:
Sintaxis: MNEMÓNICO.N d8 (An, X.t), OPERANDO_DESTINO
3. Absoluto: En este modo las palabras de extensión contienen la dirección de memoria donde están los operandos. Existen dos tipos: absoluto largo ( que dispone de dos palabras de extensión que contienen los 24 bits de la dirección de memoria del operando) y Absoluto corto(que dispone de una palabra de extensión, que se extiende en signo para construir los 24 bits de la dirección de memoria del operando).
Sintaxis Absoluto Largo: MNEMÓNICO.N xxxxxx,OPERANDO_DESTINO
Sintaxis Absoluto Corto: MNEMÓNICO.N xxxx, OPERANDO_DESTINO
4. Relativo: En este modo existen dos modalidades: relativo con desplazamiento y relativo indexado con desplazamiento.
Es similar a los modos indirectos con desplazamiento e indexado con
la salvedad que el registro usado es el PC, también permite realizar código reubicable.
- Relativo con Desplazamiento: Su función es que al contenido del PC, le suma el desplazamiento de 16 bits extendido en signo.
Sintaxis: MNEMÓNICO.N d16 (PC), OPERANDO_DESTINO
- Relativo con Índice y Desplazamiento- Relativo con Índice y Desplazamiento: Su función es que al contenido del PC, se le suma el desplazamiento de 8 bits extendido en signo y el contenido de un registro índice que se extiende en signo si el tamaño es W.
Sintaxis : MNEMÓNICO.N d8 (PC,X.t),OPERANDO_DESTINO
EL CONJUNTO DE INSTRUCCIONES
Como se dijo anteriormente el MC68000 tiene 56 instrucciones que, combinadas con los 14 modos de direccionamiento y los cinco formatos de datos, ofrece al programador una herramienta potente para el desarrollo de programas.
Dichas instrucciones se dividen en distintos grupos los cuales son:
- Operaciones de movimiento de datos: MOVE, MOVEA, MOVEM,
- MOVEQ, EXG, LEA, PEA, SWAP, LINK y UNLNK
- Operaciones de aritmética entera: ADD, ADDA, ADDI, ADDQ, ADDX,CLR, CMP, CMPA, CMPI, CMPM, DIVU, DIVS, EXT, MULU, MULS,NEG, NEGX, SUB, SUBA, SUBI, SUBW , SUBX y CMP
- Operaciones lógicas: AND, ANDI, EOR, EORI, OR, ORI, NOT y TST
- Operaciones en BCD: ABCD, NBCD y SBCD
- Operaciones de desplazamiento y rotación: ASL, ASR, LSL, LSR, ROL,
- ROR, ROXL, ROXR y SWAP
- Operaciones de manipulación de bits: BTST, BSET, BCLR, BCHG
- Operaciones de control del programa: BRA, BSR, JMP, JSR, RTR, RTS y NOP.
- Operaciones de control del sistema: RESET, RTE, STOP, TRAP,
TRAPV, CHK.
PROGRAMANDO EN EL ENSAMBLADOR
En el MC68000 cada línea del fichero .ASM que contiene el programa en
ensamblador debe tener el siguiente formato:
Label: Opcode Operand(s); Comment
Este campo Label (etiqueta) es opcional, Opcode es el que contiene el mnemónico de la instrucción o la directiva del ensamblador.
Operand(s), son los operandos (1 o 2 o ninguno) de la instrucción o
Directiva. Si hay 2 o más operandos, estos se separan por comas.
Y el último campo es el del comentario que es opcional y comienza con punto y coma.
DIRECTIVAS DE ENSAMBLADOR
Todos los programas deben ser escritos con un editor que no introduzca caracteres de control. Igualmente los programas han de contener la directiva ORG al principio del programa y la directiva END al final de éste.
ORG: Esta directiva inicializa el contador de programa con el valor del operando. Si no se utiliza una directiva ORG, se asume que el PC vale 0.
Su sintaxis: ORG valor
Ejemplo: ORG $400 directiva ORG con valor de 400
EQU: Esta directiva asigna al símbolo contenido en el campo etiqueta el valor de la expresión en el campo operando.
Sintaxis: etiqueta EQU valor
Ejemplo: PI EQU 3.1416
END: Esta directiva indica que el código ensamblador ha finalizado. No se ensamblará el texto situado a continuación de la directiva.
Sintaxis: END etiqueta
Ejemplo: END programa (programa es la etiqueta situada en la
primera instrucción del programa).
DC: La directiva DC define constantes en memoria, y permite asignar valores numéricos, tablas, caracteres o cadenas a variables de memoria.
Añadiendo .B, .W o .L se indica el tamaño de la constante. Si no se
indica nada, se asume tamaño W. Se pueden asignar hasta 256 bytes de datos en una única directiva.
DS: La directiva DS se utiliza para reservar posiciones de memoria. Añadiendo .B, .W o .L se indica el tamaño de cada elemento reservado. Así mismo que en la directiva DC si no se indica el tamaño, se asume como tamaño W.
Sintaxis: LABEL: DS.t valor
Ejemplo:
DS.B 256; Reserva 256 bytes consecutivos de memoria
DS.L 1; Reserva una palabra larga
Hola: DS 2; Reserva dos palabras en la dirección asignada a
; Hola
En este ejemplo se mostrara como es la programación en el MC68000, el objetivo del programa es el Cálculo de la medida de una tabla de 10 datos de 8 bits, almacenada en memoria a partir de una posición dada por una etiqueta.
La solución a dicho planteamiento seria a siguiente:
* SECCIÓN DE CÓDIGO *
******************************************
ORG $400
INICIO:
MOVEA.L #PILA, A7; Cargamos el puntero de pila
MOVE.L #TABLA, A0; Cargamos A0 con la dirección de la tabla
MOVE.L #N_DAT-1,D0 ; Cargamos el número de elementos
CLR.L D1; D1 almacenará la SUMA de los datos
CLR.L D2; D2=0
LAZO MOVE.B (A0)+, D2; Cargamos en D2 cada elemento
ADD.W D2, D1; Sumamos al resultado anterior
DBF D0, LAZO; Repetimos hasta que D0=-1
DIVU #N_DAT, D1; Dividimos D1/N
MOVE.B D1, RESULT; Almacenamos el resultado
FIN BRA FIN
******************************************
* SECCIÓN DE DATOS *
******************************************
ORG $20000
TABLA DC.B $01,$02,03,%00000100,$05,06,07,08,%00001001,10
RESULT DS.B 1
PILA EQU $28000
N_DAT EQU 10
END inicio
Laura Bolo Suasnabar
Página anterior | Volver al principio del trabajo | Página siguiente |