Está en la página 1de 31

7.

 Modos de direccionamiento
El MC68000 permite 12 modos de direccionamiento para localizar a los operandos.

Podemos dividir los modos de direccionamiento en 5 grupos:

 Directo de registro : el operando es el dato contenido en un registro de datos o de 

direcciones. Incluye: directo de registro de datos y directo de registro de 
direcciones.
Indirecto de registro: El operando se encuentra en memoria y es necesario obtener su 

dirección a partir de un registro de direcciones. Incluye: Indirecto de registro, indirecto 
de registro con postincremento, indirecto de registro con predecremento, 
indirecto de registro con desplazamiento e indirecto de registro indexado con 
desplazamiento.
Absoluto: el operando está en memoria y se da su dirección explicitamente. Incluye: 

absoluto largo y absoluto corto.
Relativo al contador del programa: La dirección del operando es relativa al contenido 

del PC. Incluye: relativo al PC con desplazamiento y relativo al PC indexado con 
desplazamiento.
 Inmediato: El operando se expresa de forma explícita.

  1
7. Modos de direccionamiento

Directo de Registro Datos:


El operando está en el registro de datos especificado por la
dirección efectiva.
• Sintáxis: MNEMÓNICO.N Dn,OPERANDO_DESTINO
Ejemplo:

  2
7. Modos de direccionamiento
Directo de Registro Direcciones:
El operando está en el registro de direcciones especificado
por la instrucción.
• Sintáxis: MNEMÓNICO.N An,OPERANDO_DESTINO
Ejemplo:

  3
7. Modos de direccionamiento

* Programa 4.1: las horas antigúas están en D1 y las que hay que 
*añadir en D2

MOVE.L D1,D3   Las horas antigúas están en D3
ADD.L D2,D3    las horas totales en D3
BVS ERROR   salta a etiqueta ERROR si hay desbordamiento
BEQ CERO    Salta a CERO si el total es cero
.........

  4
7. Modos de direccionamiento

Indirecto de Registro Direcciones:


El operando está en la posición de memoria indicada por el
registro de direcciones especificado en la instrucción.
Sintáxis: MNEMÓNICO.N (An),OPERANDO_DESTINO
Ejemplos:

  5
7. Modos de direccionamiento

* Programa 4.2: las horas antigúas están en una doble palabra en la dirección
* $6000 y las que hay que  añadir en $6004

* Poner las direcciones en registros de dirección
MOVEA.L #$6000, A1  A1 contiene $6000
MOVEA.L #$6004,A2  A2 contiene $6004
MOVEA.L #$6008,A3  A3 contiene $6008

MOVE.L (A1),D3   Las horas antigúas están en D3
ADD.L (A2),D3    las horas totales en D3
MOVE.L D3,(A3) Las horas totales están en la dirección $6008 de la memoria
BVS ERROR   salta a etiqueta ERROR si hay desbordamiento
BEQ CERO    Salta a CERO si el total es cero
  6
.........
7. Modos de direccionamiento

Indirecto de Registro Direcciones con Postincremento:


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.
•Sintáxis: MNEMÓNICO.N (An)+,OPERANDO_DESTINO
Ejemplos:

  7
7. Modos de direccionamiento
Se usa para el recorrido de arrays monodimensionales desde las direcciones
más bajas a las más altas.
También para la recuperación de datos de la pila

* Programa 4.3: Modificación del programa 4.2 para utilizar este modo

* Poner las direcciones en registros de dirección
MOVEA.L #$6000, A1  A1 contiene $6000
MOVE.L (A1)+,D3   Las horas antigúas están en D3, se suma 4 al puntero A1
ADD.L (A1)+,D3    las horas totales en D3, A1 se incrementa en 4
MOVE.L D3,(A1) Las horas totales están en la dirección $6008 de la memoria
BVS ERROR   salta a etiqueta ERROR si hay desbordamiento
BEQ CERO    Salta a CERO si el total es cero
.........
  8
7. Modos de direccionamiento

* Programa 4.4: Copia una cadena de caracteres ASCII de una posición a otra 
*de la memoria. A1 apunta al primer caracter ASCII del bloque de  texto almacenado
* en la memoria. Se supone que el último caracter es el ASCII nulo.  

LAZO TST.B (A1)  ¿hemos alcanzado un nulo?
           BEQ FIN
           MOVE.B (A1)+, (A2)+  copia un byte de una dirección a otra de la memoria
           BRA LAZO

  9
7. Modos de direccionamiento
Indirecto de Registro Direcciones 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.
Sintáxis: MNEMÓNICO.N -(An),OPERANDO_DESTINO

­ Ejemplos:

  10
7. Modos de direccionamiento
Se usa para el recorrido de arrays monodimensionales desde las direcciones
más altas a las más bajas.
También para el almacenamiento de datos en la pila

  11
7. Modos de direccionamiento
Indirecto de Registro con desplazamiento:
Este modo requiere de una palabra de extensión detrás del código de ope
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 exten
Sintáxis: MNEMÓNICO.N d16(An),OPERANDO_DESTINO
Ejemplo:

  12
7. Modos de direccionamiento
En este modo de direccionamiento el valor de An no cambia
como ocurría en el anterior. Se puede utilizar para acceder a una
tabla cuya dirección base es la de An

* Programa 4.5 : Cambiar el orden de dos elementos de una tabla cuya dirección 
*base es la de A2

MOVE.L 4(A2),D0 Guardamos la 2ª entrada
MOVE.L 8(A2),4(A2) Movemos la 3ª entrada al lugar de la 2ª
MOVE.L D0,8(A2)  Ponemos la 2ª entrada en 3er lugar
Para operandos de tipo L o W la soma d16 +An debe ser par.

Hay casos en los que se necesita que el desplazamiento sea


variable, de ahí el motivo del siguiente modo.

  13
7. Modos de direccionamiento
Indirecto de Registro indexado con desplazamiento:

Este modo requiere de una palabra de extensión con el siguiente


formato:

La dirección del operando se obtiene tras sumar el contenido del


registro de direcciones con la constante de 8 bits dada en la
palabra de extensión y el contenido del registro índice:
Sintáxis: MNEMÓNICO.N   d8(An,X.t),OPERANDO_DESTINO 14
7. Modos de direccionamiento

Ejemplo:

  15
7. Modos de direccionamiento

* Programa 4.6 : Cambiar el orden de dos elementos de una tabla cuya dirección 
*base es la de A2
MOVEQ.L #4,D1 Se pone D1 a 4
MOVE.L 0(A2,D1.W),D0 Guardamos la 2ª entrada
MOVEA.W #8,A0
MOVE.L 0(A2,A0.W),0(A2,D1.W) Movemos la 3ª entrada al lugar de la 2ª
MOVE.L D0,0(A2,A0.W)  Ponemos la 2ª entrada en 3er lugar

  16
7. Modos de direccionamiento

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:

Dispone de dos EW que contienen los 24 bits de la dirección de


memoria del operando.

Absoluto corto:

Dispone de una palabra de extensión, EW, que se extiende en signo


para construir los 24 bits de la dirección de memoria del
operando. En este modo sólo se pueden acceder a las 32K
direcciones más bajas[$000000,$007FFF] y a las 32k más altas
[$FF8000,$FFFFFF].

Sintáxis Absoluto Largo:   MNEMÓNICO.N   xxxxxx,OPERANDO_DESTINO
  17
Sintáxis Absoluto Corto:   MNEMÓNICO.N   xxxx,OPERANDO_DESTINO
7. Modos de direccionamiento
Ejemplo:

  18
7. Modos de direccionamiento

*Programa 4.7: las horas antigúas están en una doble palabra en la 
*dirección $6000 y las que hay que  añadir en $6004

MOVE.L $6000,D3 Horas antigüas en D3
ADD.L $6004,D3    Horas totales en D3
MOVE.L D3,$6008 Se salva D3 en la memoria

  19
7. Modos de direccionamiento

Relativo:

Dos modalidades: relativo con desplazamiento y relativo


indexado con desplazamiento.

Similar a los modos indirectos con desplazamiento e


indexado con la salvedad que el registro usado es el
PC.

Relativo con Desplazamiento:

Al contenido del PC, se suma el desplazamiento de 16


bits extendido en signo.
Sintáxis : MNEMÓNICO.N
d16(PC),OPERANDO_DESTINO

  20
7. Modos de direccionamiento
Ejemplo:

  21
7. Modos de direccionamiento

Relativo con Índice y Desplazamiento:

Al contenido del PC, se 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.

Sintáxis : MNEMÓNICO.N
d8(PC,X.t),OPERANDO_DESTINO

  22
7. Modos de direccionamiento

Ejemplo:

  23
7. Modos de direccionamiento

● Los modos de direccionamientos relativos son utilizados para generar


código que funcione con independencia de la posición de memoria donde
se cargue el programa (código reubicable). Las referencias a memoria se
hacen con relación al valor del PC que no se conoce por anticipado.

Sólo pueden ser utilizados para operandos fuente. No se puede alterar la


memoria utilizando este modo.

  24
7. Modos de direccionamiento
Inmediato:
El dato se encuentra en una o varias de las palabras de
extensión que siguen a la OW de la propia instrucción o
incluso en el OW (modos rápidos).Sintáxis:
MNEMÓNICO.N #DATO,OPERANDO_DESTINO
Ejemplos:

  25
7. Modos de direccionamiento
● Se utiliza para inicializar los contenidos de los
registros (datos o direcciones) a un valor
determinado o para incrementar su valor.
● Las instrucciones de formato rápido utilizan este
modo, pero no requieren palabras de extensión
ya que el dato esta en la OW.

  26
7. Modos de direccionamiento
Instrucciones y modos de direccionamiento

La instrucción MOVE que hemos utilizado en los ejemplos


admite todos los modos de direccionamiento. No es un caso
habitual, lo normal es que cada instrucción admita un grupo
limitado de modos de direccionamiento.

Los distintos modos de direccionamiento se pueden clasificar


en cuatro categorías:
DATOS: Incluye los modos que pueden usarse para referirse a
operandos de datos. (Incluye todos los modos de
direccionamiento excepto el modo directo a registro
dedirecciones)
MEMORIA: Incluye todos los modos que pueden usarse para
referirse a operandos dememoria. (Inlcuye todos los modos
salvo el directo de registro)

  27
7. Modos de direccionamiento

CONTROL: Incluye todos los modos que pueden usarse para referirse
a operandos de memoria sin un tamaño asociado, y son usados
por instrucciones de control como saltos, llamadas a subrutinas,...
(Los modos indirectos con predecremento y postincremento y el
inmediato no están incluidos).
ALTERABLE: Incluye todos los modos que pueden usarse para
referirse a operandos modificables. Un operando destino sólo
puede usar los modos de direccionamiento incluidos en esta
categoría.(Los direccionamientos relativos al contador de
programa y el direccionamiento inmediato no pertenecen a este
grupo.)

  28
7. Modos de direccionamiento
Estas cuatro categorías primitivas pueden combinarse para
obtener las categorías que se resumen en la siguiente tabla:

Los operandos de las instrucciones vienen especificados


por alguna de estas categorías, y por tanto, sólo los
modos de direccionamiento incluidos en cada una de
 
ellas, son los válidos para dicho operando. 29
8. Conjunto de instrucciones

El 68000 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.
Se clasifican en 8 grupos según el tipo de operación que realizan::
Instrucciones de movimiento de datos: MOVE, MOVEA, MOVEM, MOVEQ,
EXG, LEA, PEA, SWAP, LINK y UNLNK
Instrucciones 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
Instrucciones lógicas: AND, ANDI, EOR, EORI, OR, ORI, NOT y TST
Instrucciones en BCD: ABCD, NBCD y SBCD

  30
8. Conjunto de instrucciones

Instrucciones de desplazamiento y rotación: ASL, ASR, LSL, LSR, ROL, ROR,


ROXL, ROXR y SWAP
Instrucciones de manipulación de bits: BTST, BSET, BCLR, BCHG
Instrucciones de control del programa: BRA, BSR, JMP, JSR, RTR, RTS, y NOP.
Instrucciones de control del sistema: RESET, RTE, STOP, TRAP, TRAPV,
CHK, ..

(VER TABLA RESUMEN)

  31

También podría gustarte