Está en la página 1de 21

Los llamados modos de direccionamiento son las diferentes maneras de especificar en informática un operando dentro de una instrucción (lenguaje

ensamblador). Cómo se especifican e interpretan las direcciones de memoria según las instrucciones. Un modo de direccionamiento especifica la forma de calcular la dirección de memoria efectiva de un operando mediante el uso de la información contenida en registros y / o constantes, contenida dentro de una instrucción de la máquina o en otra parte.

¿Cuántos modos de direccionamiento existen?
Diferentes arquitecturas de computadores varían mucho en cuanto al número de modos de direccionamiento que ofrecen desde el hardware. Eliminar los modos de direccionamiento más complejos podría presentar una serie de beneficios, aunque podría requerir de instrucciones adicionales, e incluso de otro registro. Se ha comprobado que el diseño de CPUs segmentadas es mucho más fácil si los únicos modos de direccionamiento que proporcionan son simples. La mayoría de las máquinas RISC disponen de apenas cinco modos de direccionamiento simple, mientras que otras máquinas CISC tales como el DEC VAX tienen más de una docena de modos de direccionamiento, algunos de ellos demasiado complejos. El mainframe IBM System/360 disponía únicamente de tres modos de direccionamiento; algunos más fueron añadidos posteriormente para el System/390. Cuando existen solo unos cuantos modos, estos van codificados directamente dentro de la propia instrucción (Un ejemplo lo podemos encontrar en el IBM/390, y en la mayoría de los RISC). Sin embargo, cuando hay demasiados modos, a menudo suele reservarse un campo específico en la propia instrucción, para especificar dicho modo de direccionamiento. El DEC VAX permitía múltiples operandos en memoria en la mayoría de sus instrucciones, y reservaba los primeros bits de cada operando para indicar el modo de direccionamiento de ese operando en particular. Incluso en computadores con muchos modos de direccionamiento, algunas medidas realizadas a programas indican que los modos más simples representan cerca del 90% o más de todos los modos de direccionamiento utilizados. Dado que la mayoría de estas medidas son obtenidas a partir de códigos de alto nivel generados a partir de compiladores, nos da una idea de las limitaciones que presentan los compiladores que se utilizan.

Advertencia
Tenga en cuenta que no existe una forma generalmente aceptada de nombrar a los distintos modos de direccionamiento. En particular, los distintos autores y fabricantes de equipos pueden dar nombres diferentes para el modo de hacer frente al mismo, o los mismos nombres, a los diferentes modos de direccionamiento. Además, un modo de direccionamiento que en una determinada arquitectura se trata como un modo de direccionamiento, puede representar la funcionalidad que en otra arquitectura está cubierto por dos o más modos de direccionamiento.

El término "modo de direccionamiento" está sujeta a interpretaciones diferentes: o bien "dirección de memoria de modo de cálculo" o "modo de acceso operando". Bajo las instrucciones de la primera interpretación, que no puede leer o escribir de la memoria a la memoria (como "añadir literal de registro"), se considerará que no tienen un "modo de direccionamiento". La segunda interpretación permite para las máquinas tales como VAX, que utilizan bits de modo operando para permitir un operando literal.Sólo la primera interpretación se aplica a las instrucciones tales como "carga efectiva de dirección". Las instrucciones que aparecen a continuación son meramente representativas a fin de ilustrar los modos de direccionamiento, y no necesariamente reflejan los mnemónicos utilizado por cualquier equipo en particular.

Tipos de Direccionamiento
Implícito:
En este modo de direccionamiento no es necesario poner ninguna dirección de forma explícita, ya que en el propio código de operación se conoce la dirección del (de los) operando(s) al (a los) que se desea acceder o con el (los) que se quiere operar. Supongamos una arquitectura de pila, las operaciones aritméticas no requieren direccionamiento explícito por lo que se ponen como: - add - sub ... ¿Por qué? Porque cuando se opera con dos datos en esta arquitectura se sabe que son los dos elementos del tope de la pila: Ejemplo de una pila 1 2 3 4 5 6 <- pila top() es 1 ntop() es 2 donde top() representa el tope de la pila y ntop() el siguiente al tope de la pila y son estos argumentos con los que se opera al llamar a una orden en concreto. Otro ejemplo de este tipo de direccionamiento lo podemos encontrar en la arquitectura de acumulador (AC) donde siempre hay un parámetro implícito y este es el AC. Para finalizar y dejar este modo de direccionamiento generalizado para las arquitecturas más usuales, remarcamos que también podemos encontrarlo en la arquitectura con

El operando reside en la memoria y su dirección es dada directamente por el campo de dirección de la instrucción. la instrucción se dice que está en el modo de registro.registros de próposito general. El campo del operando contiene el operando actual que se debe utilizar en conjunto con la operación especificada en la instrucción. ejemplo:MOV A. . 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. que pone a 1 el registro c (acarreo). una instrucción de modo inmediato tiene un campo de operando en vez de un campo de dirección. En otras palabras. [editar] Inmediato: En la instrucción está incluido directamente el operando. En una instrucción de tipo ramificación el campo de dirección especifica la dirección de la rama actual. tal como los valores de datos inmediatos que son contenidos en la instrucción. la dirección efectiva es contenida en la misma instrucción.#17H [editar] Directo: El campo de operando en la instrucción contiene la dirección en memoria donde se encuentra el operando. En este modo el operando es especificado en la instrucción misma. Con este tipo de direccionamiento. por ejemplo con órdenes como setc. En este modo la dirección efectiva es igual a la parte de dirección de la instrucción. Un procesador de 16 bits suma la dirección efectiva al contenido del segmento de datos previamente desplazado en 4 bits para producir la dirección física del operando.

en la que se encuentra la dirección efectiva del operando.ejemplo:MOV A.17H [editar] Indirecto: El campo de operando contiene una dirección de memoria. .

en la que se encuentra la instrucción. La dirección efectiva en este modo se obtiene del siguiente cálculo: Dir. El control localiza la instrucción de la memoria y utiliza su parte de dirección para accesar la memoria de nuevo para leer una dirección efectiva. 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. de la parte de la instrucción + Contenido del registro del procesador . efectiva = Dir.ejemplo:MOV A. 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.R0 [editar] 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.@17H [editar] Absoluto: El campo de operando contiene una dirección en memoria. ejemplo:MOV A. [editar] De registro: Sirve para especificar operandos que están en registros.

El puntero de pila apunta a la última posición ocupada. . Este tipo de direccionamiento nos aporta flexibilidad pero por el contrario. valga la redundancia). Este direccionamiento se basa en las estructuras denominadas Pila(tipo LIFO). Consiste. si no existe C. como puntero de direccionamiento usaremos el SP.@R0 [editar] De desplazamiento: Combina el modo directo e indirecto mediante registros [editar] De pila: Se utiliza cuando el operando está en memoria y en la cabecera de la pila. es mucho más complejo que otros tipos estudiados más arriba. El desplazamiento más el valor del SP nos dará la dirección del objeto al que queramos hacer referencia. Esta técnica permite códigos reentrantes y acceder de forma fácil y rápida a posiciones cercanas de memoria.ejemplo:MOV A. al igual que el indirecto a través de registro. en calcular la EA (Effective Address) como la suma del contenido del registro base y un cierto desplazamiento (u offset) que siempre será positivo. En ocasiones. las cuales están marcados por el fondo de la pila y el puntero de pila (*SP). Así. de desplazamiento solo se trabajara con la cima de la pila. [editar] Respecto a un registro base: Este modo de direccionamiento es muy usado por los ensambladores cuando se llaman a las funciones (para acceder a los parámetros apilados en la pila.

[editar] Indexado con autoincremento/autodecremento: Es un modo de direccionamiento análogo al indexado. en este caso. Aunque en esencia son dos modos equivalentes. lo único 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. el funcionamiento es análogo al direccionamiento respecto a registro base con la salvedad de que. según el tamaño del objeto direccionado) y luego calcula la EA al igual que el direccionamiento indexado. 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. explicado anteriormente. el offset puede ser también negativo. . La EA se calcula como la suma del contenido del registro índice y una dirección de memoria: EA = RI+DM RI = registro índice DM = dirección de memoria -> RI se comporta como un offset === Indexado respecto a una base:=== Se trata de una combinación de los dos anteriores y consiste en calcular la dirección efectiva como: EA = RI+RB+DM -> Las siglas significan lo mismo que en el caso anterior [editar] Respecto al contador de programa: Consiste en dirección una posición de memoria usando como registro base al contador de programa (PC).EA = RB+offset RB = registro base offset = desplazamiento -> RB se comporta como una dirección de memoria a la que se le sumará el desplazamiento [editar] Respecto a un registro índice: Es similar al anterior.

Así. Pero. con lo que el PC quedaría como 0x0E. ¡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). si nosotros interpretamos la instrucción jr +03. para obtener las direcciones necesitamos: Indicador de página (IP): en un registro específico o de propósito general de la máquina.-> Indexado con autoposincremento: Calcula la dirección efectiva y después incrementa esta. Dirreción de la palabra(DP): en el campo CD de la instrucción. saltaremos tres posiciones posteriores a PC (también podría ser -03 y serían posiciones anteriores). . [editar] Instrucción de salto con direccionamiento absoluto: Consiste en cargar e n el PC el valor que se especifica en la orden de salto. -> Indexado con autopredecremento: Decrementa el registro índice y después calcula la dirección efectiva. [editar] Direccionamiento paginado y direccionamiento segmentado y Paginado: La memoria se encuentra actualmente dividida en páginas(bloques de igual longitud). pongamos un ejemplo: Supongamos que PC vale = 0x0A. p. concatenando ambas partes obtenemos la dirección completa. por lo que quedaría: PC = 0x0B ---> nuevo PC = 0x0B+0x03 = 0x0E. En este caso.e: jmp 0xAB ----> Carga 0xAB en PC [editar] Instrucción de salto con direccionamiento relativo: Es parecida a la especificada anteriormente la diferencia es que el salto es relativo al PC. -> Indexado con autoposdecremento: Calcula la dirección efectica y después decrementa esta.

Ambos modos de direccionamiento facilitan la multiprogramación gracias a la técnica de la memoria virtual que permite que un proceso no tenga que estar cargado íntegramente en memoria. Esta lista no es completa. puesto que hubo otros muchos modos de direccionamiento más. y Indirecto de multinivel de memoria Si la longitd de palabra era mayor que la dirección. la palabra era referenciada por este direccionamiento indirecto de multinivel. pero en este caso los tamaños son variables. la memoria se divide en porciones.Segmentado: En este caso. Usar este tipo de direccionamiento tiene como ventajas que se puede definir segmentos de tamaño arbitrario. Por otro lado. algunos más interesantes y peculiares. [editar] Algunos modos de direccionamiento obsoletos Estos modos fueron usados durante 1950-1980 y ya no están disponibles en los computadores modernos. como en el tipo anterior. Así. Es necesario tener cuidado para asegurar que una cadena de . el fraccionamiento de memoria es uno de sus problemas. si no que se cargan distintas páginas del mismo (o segmentos). Si se intenta cargar una página o segmento que no se encuentra en la memoria principal se produce una excepción de falta de página o segmento y se accede a la memoria para cargar la información requerida en la memoria principal. esta misma ventaja. para acceder a ellos se tiene una tabla de segmentos que contiene la dirección del comienzo y dle final de cada segmento en memoria. que podía tener una "bandera" para indicar un ciclo indirecto de memoria.

provocó una gran utilización del área de memoria de la página cero por el sistema operativo y por los usuarios de programas. o salta a través de registros. Almacenando datos en esta "region" los programas podían ser más pequeños y más rápidos. . Esto limitó su uso desde que el espacio libre fue limitado. Los 256 bytes iniciales de memoria podían ser accedidos usando un byte o una dirección de memoria indexada. cambiar un JUMP 0 en un JUMP 20. Direccionamiento [editar] Direccionamiento relativo absoluto vs En esta sección vamos a resaltar las diferencias de estos dos técnicas de direccionamiento y aclarar las ventajas y desventajas que cada una de ellas conlleva. el Elliott 803. Como resultado. las instrucciones necesitaban incluir una localización de dos bytes en memoria. creando así el efecto de un salto indexado. En su lugar. Como resultado. no se admiten en el conjunto de instrucciones. y Indirecto de memoria con autoincremento En algunos minicomputadores había normalmente 16 localizaciones especiales de memoria. Esto hacía muy fácil acceder a memoria en bucles sin usar ningún registro. y no tenía ningún registro de índice. se llegaría a un bucle infinito mientras trata de encontrar la dirección. sin embargo. Esto reducía el tiempo de ejecución de las instrucciones un ciclo de reloj. Por lo tanto. y "Página cero La familia Motorola 6800 y la MOS Technology 6502 fueron unas familias de pobres microprocesadores CISC. En muchos sistemas. El DEC PDP-10 con 18 bits de direccionamiento y palabras de 36 bits permitían este modo de direccionamiento con la posibilidad de usar un registro principal para cada fase. es decir. puede ser instruido para agregar el contenido de la palabra de la memoria actual a la siguiente instrucción. Cuando se accedía a memoria. saltos indirectos. Los diseñadores de estos procesadores incluían un "remedio" llamado direccionamiento "página cero". y el Apollo Guidance Computer sólo se utiliza direccionamiento absoluto. la "página cero" fue usada de forma parecía a un archivo de registro. Las instrucciones aritméticas y lógicas estaban casi todas hechas en contra de los valores de memoria.direcciones indirectas no se refiera a ella misma . no es auto -modificar el código. Adición de un valor pequeño a la siguiente instrucción a ejecutar podría. por ejemplo. la dirección era automáticamente incrementada y decrementada después de su uso. Tenga en cuenta que la instrucción se modifica sobre la marcha y se mantiene sin cambios en la memoria. y ndice Siguiente Instrucción El Elliott 503. si lo hiciera.

a cualquier dirección de memoria. muchas de las arquitecturas CPU usan algún otro modo de direccionamiento para la "toma" de rama. que la dirección hace referencia directamente a dicha posición sin tener que realizar cálculos adicionales para la EA. los diseñadores de la CPU a menudo añaden características que deliberadamente sacrifican el rendimiento por un lado. se requiere otro dato para el cálculo de la dirección efectiva. y la ejecución secuencial para la "no toma" de rama. al ejecutar un cierto programa se cumple la proximidad espacial y temporal. inmediatamente ejecuta la instrución siguiente. y por otro las instrucciones de la rama de instrucciones a fin de que estas instrucciones secuenciales corran más rápido. esto es. El problema viene cuando queremos referenciar un dato al que no podemos acceder de forma relativa (p. Otras de las ventajas del direccionamiento relativo es que permite los códigos reentrantes y cambiar ciertas direcciones sin tener que volver a compilar el programa. por lo general. Direccionamiento relativo: Cuando para direccionar una posición de memoria se hace referencia a otra sobre la cual se especifica un incremento o decremento. despues de ejecutar una instrucción secuencial. y Generalmente se usan los direccionamientos relativos ya que. Las ramas condicionales cargan en el PC varios resultados posibles. La mayoría de instrucciones en la mayoría de las arquitecturas de CPU son instrucciones secuenciales. Es también útil porque nunca se sabe en qué posición de memoria se cargará un determinado programa. lo que implica que datos que ya han sido usados o que se encuentran en posiciones cercanas al PC tendrán una alta probabilidad de ser referenciados próximamente. Por último reduce el número de bits para especificar las direcciones y se facilita la referencia a datos del programa a través de los registros base. en este caso se requiere el direccionamiento absoluto que sí es capaz de acceder.y Direccionamiento absoluto: Consiste en direccionar una posición de memoria de forma directa. Modos de direccionamiento secuencial Ejecución secuencial +------+ | nop | ejecuta la siguiente instrucción +------+ (Dirección Efectiva PC = dirección de la instrucción siguiente) El CPU. La ejecución secuencial no esta considerada un modo de direccionamiento en algunos computadores. Debido a que la mayoría de las instrucciones son de tipo secuencial. es decir. .e porque los registros base no puedan alcanzar dicha posición aun con el incremento más grande que podamos darle).

un "salto" no necesita instrucciones para vaciar la tubería de la instrucción. En algunos procesadores. dando resultados finales iguales. referente a algunos bits previamente establecidos en el registro del estado. . Una instrucción tal como "comparar" see utiliza para establecer un código de condición. algunas CPU's tienen versiones de este modo de direccionamiento que sólo se refieren a un registro ( "saltar si REG1==0") o no hay registros. usando una variedad de alternativas para el contador de programa. de manera implícita. [editar] Ejecución condicional Algunas arquitecturas de ordenador (por ejemplo. a pesar de que no es exactamente lo que sucede internamente.Muchas características de las CPU's modernas mantienen la ilusión de que cada instrucción termina antes de que la siguiente comienze. Al igual que en PC direccionamiento relativo. Otras arquitecturas de computación van mucho más allá. la máquina SECD. Otras CPU's tienen una versión que selecciona un byte específico de prueba ("saltar si el bit 7 de reg12 es 0"). A diferencia de todas las ramas condicinales. CPU'S que no utilizan la ejecución secuencial Las CPU's que no utilizan la ejecución secuencial con un contador de programa son extremadamente raras. y las instrucciones posteriores incluyen una prueba de que el código de condición para ver si se cumplen o se ignoran. en cada instrucción siempre se especifica la dirección de la instrucción siguiente. y el RTX 32P. Las CPU's incluyen algunas cajas de ritmos de la memoria. ARM) tienen instrucciones condicionales que en algunos casos puede obviar la nacesidad de saltos condicionales y evitar el lavado de la tubería de la instrucción. pero no tiene un programa completo mostrado. trantando de evitar el cuello de botella de von Neumann. Esta CPU tiene un puntero de instrucción que sostiene la dirección especificada. a pesar de que puede necesitarlas para hacer que la siguiente instrucción sea ignorada. [editar] Salto +------+-----+-----+ |skipEQ| reg1| reg2| Salta a la siguiente instrucción si reg1=reg2 +------+-----+-----+ (EA PC = dirección de la instrucción siguiente + 1) Saltar abordar puede ser considerado como un tipo especial de modo de direccionamiento relativo al PC con un fijo "una" compensación.

[editar] Base mas desplazamiento y variaciones Muchas veces nos referimos a él como "base más desplazamiento" +------+-----+-----+---------------. para lo que un registro base es suficiente. la dirección efectiva es sólo el valor en el registro de base. Sin embargo. Ejemplo 1: Dentro de una subrutina. la mayoría de los elementos de datos que un programa quiere acceder estan bastante cerca uno del otro. Podría ser peor ya que: los sevidores IBM System/360 sólo tienen un signo de 12 bits de desplazamiento. si el desplazamiento es de 16 bits). En muchas máquinas RISC. Este "modo de direccionamiento" no tiene una dirección efectiva y no se considera como un modo de dirección en algunas computadoras. Este modo de direccionamiento está estrechamente relacionado con el modo de direccionamiento absoluto. En este ejemplo. que rara vez superan 64 KB. S el registro 0 se i utiliza como el registro de base. el registro 0 se fija en el valor cero. todos los operandos están en registros. y el resultado se coloca en un registro. Si esta rutina es un método de clase en un lenguaje orientado . el principio de localización se aplica en un corto espacio de tiempo. sólo una pequeña parte de la memoria se puede acceder (64 kilobytes. El desplazamiento de 16 bits puede parecer muy pequeño en relación con el tamaño de la memoria de los equipos actuales (esta es la razón por la 80386 se expandió a 32 bits). esto se convierte en un ejemplo de direccionamiento absoluto. esto se convierte en un ejemplo de registro indirecto frente.+ | load | reg | base| offset | reg := RAM[base + offset] +------+-----+-----+---------------. Si el desplazamiento es cero.+ (La dirección efectiva = desplazamiento + contenidos de la base especificada del registro) El desplazamiento suele ser un valor con signo de 16 bits (aunque la 80386 se expandió a 32 bits). Sin embargo. un programador estará principalmente interesados en los parámetros y las variables locales.Modos simples de direccionamiento de datos Registro +------+-----+-----+-----+ | mul | reg1| reg2| reg3| +------+-----+-----+-----+ reg1 := reg2 * reg3.

cuando la pila es Accesada. 1. 2. Aquí el operando fuente está en modo inmediato y el destino en modo registro. Cuando la memoria es accesada. CX MOV CL. MOV DX. (modo E/S) 4. El apuntador puede ser el registro base BX o el apuntador base BP. La dirección efectiva (EA) de 16 bits se toma directamente del campo de desplazamiento de la instrucción. Los segmentos usados son DS y SS. Ej. . 03H. p.2 Direccionamiento inmediato. por otra parte. DIRECCIONAMIENTO ACCESANDO DATOS EN MEMORIA 2. entonces se necesita un segundo registro base con punteros en los atributos del objeto actual. el registro índice puede ser el Indice Fuente (SI) o el Indice Destino (DI). Esta EA o desplazamiento es la distancia de la localidad de memoria al valor actual en el segmento de datos (DS) en el cual el dato está colocado. Direccionamiento relativo 5.ej. Direccionamiento accesando datos en memoria (modo memoria) 3. MOV CL. 2. MOV CX. Direccionamientos accesando dato inmediato y registro de datos (modos inmediato y de registro). START puede definirse como una localidad de memoria usando las pseudoinstrucciones DB o DW. La dirección efectiva EA está especificada en un registro apuntador o un registro índice.2 Direccionamiento de registro indirecto. Un dato de 8 o 16 bits se especifica como parte de la instrucción. la dirección física de 20 bits es calculada de BX y DS. DIRECCIONAMIENTO ACCESANDO DATO Y REGISTRO INMEDIATO 1. Ej.1 Direccionamiento de registro.BX. Los registros deben ser del mismo tamaño. DL.1 Direccionamiento directo. Direccionamiento implícito.a objetos. MOV (DI).3 Direccionamiento base EA se obtiene sumando un desplazamiento (8 bits con signo o 16 bits sin signo) a los contenidos de BX o BP. 2. Direccionamiento accesando puertos E/S. la dirección es calculada de BP y SS. MODOS DE DIRECCIONAMIENTO Tiene 12 modos de direccionamiento básicos. ej. El desplazamiento se coloca en la localidad siguiente al código de operación. START. 2. Estos pueden clasificarse en 5 grupos: 1. 1. Especifica el operando fuente y el operando destino.

Ej. CLC. el número de puerto se toma de DX. lo cual permite accesar puertos numerados del 0 al 255. En el modo directo. 3.5 Direccionamento base indexado.Ej. OUT 05H. START (BX). En el modo indirecto.START (SI). MOV ALPHA (SI)(BX). Ej. DIRECCIONAMIENTO IMPLICITO. un registro índice (DI o SI). Las transferencias E/S de 8 y 16 bits deben hacerse vía AX y AL. 4. Si C=0. La cadena de instrucciones automáticamente asume que SI apunta al primer byte o palabra del operando destino. JNC START.6 Direccionamiento (cadena?) Este modo usa registros índice.CL. DIRECCIONAMIENTO RELATIVO. Este direccionamiento proporciona una forma conveniente para direccionar un arreglo localizado en la pila.4 Direccionamiento indexado. Ej. EA se calcula sumando un desplazamiento (8 o 16 bits) a los contenidos de SI o DI. Ej. El segmento del operando destino debe ser ES y no puede ser encimado. MOV AL. El segmento del operando fuente es DS y puede ser encimado. MOVS BYTE. MOV BH. 5. Las instrucciones que usan esta modo no tienen operandos. el número de puerto es el operando inmediato de 8 bits. EA se calcula sumando un registro base (BX o BP). 2. 2. 2. el operando fuente está en modo base. DIRECCIONAMIENTO ACCESANDO PUERTOS (E/S) Hay dos tipos de direccionamiento usando puertos: directo e indirecto. . entonces el PC se carga con PC+el valor de START. Ej. Los contenidos de SI y DI son incrementados automáticamente (poniendo a 0 DF mediante la instrucción CLD) o decrementados (poniendo a 1 DF mediante la instrucción STD) para apuntar al siguiente byte o palabra. y un desplazamiento (8 o 16 bits). y la EA se obtiene sumando los valores de START y BX. Ej. En este modo el operando se especifica como un desplazamiento de 8 bits con signo. permitiendo así 64K puertos de 8 bits o 32K puertos de 16 bits. relativo al PC. respectivamente.AL.

. esta opera con un valor constante.. 1) DIRECCIONAMIENTO INMEDIATO a) El operando está presente en la propia instrucción.Ahorro de espacio 2. b) dos tipos: 2.MODOS DE DIRECCIONAMIENTO -Un modo de direccionamiento permite determinar un operando . 2) DIRECCIONAMIENTO DIRECTO a) La instrucción contiene la dirección real del operando. b) Rango de posiciones limitado por CO. Estos operandos pueden residir en diversas partes: 1. -VENTAJA: No referencia a memoria. q se halla en una posición de mem principal. b) El direccionamiento de una sola palabra: MAS RAPIDO >> el operando se encuentra ya en IR al fin de la fase de búsqueda. -DESVENTAJA: Operandos limitados por la instr.-Estructuras de datos. c) Formato de 2 palabras >> MAYOR CAPACIDAD DE DIRECCIONAMIENTO >> lectura adicional. por lo tanto. 2 palabras: lectura de mem adicional.1) Direccionamiento absoluto: a) La instrucción contiene la dirección de memoria donde se encuentra el objeto. .-Memoria principal 3. o la ubicación de un operando en una instrucción.Código reubicable : se puede almacenar el programa en diversas zonas de memoria sin q afecte a la ejecución del código 3.-Registros internos de la CPU -Los programas utilizan varios MD motivados por: 1.-La propia instrucción 2.

La instrucción indica de q registro se trata. -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.. b) Para direccionar instr cercanas a la instr en curso. 3. 3.Lectura MAS RAPIDA q en memoria >> ninguna lectura adicional.. b) la instr contiene la identificación del registro y el desplazamiento c) Conveniente para zonas de datos (como listas).Solo necesita CD pequeño.3) Direccionamiento relativo a pila (LIFO) . -VENTAJA: Solo una referencia a memoria sin cálculos previos.>> en el CD emplea un nº de bits pequeño c) Varios tipos: 3. b) Registros limitados. c) CARACTERISTICAS: 1. 2. -DESVENTAJA: Espacio de direcciones reducido.. para bucles. b) Permite acceder a un conjunto de direcciones de memoria a partir de una considerada como referencia.Rango operando = Rango registro >> LIMITA espacio de direcciones.2) Direccionamiento mediante registro a) Operando almacenado en un registro de la CPU.1) Direccionamiento relativo al registro contador del programa (PC) a) puntero : PC. almacena la dirección de la siguiente instr. 3...2) Direccionamiento relativo al registro base a) puntero: REGISTRO BASE.2. -El puntero suele estar en un registro. 3) DIRECCIONAMIENTO RELATIVO A REGISTRO a)La instrucción NO contiene la dirección del operando >> debe ser calculada.

. vectores. b) Similar al relativo a registro base.-dirección = REG INDICE +DESPL. b) DESPL.Permite realizar incrementos y decrementos de una cierta magnitud >> AUTO-INDEXADO *PREAUTOINCREMENTO y PREAUTODECREMENTO: 1.).-el reg indice se incrementa (o decrementa) 2. -VENTAJA : flexibilidad. *POSTAUTOINCREMENTO : 1.. -DESVENTAJA: complejidad...recorrer estructuras de datos (tablas. >> solo se trabaja con la cima de la pila.el reg indice se incrementa -VENTAJA : flexibilidad. ) DIRECCIONAMIENTO INDIRECTO a) El CD referencia la dirección de una palabra. -DESVENTAJA: complejidad. apunta a la dirección de mem donde se encuentra la cima de la pila. pero el valor del reg indice se modifica con frecuencia en la ejecución del programa.a) puntero : SP (stack pointer). q a su vez contiene la dirección completa del operando. b) Para aplicaciones q utilizan datos situados en posiciones distantes en memoria .se obtiene la dirección = REG INDICE + DESPL.. 2. d) Permite instrucciones muy compactas.. 4) DIRECCIONAMIENTO INDEXADO a) Un registro índice contiene la dirección de referencia y actúa de puntero. + valor SP = DIRECCIÓN DEL OBJETO c) Si no existe C. de despl. c) Para: -operaciones iterativas .

hace referencia a un registro q contiene la dirección completa del operando.Direccionamiento implicito: la instruccion no se refiere explicitamente al operando sobre el que trabaja. No hay que dar direccion. normalmente es la que halla en el contador. A.Direccionamiento relativo. El campo de direccion contiene un desplazamiento con relacion a un punto de referencia (direccion base). procesandose mas rapido. Ej: LD (F805H). 2) se puede combinar con los direccionamientos relativos -DESVENTAJA: referencia extra a memoria c) Variante : Direccionamiento indirecto con registro -En el CD. La direccion base.Direccionamiento absoluto. para N bits >> 2N espacio de direcc. 3. porque va implicito...net/gbermeo/modos-de-direccionamiento-presentation MODOS DE DIRECCIONAMIENTO Son tecnicas que nos permiten averiguar la direccion fisica de los datos. 2. Ocupan menos.slideshare. Ej: CPL=> calcula el C-1 del acumulador.-VENTAJAS: 1) espacio de dirección grande.Direccionamiento inmediato. El campo de direccion contiene la direccion fisica del dato. El campo de direccion contiene ya los datos.. 1. 4. -Emplea una referencia a memoria menos http://www. 1BH (Suma al acumulador el valor 1B en . A (Carga el contenido del acumulador en F805).. Ej: ADD hexadecimal).

*45 Acumulador (antes): 357 Posicion de memoria 45 => 79 Posicion de memoria 79 => 210 Acumulador (despues): 567 7..Direccionamiento indirecto. El campo de direccion contiene una direccion de referencia y la direccion real se calcula sumando a la de referencia el contenido de un registro especial. Ej: ADD A. 37 (Le sumamos 37 al contador de programas. y NC provoca que no haya acarreo).Direccionamiento indirecto indexado (combinacion): Ej: LDA *@40 ..Direccionamiento indexado indirecto (combinacion): Ej: Posicion 40 60 70 80 RI Contenido 50 80 185 323 20 LDA @*40 D. JR es instruccion de salto. llamado registro indice.. indexado: 40+20=60 D. 5.. @60 Reg. Ej: ADD A. indirecto: posicion 60 => 80 posicion 80 => 323 Carga 323 en el acumulador. indice:4 Acumulador (antes): 8 Posicion de memoria 60+4=64 =>13 Acumulador (despues): 21 6.Ej: JR NC . El campo de direccion contiene una direccion en la que esta la direccion de los datos. 8.Direccionamiento indexado.

Indireccion: posicion 40 => 50 Direccion indexada: 50 + 20 = 70 .en la posicion 70 => 185 (se cargaria en el acumulador) .