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 |