III. ARQUITECTURA DEL
MICROPROCESADOR
68000
A. EXCEPCIONES
Es el concepto
más amplio de las interrupciones. Es la respuesta del
68000 a sucesos tales como: ejecución de determinadas
instrucciones erróneas, interrupciones, activación
de líneas especiales.
La CPU guarda el
contenido de algunos registros y acude
a una dirección predeterminada. La
instrucción RTE (Retorno de Excepción) Reanuda la
ejecución del programa.
B. TIPOS DE EXCEPCION:
INTERNOS:
- Errores Detectados Internamente :
- Errores de Direccionamiento.
- Violación de Privilegio
- Código de Operación
inexistente.
- Por Ejecución de
Instrucciones: - TRAP (Siempre)
- TRAPV
- CHK
- División por 0
- Después de de cada instrucción si
esta en Modo Trazar (Bit T a 1).
EXTERNOS:
- Errores de Bus
(Señal BERR). - Reset Señal RESET
- Petición de
Interrupción.
Como se puede apreciar en la figura notaremos las
unidades básicas funcionales del
microprocesador.
IV.
CARACTERÍSTICAS PRINCIPALES DEL MICROPROCESADOR
68000
Tamaño de los Buses
Datos (DB15-D0):
16 bits
Direcciones: 23 bits, ya que el bit menos
significativo no sale realmente por el bus de direcciones, sino
a través de las señales de control LDS
y UDS.
CONTROL DEL BUS ASÍNCRONO
– UDS LDS (BE1, BE0)
– AS (Dirección
válida)
– R#W
– DTACK (Fin de ciclo de lectura/escritura)
Tamaños de datos utilizados
BYTE = 8 bits (B)
PALABRA (WORD) = 16
bits (W)
PALABRA LARGA (LONG WORD) = 32 bits (L).
Descripción Interna
Estructura de registros
- Registros de Datos D0-D7
Los registros de datos se usan para almacenar aquellos
datos que se van a manipular en las siguientes instrucciones del
programa o subrutina en curso. Por otra parte, al tener una
longitud de 32 bits, permiten trabajar en formatos de 32, 16 u 8
bits, según indique la instrucción.
Cada registro se
considera como:
* Tamaño: 32 bits.
* Modos de acceso:
- Octeto (.B): se accede sólo a los 8 bits
menos significativos. - Palabra (.W): se accede sólo a los 16 bits
menos significativos. - Palabra larga o doble (.L): se accede al registro
completo.
* Uso: para almacenar datos temporales.
- Byte: 8 bits
Un dato de este formato puede ser transferido en un solo
ciclo de bus.
- Palabras: 16 bits
Los datos bajo este formato también pueden ser
transferidos en un solo ciclo de bus.
- Palabras largas: 32 bits
Puesto que los registros internos del 68000 son de 32
bits, se consigue también manejar este tipo de datos, pero
al tener un bus de datos de 16 bits se necesitan 2 ciclos de bus
para una transferencia.
El microprocesador 68000 maneja datos de la siguiente
forma:
- Registros de Direcciones.
A0-A6
Los registros de direcciones se utilizan para
referenciar posiciones de memoria donde se
han de acceder datos o donde se han de escribir. Se ha de cuidar
sin embargo el tipo de dirección que se pretende acceder
según el formato (16, 32 bits) del operando. Cuando se
utilizan como operando destino, todo el registro es modificado,
independientemente del formato del la dirección,
realizando extensión de signo.
Sólo admiten el modo palabra o el de palabra
larga para lectura/escritura. No
obstante una escritura en modo palabra modificaría los 32
bits del registro (extensión de signo).
- Registro de Pila (SP)
– USP: Puntero de Pila del Usuario
– SSP: Puntero de Pila del Supervisor
El registro de pila, o puntero de pila, sirve para tener
referenciada la posición de memoria en que se encuentra el
último dato introducido en la pila. Se accede
automáticamente a un registro o a otro según el
microprocesador se encuentre en un modo u otro. Se decrementan
cuando se meten datos y se incrementan cuando se
sacan.
- Contador de Programa (PC)
Registro de 32 bits (sólo se usan los 24 LSBs).
El registro de contador de programa apunta constantemente a la
siguiente instrucción que va a ser ejecutada. En el caso
del 68000, solo 24 de sus 32 bits se usan (ver bus de
direcciones) y el la línea A0 indica por su parte si el
dato con el que se está trabajando es un byte par (A0=0,
activándose la línea /UDS), un byte impar (A0=1,
activándose la línea /LDS) o bien una palabra (en
cuyo caso se activan tanto /UDS como /LDS).
- Registro de Estado
Consta de 2 bytes: byte de sistema y byte de
usuario (también llamado registro de códigos de
condición o CCR).
El registro de estado se
subdivide en realidad en 2 bytes, cada uno ejerciendo una
función
bien distinta. Por una parte, se encuentra en registro de
códigos de condición (o CCR), que almacena unos
biestables que permiten los saltos condicionales y otras
instrucciones y que se encuentran en los 5 primeros bits del
byte. Los otros 3 no se usan y siempre están siempre a
0.
– Acarreo, C:
Este bit se pone a 1 cuando se produce un acarreo a
consecuencia de una instrucción.
– Desbordamiento, V:
Este bit denota al ponerse a 1 que la última
operación ha efectuado un desbordamiento en el
dato.
– Zero, Z:
Este bit indica que el último operando o
resultado ha sido 0. Para ello se coloca a 1.
– Negativo, N:
Indica el signo del último operando/resultado con
1 si ha sido negativo.
– Extensión, X:
Se comporta como un bit de acarreo. En la mayoría
de las instrucciones, un cambio en C
implica el mismo cambio en X pero existen instrucciones en las
que esto no ocurre.
Por otra parte se encuentra el byte del sistema, que
contiene información vital para el funcionamiento
del micro. Este byte solo puede ser modificado en modo
Supervisor.
–
Máscara de interrupciones I2, I1,
I0:
Con estos 3 bits se puede fijar el nivel de prioridad de
una interrupción. Almacena el nivel a partir del cual se
atiende a una interrupción. Estos 3 bits constituyen el
nivel de la máscara de interrupción. Esto quiere
decir que, para que una interrupción sea atendida, debe
ser de un nivel superior al indicado por estos 3 bits. Existe sin
embargo el nivel 7 (111) que se denomina no enmascarable puesto
que se atiende siempre. Existen pues 8 niveles de
interrupción, de 0 a 7. De otra forma se hace caso omiso
de la petición.
– Supervisor, S:
Este bit indica que el micro se encuentra en modo
Supervisor (1) o en modo Usuario (0).
– Traza, T:
Permite la ejecución paso a paso de un programa,
con vistas a la depuración de su código.
Para ello se ha de poner el bit a 1.
El MC68000 puede ejecutar sus instrucciones en
dos modos diferentes: 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.
V. ORGANIZACIÓN DE DATOS EN
MEMORIA
Habiendo establecido este espacio lineal de direcciones,
quedan reservadas las direcciones comprendidas entre la 0 y la
1024 para usos específicos esenciales del 68000, conocidas
como memoria del sistema y datos del sistema. Estas
direcciones contienen importantes tablas para el tratamiento de
las interrupciones, cargas de operativos, etc., y no deben ser
alteradas por el usuario. Algunas de estas direcciones pueden
estar el la ROM, de forma que no desaparezcan al desconectar la
alimentación, pero seguirán
utilizando espacio de direcciones como cualquier otra
posición de memoria. Habrá, con toda seguridad, otras
áreas de memoria asignadas permanentemente a otras
funciones no
accesibles al usuario de programas y datos.
Por disponerse de un bus de dato de 16 bits, la memoria
puede considerarse formada por unidades de ese tamaño. El
MC68000 lee 16 bits cada vez, coincidiendo con el formato de
codificación de instrucciones en palabras
de 16 bits. No obstante Se podrá acceder a la memoria para
leer un BYTE, una palabra WORD, ó una doble palabra LONG,
siempre y cuando se tengan en cuenta las siguientes
reglas:
- Las direcciones de los bytes pueden ser pares o
impares. Sus incrementos son de 1 en 1. - Las direcciones de las palabras son siempre pares.
Sus incrementos son de 2 en 2. - Las direcciones de las dobles palabras son pares. Sus
incrementos son de 4 en 4. - Cuando se accede a una palabra que está en la
dirección N, siendo N un número par, el byte de
la dirección N es el Byte más significativo y el
de la dirección N+1 es el byte menos significativo. Lo
que significa que cuando se mira una palabra de memoria, su
byte más significativo está en la
dirección más baja, y su byte menos significativo
está en la dirección más alta. - Al acceder a una doble palabra también se
realiza de tal manera que la palabra alta será la de
dirección más baja, mientras que la la palabra
baja está en la dirección más
alta. - Si se intenta acceder a una palabra o a una doble
palabra en una dirección impar, se provocará un
error.
Recordando lo más característico de la
manera de acceder a memoria es:
- No existencia de segmentación o restricciones en el
tamaño del programa, siendo utilizable todo el espacio
de direcciones de manera lineal. - Las instrucciones de los programas se almacenan como
palabras. - Los datos pueden tratarse como bytes, Word ó
long. - Las direcciones de palabra (WORD) y doble palabra
(LONG) son pares.
VI. SINTAXIS DEL
ENSAMBLADOR
68000
La Sintaxis de un lenguaje
ensamblador es el conjunto de reglas que debe guardar el
programa fuente y que estará compuesto por una serie de
instrucciones, distinguiéndose cuatro campos: etiqueta,
mnemotécnico, operando y comentario. El programa fuente
deberá estar en un fichero ASCII que se
genera con la ayuda de un programa editor, y no un procesador de
textos, ya que estos generan códigos de control que los
ensambladores son incapaces de interpretar. Un sencillo editor es
el de MS-DOS. Las
instrucciones en código máquina se codifican por
campos, por lo que las instrucciones escritas en ensamblador se
codificaran también por campos.
Línea de Instrucción en
Ensamblador
ETIQUETA | NEMOTECNICO | OPERANDO | COMENTARIO |
SUBR | MOVE.L | D0, – (SP) | Guarda D0 |
Nemotecnico.Z [Fuente] , [Destino]
.Z=>Tamaño del argumento
.B (Byte)
.W (Word)
.L (Long Word)
Si no se especifica tamaño se entiende que es
.W
.Fuente=>Lugar (Mem. o Reg.) de donde procede uno de
los operandos
(No
se modifica)
.Destino=>Lugar donde se deposita el
resultado.
Es un campo opcional que se utiliza para tener una
referencia de las instrucciones. El programa ensamblador va
traduciendo secuencialmente las instrucciones del programa
fuente, guardando los códigos traducidos en posiciones
consecutivas de memoria. Cuando encuentra una etiqueta en una
línea de instrucción, el ensamblador guarda
dicha etiqueta en una tabla especial en la memoria, junto con
la dirección de memoria en la que se ha almacenado la
instrucción que la acompaña, así si
alguna instrucción tiene que referenciar a la
instrucción etiquetada, bastará con que se
escriban los caracteres de la etiqueta en el campo de
operandos correspondiente. El programa ensamblador se
encargará, cuando deba traducir esta
instrucción, de buscar en la tabla la dirección
en memoria de la instrucción correspondiente a la
etiqueta.Nombre simbólico de la dirección en
memoria de la instrucción que le sigue.Formas de inclusión en el
programa:- En la misma línea que la
instrucción, pegada al margen izquierdo. - En la línea anterior a la de la
instrucción:
- Pegada al margen izquierdo.
- Con espacio a la izquierda y seguida de
" :
".
Ejemplo:
Caracteres permitidos:
- Solo los 15 primeros son
significativos. - Todos los códigos ASCII > 33 excepto:
+, -, *, /, &, !, |, ^, >, <, (, ). - El primer carácter no puede ser ni un
número, ni $ (Hexadec.), ni %
(binario).
Se utiliza para escribir los códigos de
instrucciones ejecutables y los códigos de
pseudoinstrucciones o directivos de ensamblador.
Las instrucciones ejecutables son los
mnemotécnicos que constituyen las instrucciones
del computador.Las pseudoinstrucciones sirven para dar al
ensamblador indicaciones como la dirección de
memoria a partir de la cual debe ir guardando los
códigos traducidos, realizar la reserva de las
posiciones de memoria donde deben guardarse los
resultados, etc. Las pseudoinstrucciones reciben este
nombre porque sus mnemotécnicos no se convierten
en código máquina, sino que son ejecutados
directamente por el programa traductor.- Campo de Nemotécnico:
Se utiliza para indicar los
valores concretos de los operandos que intervienen en
la operación definida por el campo
mnemotécnico. Dependiendo de la instrucción
indicada en el campo mnemotécnico, habrá
que definir el modo de direccionamiento, que
estará determinado generalmente, mediante una
combinación del código de operación
y la información del campo de
operandos.Las cantidades colocadas en el campo de
operandos pueden venir expresadas en diferentes
bases de numeración, que son: binaria,
decimal y hexadecimal, y van determinados por un
símbolo que se añade al valor numérico.DECIMAL
por defecto
BINARIO
%
HEXADECIMAL
$
- Números y constantes
alfabéticas. - Símbolos.
- Campo de Operandos:
El conjunto de caracteres alfanuméricos que
se utiliza en el campo de los operandos para indicar una
dirección recibe el nombre de símbolo. El
programador podrá definir sus propios símbolos mediante dos procedimientos:- De forma implícita, mediante el empleo
de etiquetas.
b) De forma explícita, mediante
algunas pseudoinstrucciones.- Expresiones.
Una expresión es una combinación de
números y/o símbolos unidos mediante operadores
aritméticos o lógicos- Campo de Comentarios:
- Mediante el campo de comentarios se trata de
hacer más comprensivo al programa, incluyendo el
todos los puntos claves, definición de
símbolos, reservas de memoria, propósito del
programa, etc. - El ensamblador los ignora.
- Se inicia con "*" ó ";".
Definir un símbolo consiste en asignar un
valor como un número o una dirección de
memoria a un nombre utilizando el directivo
EQU.Cuando el traductor lee este directivo, guarda
la etiqueta y el valor indicado en el operando, en una
zona de memoria denominada tabla de símbolos. Al
encontrar un símbolo en el campo de operandos el
traductor consultará esta tabla para ver el valor
que le corresponde.- DEFINICIÓN DE SÍMBOLOS (EQU)
– "EQUAL"El programa ensamblador utiliza un registro que
le indica en que posición de memoria debe guardar
una instrucción y que dirección debe
asignar a una determinada etiqueta. Este registro se
llama contador de dirección de ensamblado. Para
poner el contenido de este contador a un valor
determinado se usa una pseudoinstrucción
denominada ORG. - EL CONTADOR DE DIRECCIÓN DE ENSAMBLADO
(ORG) – "ORIGIN"La sentencia DC.S permite definir una
posición de memoria conteniendo un valor
determinado o una serie de valores que se colocarán en orden a
partir de la posición señalada. - DEFINICIÓN DE CONSTANTES (DC)
La sentencia DS,S reserva espacio de memoria sin
especificar su contenido , y su longitud viene dada por
el valor del operando , viéndose afectado este por
el tamaño de la palabra como un factor
multiplicador siendo por 1, por 2 o por 4
respectivamente.DS.B expresión (DB, BYTE)
DS.W expresión (DW, WORD)
DS.L expresión (DL, LONG)
- DEFINICIÓN DE DATOS (DS)
La sintaxis de este directivo es muy simple ya
que consta sólo de un campo de
mnemotécnico, END. Este directivo
únicamente se usa una vez en cada programa y
será necesariamente la última
instrucción. - ÚLTIMA SENTENCIA DEL PROGRAMA
(END)La programación modular consiste en
dividir un programa complejo en módulos
independientes de manera que cada uno de ellos realice
una tarea concreta.Para permitir la traducción de dichos módulos
se usa el directivo EXT que indica al ensamblador que los
símbolos utilizados en el módulo objeto de
la traducción están definidos en otro
módulo diferente.En el módulo donde se definen los
símbolos que pueden ser utilizados por otros
módulos deberá indicarse con el directivo
DEF. - ENLACE ENTRE PROGRAMAS (EXT, DEF)
Estas pseudoinstrucciones funcionan como en un
lenguaje de alto nivel, es decir si se
verifica la condición, el ensamblador
traduce las instrucciones entre el IF y el ELSE y sino,
entre el ELSE y el ENDIF. - ACCIONES CONDICIONALES (IF, ELSE,
ENDIF)El programa ensamblador puede emitir una serie
de informes, como mostrar un listado en lenguaje
ensamblador y en código máquina, mostrar
los errores sintácticos, etc. Los directivos que
realizan estas funciones son los siguientes:- NAME: da la posibilidad de poner un
identificador al programa, así cuando se liste
aparecerá el nombre en la cabecera. - PAGE: indica al traductor que debe de saltar
a una nueva página cuando esté
imprimiendo el informe. - LIST: indica al traductor que imprima el
programa fuente. - TABLE: indica al traductor que imprima la
tabla de símbolos - LALL: indica al traductor que imprima el
programa fuente, el código máquina y la
tabla de símbolos.
- ALMACENAMIENTO EN POSICIÓN
PAR
Existe una pseudoinstrucción, EVEN, que
soluciona el problema de los microprocesadores de 16 bits, ya que estos
sólo pueden utilizar datos de 2 bytes o
más, comenzando siempre desde una posición
par.Operaciones (Orden De
Precedencia)| OR lógico
^ OR exclusivo
& And lógico
+ Suma
– Resta
* Multiplicación
/ División
> Desplazamiento lógico a la
derecha< Desplazamiento lógico a la
izquierda+, – Cambio de signo
! Negación
( ) Paréntesis (uso
ilimitado)VII. INSTRUCCIONES DEL
MOTOROLAA
continuación se desarrollarán las
instrucciones del Motorola 68000, agrupadas según
la función básica que realizan, estudiando
la operación que realizan, su sintaxis, sus campos
y algunos ejemplos.El conjunto de estas instrucciones permite
el movimiento de datos entre registros de
la CPU, entre registros y memoria y entre posiciones
de memoria. Estas son las siguientes:MOVE: realiza la transferencia
de un dato desde fuente a destino. Modifica el CCR de
forma que refleja el signo del dato movido y el hecho
de que sea cero o no. Los flags C y V se ponen a cero
y el flag X no se modifica. También el manejo
de la pila se lleva a cabo mediante esta
instrucción, utilizando direccionamiento
indirecto con el registro A7 que actúa como
puntero de pila. Para llevar un dato a la pila el
direccionamiento es indirecto con predecremento,
mientras que para extraerlo se emplea el indirecto
con posincremento.MOVEA: (Move Adress) es una
variante dedicada a la transferencia de direcciones.
El tamaño del dato es de 16 ó 32
bits. No modifica el CCR.MOVEQ: (Move Quick) tiene por
finalidad la carga rápida de un registro de
datos.MOVEM: (Move Múltiple)
carga una serie de posiciones consecutivas de memoria
en varios registros a la vez. No afecta al CCR.
Ejemplo: MOVEM.L $1000,D0-D2/A2-A4/D7 copia los
contenidos de las posiciones $1000, $1002,
$1004,…$100C en los registros D0, D1, D2, D7, A2,A3
y A4 respectivamente.EXG y SWAP: la primera
intercambia el contenido completo de dos registros de
datos o de dirección, mientras que la segunda
actúa sobre un único registro, siempre
de datos, intercambiando sus palabras alta y baja. La
realización de estas transferencias sin la
existencia de estas instrucciones, requeriría
la ejecución de tres instrucciones MOVE, y la
utilización de otro registro o de la memoria
como almacenamiento temporal.LEA y PEA: (Load Effective
Adress y Push Effective Adress) determinan la
dirección efectiva del operando fuente. La
primera almacena la dirección efectiva
calculada en el registro de direcciones que se
especifique como operando destino y la segunda lo
lleva a la pila. Ninguna de las dos afecta al
CCR.LINK y UNLINK: facilitan las
operaciones necesarias para el paso de
parámetros a/de subrutinas a través de
la pila, ofreciendo la ventaja de ser independiente
de las áreas de memoria de datos de un
programa, y de no necesitar el uso de etiquetas, ni
de direcciones concretas para acceder a dichos
parámetros, facilitando así la
inclusión de las subrutinas en programas
diferentes sin necesidad de hacer cambios en ellas.
La instrucción LINK reserva una zona de
memoria en la pila, desplazando el puntero de pila
(SP) hacia direcciones menores en el valor que se
indique.
La instrucción UNLINK restablece la pila en la
situación que se encontraba antes de la
ejecución de LINK, cargando el puntero de pila
con el contenido del registro de direcciones
que se indica y a continuación extrae la
palabra larga apuntada por SP y la lleva al registro
de direcciones, quedando así restaurado.
- Instrucciones de Transferencias de
DatosEl Motorola 68000 dispone de instrucciones
para las 4 operaciones aritméticas, sobre
operandos binarios, y suma y resta sobre datos
codificados en BCD. Además de cambio de signo
para ambos tipo de datos, instrucciones de
comparación, extensión de signo y
actualización de los códigos de
condición (CCR) según el valor de un
dato.ADD: realiza la suma de los
operandos fuente y destino, quedando el resultado
almacenado en destino. Modifica el CCR en
función del resultado de la
operación.ADDA: (Add Adress) realiza la
operación de la suma, siendo el destino un
registro de direcciones en vez de datos.ADDI: (Add Inmediate) realiza
la operación suma mediante direccionamiento
inmediato.ADDQ: (Add Quick) realiza la
operación resta mediante direccionamiento
inmediato siendo el destino menor o igual que
8.ADDX: (Add Extended) incluye
en el resultado la suma del flag X, lo que facilita
las operaciones con valores que superan la capacidad
de los registros (precisión
múltiple).SUB: (Substract) realiza la
diferencia entre fuente y destino, depositando el
resultado en destino.SUBA: (Substract Adress)
realiza la operación de la resta, siendo el
destino un registro de direcciones en vez de
datos.SUBI: (Substract Inmediate)
realiza la operación resta mediante
direccionamiento inmediato.SUBQ: (Substract Quick)
realiza la operación resta mediante
direccionamiento inmediato siendo el destino menor o
igual que 8.SUBX: (Substract Extended)
incluye en el resultado la resta del flag X, lo que
facilita las operaciones con valores que superan la
capacidad de los registros (precisión
múltiple).MULS y MULU: (Multiply Signed
and Multiply Unsigned) realizan la
multiplicación sobre los datos de 16 bits,
generando un resultado de 32 bits, siendo el destino
un registro de datos. Los flags C y V siempre quedan
a 0 y el flag X no se modifica, reflejando el
resultado de la operación los flags Z y
N.DIVS y DIVU: (Signed y
Unsigned) realizan la división de un dato de
32 bits (en destino) por otro de 16 bits (en fuente),
generando dos resultados de 16 bits: el cociente y el
resto, siendo obligatorio que el destino sea un
registro de datos. El cociente se guarda en los 16
bits menos significativos y el resto en los 16 bits
más significativos del registro destino. Ambas
instrucciones ponen el flag C a 0, y el flag X no se
modifica. Puede producirse desbordamiento si el
divisor es pequeño, reflejándose en el
flag V. Los flags N y Z son modificados reflejando el
resultado de la operación.CMP: (Compara) las
instrucciones de comparación efectúan
la substracción destino-fuente pero la
diferencia no se lleva a ningún destino,
limitándose a afectar a los flags N, Z, V y C,
de forma que se puedan comprobar diversas relaciones
entre los datos que se comparen con el fin de
producir ramificaciones en el programa.CMPA: (Compare Adress) utiliza
como destino un registro de direcciones.CMPI: (Compare Inmediate)
utiliza direccionamiento inmediato para fuente. Para
el operando destino puede utilizar todos los modos
salvo direccionamiento directo a registro de
direcciones, indirectos con predecremento o
posincremento y los relativos a PC.CMPM: (Compare Memory) compara
dos datos en memoria con direccionamiento indirecto
con posincremento facilitando así la
comparación de bloques de memoria.CLR: (Clear) carga un cero
binario en el operando destino poniendo los flags N a
0, Z a 1, V a 0 y C a 0.NEG: (Negate) esta
instrucción devuelve el complemento a 2 del
operando y esto supone el cambio aritmético de
signo. Afecta a todos los flags del CCR.NEGX: (Negate Extended)
facilita el cambio de signo de valores de
precisión múltiple.
EXT: (Extend) cuando se quiere ampliar
la longitud de un dato con signo, por ejemplo de byte
a palabra o de palabra a palabra larga, sin alterar
su valor, el dato original debe mantenerse en el byte
o palabra de menor peso, y el byte o palabra que se
añade debe tener todos sus bits con el mismo
valor que el bit de signo del dato original,
recibiendo esta operación el nombre de
extensión de signo. - Instrucciones Aritméticas:
El Motorola 68000 dispone de cuatro
instrucciones que realizan funciones
lógicas, que actúan bit a bit
sobre datos de 8, 16, ó 32 bits y cuatro para
manejar bits individuales sobre datos de 8 ó
32 bits.AND: es la Y lógica. Admite todos los modos
de direccionamiento para el operando fuente menos
direccionamiento directo a registro de
direcciones, mientras que el operando destino admite
también todos menos los direccionamientos
relativos a PC.ANDI: realiza la misma
función que AND, pero su direccionamiento es
inmediato en el operando fuente y todos menos el
direccionamiento directo a registro de direcciones y
relativos a PC.EOR: es el O exclusivo. Admite
únicamente el direccionamiento directo a
registro de datos para el operando fuente, mientras
que el operando destino admite también todos
menos los direccionamientos directo a registro de
direcciones y los relativos a PC.EORI: realiza la misma
función que EOR, pero su direccionamiento es
inmediato en el operando fuente y todos menos el
direccionamiento directo a registro de direcciones y
relativos a PC.NOT: complementación
lógica.OR: es la O lógica.
Admite todos los modos de direccionamiento para el
operando fuente menos direccionamiento directo
a registro de direcciones, mientras que el operando
destino admite también todos menos los
direccionamientos relativos a PC y directo a registro
de direcciones.ORI: realiza la misma
función que OR, pero su direccionamiento es
inmediato en el operando fuente y todos menos el
direccionamiento directo a registro de direcciones y
relativos a PC.TST: (Test) comprueba un operando. Los flags
V y C se ponen a 0.Scc: Comprueba los
códigos de condición y pone a 1 el
operando. Es de tamaño byte. - Instrucciones Lógicas:
Se caracterizan por desplazar o rotar el
operando bit a bit a la derecha o a la izquierda. El
operando destino, que es el afectado por el
desplazamiento o por la rotación siempre
será un registro de datos.ASL: (Arithmetic Shift Left)
desplaza a la izquierda los bits del operando
destino. El número de desplazamientos viene
indicado por el operando origen. El flag V se pone a
1 si el bit más significativo cambia en
algún momento y C es el valor del
último bit desplazado fuera del operando
destino.ASR: (Arithmetic Shift Right)
desplaza a la derecha los bits del operando destino.
El número de desplazamientos viene indicado
por el operando origen. El flag V se pone a 0, y el C
es el valor del último bit desplazado fuera
del operando destino.LSL: (Logical Shift Left) es
el desplazamiento lógico a la izquierda. El
número de desplazamientos viene indicado por
el operando origen. El flag C es el valor del
último bit desplazado fuera del operando
destino.LSR: (Logical Shift Right) es
el desplazamiento lógico a la derecha. El
número de desplazamientos viene indicado por
el operando origen. El flag C es el valor del
último bit desplazado fuera del operando
destino.ROL: (Rotate Left) rota a la
izquierda los bits del operando destino. El
número de desplazamientos viene indicado por
el operando origen. El flag C es el valor del
último bit desplazado fuera del operando
destino.ROR: (Rotate Right) rota a la
derecha los bits del operando destino. El
número de desplazamientos viene indicado por
el operando origen. El flag C es el valor del
último bit desplazado fuera del operando
destino.ROXL: (Rotate with Extended
Left) rotación a la izquierda con
extensión. El número de desplazamientos
viene indicado por el operando origen. El flag C es
el valor del último bit desplazado fuera del
operando destino.ROXR: (Rotate with Extended
Right) rotación a la derecha con
extensión. El número de desplazamientos
viene indicado por el operando origen. El flag C es
el valor del último bit desplazado fuera del
operando destino.SWAP: intercambia el contenido
de los 16 bits más significativos con el de
los 16 menos significativos, ya que los operandos son
de tamaño palabra. Los flags V y C se ponen a
0. - Instrucciones de Desplazamiento y
Rotación:El Motorola 68000 permite comprobar, poner a
cero , poner a uno e invertir los bits individuales
de un valor entero.BTST: (Bit Test) sirve para
comprobar el estado de un bit concreto de destino. Actualiza el flag
Z en función del valor del bit indicado en la
instrucción (Z=1 si el bit es cero). Admite el
direccionamiento inmediato y el directo a registro de
datos en el operando fuente y en el operando destino
todos menos el directo a registro de
direcciones.BCLR: (Bit Clear) pone a 0 el
bit indicado. Actualiza el flag Z en función
del valor original del mismo, poniéndolo
posteriormente a cero.BSET: (Bit Set) igual que
BCLR, pero poniendo el bit a 1.BCHG: (Bit Change) en primer
lugar actualiza el flag Z en función del valor
del bit indicado y luego complementa el bit, es decir
lo pone en el valor (0 ó 1) contrario al
original. - Instrucciones de Manipulación de
Bits:De la misma manera que el Motorola 68000
opera con enteros, también permite programar
la suma y la resta en código BCD.ABCD: suma fuente al
destino.NBCD: niega el
destino.SBCD: resta fuente al
destino - Instrucciones de Operación en
Código BCD:Este microprocesador incorpora varios
mecanismos para poder realizar instrucciones
típicas de los lenguajes de alto nivel, como
pueden ser los bucles o las instrucciones de
condición, siendo el más elemental la
instrucción de ramificación, que
utiliza como operando una etiqueta, y que sirve para
hacer que la próxima instrucción que se
ejecute sea la que tenga dicha etiqueta. Cuando el
procesador se encuentra con esta instrucción,
sencillamente carga la etiqueta en el contador de
programa, por lo que la etiqueta es la
dirección de donde debe cargarse la
próxima instrucción que vaya a
ejecutarse.Bcc: (Branch on condition
code) utilizan un único argumento que indica
la dirección de la siguiente
instrucción en el caso de que se cumpla la
condición indicada por cc. Utiliza siempre
direccionamiento relativo al contador de programa. cc
representa dos letras variables detalladas en la siguiente
tabla:DBcc: (Decrement and Branch on
Condition Code) facilita la realización
de bucles en un programa, y tiene dos argumentos
siendo el primero un registro de datos y el segundo
un desplazamiento de 16 bits respecto al PC. Su
funcionamiento se puede detallar a
continuación:1º Comprueba la condición cc, si
se cumple, pasa a ejecutar la instrucción
siguiente (secuencia normal del programa) y en caso
de estar realizando un bucle se saldría del
mismo.2º Decrementa el contenido del registro
de datos.3º Si el contenido del registro es -1,
se ejecuta la instrucción siguiente (salida
del bucle)4º Modifica el PC con el desplazamiento
indicado (salta al comienzo del bucle).BRA: (Branch) utiliza
direccionamiento relativo al PC, su único
argumento es el desplazamiento de 8 ó 16 bits
que se suma (con signo) al PC y se obtiene la
dirección de la siguiente instrucción a
ejecutar. Con desplazamiento corto (8 bits) los
saltos máximos que se pueden realizar son -128
y +127. Con desplazamiento largo ( 16 bits) los
saltos máximos son -32.768 y
+32.767.JMP: (Jump) utiliza
direccionamiento absoluto y su argumento es la
dirección de comienzo de la siguiente
instrucción a ejecutar y puede estar situada
en cualquier parte del mapa de memoria.STOP: para la ejecución
del programa de forma controlada y en el punto
deseado.NOP: (No Operation) no realiza
absolutamente nada. Es una instrucción que no
hace sino consumir tiempo, exactamente 4 ciclos de reloj.
Puede parecer absurda la existencia de una
instrucción así, pero tiene su
justificación, como por ejemplo si se desea
efectuar un pequeño retraso en la
ejecución de un programa con el fin de
sincronizar determinados acontecimientos, o cuando se
desea reservar algunas posiciones del programa para
poder intercalar nuevas instrucciones,
etc. - Instrucciones de Ramificación y
Salto: - Instrucciones de Manejo de
Subrutinas:
BSR y JSR: (Branch to Subrutine y
Jump to Subrutine) el operando asociado con estas
instrucciones debe ser la dirección de memoria en
la que se comienza la subrutina, con direccionamiento
absoluto para JSR, y relativo a PC para BSR. Al
ejecutarse cualquiera de las dos instrucciones, se
almacena automáticamente en la pila el valor del
contador de programa en el momento anterior al salto,
cuando su contenido apunta a la dirección de
comienzo de la instrucción siguiente a JSR o BSR.
La subrutina debe tener como última
instrucción a ejecutar RTS (Return
from Subrutine) o RTR (Return and Restore).
Ambas recuperan de la pila el valor del contador del
programa, lo que permite reanudar la ejecución del
programa precisamente en el punto que había sido
abandonado. La instrucción RTR también
repone el CCR extrayendo una palabra de la pila
inmediatamente antes de recuperar el PC. La subrutina
debe llevar a la pila, justamente encima de las
posiciones que contienen la posición de retorno,
una palabra cuyos 5 bits menos significativos
serán llevados al CCR al ejecutarse RTR, que puede
ser una copia del CCR al entrar en la subrutina, o
cualquier otro valor.VIII. MODOS DE
DIRECCIONAMIENTOSon las formas de indicar al
procesador:- Donde puedo encontrar un dato.
- Donde debo depositarlo.
- A que ligar debe saltar para proseguir la
ejecución.
Existen cuatro modos de
direccionamiento:1. Direccionamiento inmediato o
literal:- Almacena el operando precedido del
símbolo # en el registro indicado. - El operando (en vez de su dirección)
esta incluido en la instrucción. (Usa 2 ó
4 bytes).
Ejemplo: MOVE.L #$18, D6
2. Direccionamiento absoluto:
Almacena el operando que está en la
dirección de memoria especificada en el registro
de datos indicado.Ejemplo: ADD.W %000000001000111110001, D2 suma
la palabra que está en la dirección de
memoria indicada, a D2.3. Direccionamiento mediante
registro:Apunta a la dirección del registro donde
está el dato.Ejemplo: MOVE.B D3, D4 copia el contenido del
registro D3 (byte) a D4.4. Direccionamiento relativo a
registro:Se da la dirección del registro donde
está la dirección del dato. El nombre
del registro se escribe entre
paréntesis.Ejemplo: ADD.B (A0), D6 suma el contenido
de la posición de memoria (byte) cuya
dirección está en A0 al registro D6,
guardando el resultado en este
último.- Direccionamiento mediante registro
normal:Incrementa en una cantidad de memoria,
según sea el tamaño del operando (1
para B, 2 para W y 4 para L), después de traer
el contenido de la posición de memoria
indicada por el registro de direcciones.Ejemplo: MOVE.W (A0)+, D0 copia en D0 el
contenido de la posición de memoria
direccionada por A0 y luego incrementa en 2 el
contenido de A0. - Direccionamiento relativo a registro con
posincremento:Decrementa en una cantidad de memoria,
según sea el tamaño del operando, el
registro de direcciones y trae después el
contenido de la posición de memoria cuya
dirección es el nuevo valor de dicho
registro.Ejemplo: MOVE.B -(A0), D0
decrementa en uno el contenido del registro A0 y
luego copia en D0 el contenido de la nueva
posición de memoria direccionada por
A0. - Direccionamiento relativo a registro con
predecremento:El contenido de la posición de
memoria cuya dirección viene dada por la suma
del valor del registro de direcciones y una cantidad
fija denominada desplazamiento, pudiendo ser este
positivo o negativo y su valor viene condicionado por
el tamaño del operando.Ejemplo: MOVE.L N (A0), D1 copia en el
registro D1 el contenido de la posición de
memoria cuya dirección viene dada por la suma
de N multiplicado por 4(L) al contenido de
A0. - Direccionamiento relativo a registro con
desplazamiento:Este modo de direccionamiento es la
extensión natural del anterior, ya que permite
usar desplazamientos variables, utilizando como
desplazamiento el resultado de sumar un número
fijo al contenido de un registro de datos denominado
registro índice.Ejemplo: MOVE.B 4(A0, D1), D0 copia en el
registro D0 el contenido de la posición de
memoria cuya dirección es el resultado de
sumar el número 4, el contenido del registro
A0 y el contenido del registro D1. Este modo de
direccionamiento no altera el registro de direcciones
ni el registro índice. - Direccionamiento relativo a registro con
índice:Cuando es necesario hacer referencia a un
operando relativo a la posición de la
próxima instrucción que va a ser
ejecutada.Ejemplo: MOVE.B 24(PC), D0 copia en el
registro D0 el contenido de la posición de
memoria cuya dirección es la suma de 24 y el
valor del contador del programa. - Direccionamiento relativo al contador
de programa con desplazamiento: - Direccionamiento relativo al contador
de programa con índice:
Utiliza como desplazamiento el resultado de
sumar un número fijo al contenido de un registro
de datos.Ejemplo: MOVE.B 24(PC, D0), D1 copia en el
registro D1 el contenido de la posición de memoria
cuya dirección es el resultado de sumar el
número 24, el contador de programa y el contenido
del registro D0.Edson Palomino
SantillanUniversidad Nacional Mayor de San Marcos
Ingenieria de Sistemas
Lima – Perú - NAME: da la posibilidad de poner un
- EJECUCIÓN DE INFORMES
(NAME, PAGE, LIST, TABLE, LALL)
- En la misma línea que la
- Campo de Etiqueta:
Página anterior | Volver al principio del trabajo | Página siguiente |