Direccionamiento
Direccionamiento
Direccionamiento
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 direccin 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 direccin explicitamente. Incluye: absoluto largo y absoluto corto. Relativo al contador del programa: La direccin 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 explcita.
7. Modos de direccionamiento
Directo de Registro Datos:
El operando est en el registro de datos especificado por la direccin efectiva. Sintxis: MNEMNICO.N Ejemplo: Dn,OPERANDO_DESTINO
7. Modos de direccionamiento
Directo de Registro Direcciones:
El operando est en el registro de direcciones especificado por la instruccin. Sintxis: MNEMNICO.N Ejemplo: An,OPERANDO_DESTINO
7. Modos de direccionamiento
* Programa 4.1: las horas antigas estn en D1 y las que hay que *aadir en D2 MOVE.L D1,D3 Las horas antigas estn 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 .........
7. Modos de direccionamiento
Indirecto de Registro Direcciones:
El operando est en la posicin de memoria indicada por el registro de direcciones especificado en la instruccin. Sintxis: MNEMNICO.N Ejemplos: (An),OPERANDO_DESTINO
7. Modos de direccionamiento
* Programa 4.2: las horas antigas estn en una doble palabra en la direccin * $6000 y las que hay que aadir en $6004 * Poner las direcciones en registros de direccin 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 antigas estn en D3 ADD.L (A2),D3 las horas totales en D3 MOVE.L D3,(A3) Las horas totales estn en la direccin $6008 de la memoria BVS ERROR salta a etiqueta ERROR si hay desbordamiento BEQ CERO Salta a CERO si el total es cero .........
7. Modos de direccionamiento
Indirecto de Registro Direcciones con Postincremento: El operando est en la posicin de memoria indicada por el registro de direcciones especificado en la instruccin. Despus de acceder, el registro de direcciones se incrementa en 1, 2 o 4 unidades dependiendo si el tamao del operando es byte, palabra o palabra larga respectivamente. Sintxis: MNEMNICO.N Ejemplos: (An)+,OPERANDO_DESTINO
7. Modos de direccionamiento
Se usa para el recorrido de arrays monodimensionales desde las direcciones ms bajas a las ms altas. Tambin parala recuperacin de datos de la pila * Programa 4.3: Modificacin del programa 4.2 para utilizar este modo * Poner las direcciones en registros de direccin MOVEA.L #$6000, A1 A1 contiene $6000 MOVE.L (A1)+,D3 Las horas antigas estn 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 estn en la direccin $6008 de la memoria BVS ERROR salta a etiqueta ERROR si hay desbordamiento BEQ CERO Salta a CERO si el total es cero .........
7. Modos de direccionamiento
* Programa 4.4: Copia una cadena de caracteres ASCII de una posicin 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 direccin a otra de la memoria BRA LAZO
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 tamao del operando. Despus, se accede al dato en la direccin resultante. Sintxis: MNEMNICO.N
- Ejemplos:
-(An),OPERANDO_DESTINO
10
7. Modos de direccionamiento
Se usa para el recorrido de arrays monodimensionales desde las direcciones ms altas a las ms bajas. Tambin 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 extensin detrs del cdigo de operacin. La direccin del dato es la suma de la direccin contenida en el registro An y la constante de 16 bits, extendida en signo, contenida en la palabra de extensin. Sintxis: MNEMNICO.N d16(An),OPERANDO_DESTINO Ejemplo:
12
7. Modos de direccionamiento
En este modo de direccionamiento el valor de An no cambia como ocurra en el anterior. Se puede utilizar para acceder a una tabla cuya direccin base es la de An
* Programa 4.5 : Cambiar el orden de dos elementos de una tabla cuya direccin
*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 hay el motivo del siguiente modo.
13
7. Modos de direccionamiento
Indirecto de Registro indexado con desplazamiento: Este modo requiere de una palabra de extensin con el siguiente formato:
La direccin del operando se obtiene tras sumar el contenido del registro de direcciones con la constante de 8 bits dada en la palabra de extensin y el contenido del registro ndice: Sintxis: MNEMNICO.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 direccin
*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 extensin contienen la direccin de memoria donde estn los operandos. Existen dos tipos:
Absoluto largo:
Dispone de dos EW que contienen los 24 bits de la direccin de memoria del operando.
Absoluto corto:
Dispone de una palabra de extensin, EW, que se extiende en signo para construir los 24 bits de la direccin de memoria del operando. En este modo slo se pueden acceder a las 32K direcciones ms bajas[$000000,$007FFF] y a las 32k ms altas [$FF8000,$FFFFFF].
Sintxis Absoluto Largo: MNEMNICO.N xxxxxx,OPERANDO_DESTINO Sintxis Absoluto Corto: MNEMNICO.N xxxx,OPERANDO_DESTINO
17
7. Modos de direccionamiento
Ejemplo:
18
7. Modos de direccionamiento
*Programa 4.7: las horas antigas estn en una doble palabra en la *direccin $6000 y las que hay que aadir en $6004 MOVE.L $6000,D3 Horas antigas 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. Sintxis : MNEMNICO.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 tamao es W. Sintxis : MNEMNICO.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 cdigo que funcione con independencia de la posicin de memoria donde se cargue el programa (cdigo reubicable). Las referencias a memoria se hacen con relacin al valor del PC que no se conoce por anticipado.
Slo pueden ser utilizados para operandos fuentes. 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 extensin que siguen a la OW de la propia instruccin o incluso en el OW (modos rpidos).Sintxis: MNEMNICO.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 rpido utilizan este modo, pero no requieren palabras de extensin ya que el dato esta en la OW.
26
7. Modos de direccionamiento
Instrucciones y modos de direccionamiento La instruccin MOVE que hemos utilizado en los ejemplos admite todos los modos de direccionamiento. No es un caso habitual, lo normal es que cada instruccin admita un grupo limitado de modos de direccionamiento. Los distintos modos de direccionamiento se pueden clasificar en cuatro categoras: 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 tamao asociado, y son usados por instrucciones de control como saltos, llamadas a subrutinas,...(Los modos indirectos con predecremento y postincremento y el inmediato no estn incluidos). ALTERABLE: Incluye todos los modos que pueden usarse para referirse a operandos modificables. Un operando destino slo puede usar los modos de direccionamiento incluidos en esta categora.(Los direccionamientos relativos al contador de programa y el direccionamiento inmediato no pertenecen a este grupo.)
28
7. Modos de direccionamiento
Estas cuatro categoras primitivas pueden combinarse para obtener las categoras que se resumen en la siguiente tabla:
Los operandos de las instrucciones vienen especificados por alguna de estas categoras, y por tanto, slo los modos de direccionamiento incluidos en cada una de ellas, son los vlidos 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 segn el tipo de operacin que realizan::
Instrucciones de movimiento de datos: MOVE, MOVEA, MOVEM, MOVEQ, EXG, LEA, PEA, SWAP, LINK y UNLNK Instrucciones de aritmtica 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 lgicas: 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 rotacin: ASL, ASR, LSL, LSR, ROL, ROR, ROXL, ROXR y SWAP Instrucciones de manipulacin 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, ..