domingo, 14 de junio de 2015

Tipos de Modos de Direccionamiento


Direccionamiento Implícito.
No necesita recibir la dirección del operando, esta se encuentra implícita en la operación.

Ej.:
MUL BX

Ventaja:
Acceso rápido.

Desventaja:
Conocer perfectamente la operación.

Direccionamiento Inmediato.
Recibe el operando y no la dirección de este.

Ej.:
MOV AX, 4

Ventaja: no requiere memoria extra para traer el operando.

Desventaja: Solo puede utilizar constantes.

Direccionamiento Directo.
Recibe la dirección en memoria del operando.

Ej.:
MOV AX, [10]

Ventaja: Acceso rápido para variables globales.

Desventajas: La instrucción siempre accesará la misma localidad de memoria.
        Solo puede cambiar el valor del operando pero no su dirección.

Direccionamiento Indirecto.
Recibe la dirección de la palabra en memoria  (apuntador) que contiene la dirección del operando.

Ej.:
MOV AX, [[10]]

Ventaja: La dirección en memoria puede apuntar a distintas localidades de memoria.

Desventaja: La ejecución de la instrucción requiere de dos referencias a memoria para traer el operando (una para obtener su dirección y la otra para obtener su valor).

Direccionamiento de Registro (directo).
Similar al direccionamiento directo.
Recibe un registro en lugar de una dirección en memoria.

Ej.:
MOV AX, BX

Ventaja: No necesita referencias a memoria.

Desventaja: Número limitado de registros en el CPU -> usar este direccionamiento para operandos muy utilizados.

Este es el modo de direccionamiento más común.

Direccionamiento de Registro Indirecto.
Similar al direccionamiento indirecto.
Recibe un registro que contiene la dirección (apuntador) en memoria del operando.

Ej.:
MOV AX, [BX]

Ventaja: La dirección en el registro puede apuntar a distintas localidades de memoria (misma indirecta).
Utiliza una referencia menos a memoria en comparación con el direccionamiento indirecto.

Utilizado para apuntadores de uso frecuente.

Direccionamiento de Desplazamiento.
Combina los modos de direccionamiento directo y de registro indirecto.

Se requiere que la dirección del operando sea calculada en base a una dirección fija más otra dirección de desplazamiento.
                               Dirección = Fija + Desplazamiento.

Tanto la dirección fija como la de desplazamiento pueden ser referenciadas de manera directa o indirecta.

La dirección fija puede estar ímplicita en la instrucción.
Relativo.
Indexado.
Base.

·         Relativo.
La dirección fija es el registro PC y se encuentra implícita en la instrucción.
Ej.:
MOVPC AX, BX (BX = 5, PC = 10)

·         Indexado.
La dirección fija referencia a la memoria.
El desplazamiento contiene un número positivo para calcular la dirección del operando.
Ventaja: Eficiente para operaciones ciclicas.
Desventaja: dos accesos a memoria.
Dos tipos principales:
-       Preindexado.
-       Postindexado.
Preindexado (indexamiento previo)
La dirección fija es sumada al desplazamiento.
El resultado es usado como una dirección en memoria donde se encuentra la dirección del operando.
Ej.:
MOV AX, [BX,CX]

Postindexado (indexamiento posterior)
La dirección fija contiene la dirección en memoria que a su vez contiene la dirección  a ser utilizada para obtener el operando.
A la dirección obtenida a partir de la dirección fija se le suma el desplazamiento para obtener la dirección del operando.
Ej.:
MOV AX, [BX]CX
________________________________________________________________________________
Direccionamiento Inmediato
En la instrucción está incluido directamente el operando.
En este modo el operando es especificado en la instrucción misma. En otras palabras, una instrucción de modo inmediato tiene un campo de operando en vez de un campo de dirección. El campo del operando contiene el operando actual que se debe utilizar en conjunto con la operación especificada en la instrucción. Las instrucciones de modo inmediato son útiles para inicializar los registros en un valor constante.
Cuando el campo de dirección especifica un registro del procesador, la instrucción se dice que está en el modo de registro.


ejemplo:MOV A,#17H
Direccionamiento Directo
El campo de operando en la instrucción contiene la dirección en memoria donde se encuentra el operando.
En este modo la dirección efectiva es igual a la parte de dirección de la instrucción. El operando reside en la memoria y su dirección es dada directamente por el campo de dirección de la instrucción. En una instrucción de tipo ramificación el campo de dirección especifica la dirección de la rama actual.


Ejemplo: MOV A,17H
Direccionamiento Indirecto
El campo de operando contiene una dirección de memoria, en la que se encuentra la dirección efectiva del operando.


Ejemplo: MOV A,@17H
Direccionamiento Absoluto
El campo de operando contiene una dirección en memoria, en la que se encuentra la instrucción. Y no se cancela.
Direccionamiento  De registro
Sirve para especificar operandos que están en registros. En este modo, los operandos están en registros que residen dentro de la CPU


Indirecto mediante registros
El campo de operando de la instrucción contiene un identificador de registro en el que se encuentra la dirección efectiva del operando.
En este modo el campo de la dirección de la instrucción da la dirección en donde la dirección efectiva se almacena en la memoria. El control localiza la instrucción de la memoria y utiliza su parte de dirección para acceder a la memoria de nuevo para leer una dirección efectiva. Unos pocos modos de direccionamiento requieren que el campo de dirección de la instrucción sea sumado al control de un registro especificado en el procesador. La dirección efectiva en este modo se obtiene del siguiente cálculo:
Dir. efectiva = Dir. de la parte de la instrucción + Contenido del registro del procesador...


De desplazamiento
Combina el modo directo e indirecto mediante registros
De pila
Se utiliza cuando el operando está en memoria y en la cabecera de la pila.
Este direccionamiento se basa en las estructuras denominadas Pila(tipo LIFO), las cuales están marcados por el fondo de la pila y el puntero de pila (*SP), El puntero de pila apunta a la última posición ocupada. Así, como puntero de direccionamiento usaremos el SP. El desplazamiento más el valor del SP nos dará la dirección del objeto al que queramos hacer referencia. En ocasiones, si no existe C. de desplazamiento solo se trabajara con la cima de la pila. Este tipo de direccionamiento nos aporta flexibilidad pero por el contrario, es mucho más complejo que otros tipos estudiados más arriba.
Relativo a un registro base
Consiste, al igual que el indirecto a través de registro, en calcular la dirección efectiva (EA, effective address) como la suma del contenido del registro base y un cierto desplazamiento (offset) que siempre será positivo. Esta técnica permite códigos reentrantes y acceder de forma fácil y rápida a posiciones cercanas de memoria. Este modo de direccionamiento es muy usado por los ensambladores cuando se llaman a las funciones (para acceder a los parámetros almacenados en la pila).
Relativo a un registro índice
Es similar al anterior, excepto que es el contenido del registro índice el que indica el desplazamiento que se produce a partir de una dirección de memoria que se pasa también como argumento a la orden que utiliza este modo de direccionamiento. Aunque en esencia son dos modos equivalentes. La EA se calcula como la suma del contenido del registro índice y una dirección de memoria:
Indexado respecto a una base
Se trata de una combinación de los dos anteriores y consiste en calcular la dirección efectiva como:
Relativo al contador de programa
Consiste en dirección una posición de memoria usando como registro base al contador de programa (PC), el funcionamiento es análogo al direccionamiento respecto a registro base con la salvedad de que, en este caso, el offset puede ser también negativo.
Indexado con autoincremento/autodecremento
Es un modo de direccionamiento análogo al indexado, explicado anteriormente.
La única diferencia es que permite un incremento o decremento de la dirección final o el registro índice según los siguientes casos:
-> Indexado con autopreincremento: Incrementa el registro índice primero (se incrementa un valor, según el tamaño del objeto direccionado) y luego calcula la EA al igual que el direccionamiento indexado.
-> Indexado con autoposincremento: Calcula la dirección efectiva y después incrementa esta.
-> Indexado con autopredecremento: Decrementa el registro índice y después calcula la dirección efectiva.
-> Indexado con autoposdecremento: Calcula la dirección efectica y después decrementa esta.
Instrucción de salto con direccionamiento absoluto
Consiste en cargar en el PC el valor que se especifica, p.e:
jmp 0xAB ----> Carga 0xAB en PC
Instrucción de salto con direccionamiento relativo
Es parecida a la especificada anteriormente la diferencia es que el salto es relativo al PC, pongamos un ejemplo:
Supongamos que PC vale = 0x0A, si nosotros interpretamos la instrucción jr +03, saltaremos tres posiciones posteriores a PC (también podría ser -03 y serían posiciones anteriores). Pero, ¡cuidado! si esa instrucción estaba en la posición 0x0A la dirección de PC a incrementar será la inmediatamente posterior (ya que PC se incrementa automáticamente después de leer la instrucción), por lo que quedaría:
PC = 0x0B ---> nuevo PC = 0x0B+0x03 = 0x0E, con lo que el PC quedaría como 0x0E.

http://es.wikipedia.org/wiki/Modos_de_direccionamiento
________________________________________________________________________________

1) DIRECCIONAMIENTO INMEDIATO

a) El operando está presente en la propia instrucción, por lo tanto, esta opera con un valor constante.

b) El direccionamiento de una sola palabra: MAS RAPIDO >> el operando se encuentra ya en IR al fin de la fase de búsqueda. 2 palabras: lectura de mem adicional.

-VENTAJA: No referencia a memoria.

-DESVENTAJA: Operandos limitados por la instr.

2) DIRECCIONAMIENTO DIRECTO

a) La instrucción contiene la dirección real del operando.

b) dos tipos:

2.1) Direccionamiento absoluto:

a) La instrucción contiene la dirección de memoria donde se encuentra el objeto, q se halla en una posición de mem principal.

b) Rango de posiciones limitado por CO.

c) Formato de 2 palabras >> MAYOR CAPACIDAD DE DIRECCIONAMIENTO >> lectura adicional.

2.2) Direccionamiento mediante registro

a) Operando almacenado en un registro de la CPU. La instrucción indica de q registro se trata.

b) Registros limitados.

c) CARACTERISTICAS:

1.- Lectura MAS RAPIDA q en memoria >> ninguna lectura adicional.

2.- Solo necesita CD pequeño.

3.- Rango operando = Rango registro >> LIMITA espacio de direcciones.

-VENTAJA: Solo una referencia a memoria sin cálculos previos.

-DESVENTAJA: Espacio de direcciones reducido.

3) DIRECCIONAMIENTO RELATIVO A REGISTRO

a)La instrucción NO contiene la dirección del operando >> debe ser calculada.

-La instr contiene un DESPLAZAMIENTO q hay q añadir a la dirección marcada por un puntero para obtener la dirección final del operando>> RETRASO ADICIONAL.

-El puntero suele estar en un registro.

b) Permite acceder a un conjunto de direcciones de memoria a partir de una considerada como referencia.>> en el CD emplea un nº de bits pequeño

c) Varios tipos:

3.1) Direccionamiento relativo al registro contador del programa (PC)

a) puntero : PC; almacena la dirección de la siguiente instr.

b) Para direccionar instr cercanas a la instr en curso, para bucles...

3.2) Direccionamiento relativo al registro base

a) puntero: REGISTRO BASE.

b) la instr contiene la identificación del registro y el desplazamiento

c) Conveniente para zonas de datos (como listas).

3.3) Direccionamiento relativo a pila (LIFO)

a) puntero : SP (stack pointer); apunta a la dirección de mem donde se encuentra la cima de la pila.

b) DESPL. + valor SP = DIRECCIÓN DEL OBJETO

c) Si no existe C. de despl. >> solo se trabaja con la cima de la pila.

d) Permite instrucciones muy compactas.

-VENTAJA : flexibilidad.

-DESVENTAJA: complejidad.


4) DIRECCIONAMIENTO INDEXADO

a) Un registro índice contiene la dirección de referencia y actúa de puntero.

b) Similar al relativo a registro base; pero el valor del reg indice se modifica con frecuencia en la ejecución del programa.

c) Para:

-operaciones iterativas

- recorrer estructuras de datos (tablas, vectores...).Permite realizar incrementos y decrementos de una cierta magnitud >> AUTO-INDEXADO

*PREAUTOINCREMENTO y PREAUTODECREMENTO:

1.-el reg indice se incrementa (o decrementa)

2.- se obtiene la dirección = REG INDICE + DESPL..

*POSTAUTOINCREMENTO :

1.-dirección = REG INDICE +DESPL..

2.- el reg indice se incrementa

-VENTAJA : flexibilidad.

-DESVENTAJA: complejidad.

5) DIRECCIONAMIENTO INDIRECTO

a) El CD referencia la dirección de una palabra, q a su vez contiene la dirección completa del operando.

b) Para aplicaciones q utilizan datos situados en posiciones distantes en memoria

-VENTAJAS: 1) espacio de dirección grande; para N bits >> 2N espacio de direcc.

2) se puede combinar con los direccionamientos relativos

-DESVENTAJA: referencia extra a memoria

c) Variante : Direccionamiento indirecto con registro

-En el CD, hace referencia a un registro q contiene la dirección completa del operando.

-Emplea una referencia a memoria menos

No hay comentarios:

Publicar un comentario