Modos de direccionamiento : el término modos de direccionamiento se refiere a la forma en que se especifica el operando de una instrucción. El modo de direccionamiento especifica una regla para interpretar o modificar el campo de dirección de la instrucción antes de que se ejecute el operando.
Los modos de direccionamiento para las instrucciones 8086 se dividen en dos categorías:
1) Modos de direccionamiento para datos
2) Modos de direccionamiento para sucursal
Los modos de direccionamiento de memoria del 8086 brindan acceso flexible a la memoria, lo que le permite acceder fácilmente a variables, arrays, registros, punteros y otros tipos de datos complejos. La clave para una buena programación en lenguaje ensamblador es el uso adecuado de los modos de direccionamiento de memoria.
Una instrucción de programa en lenguaje ensamblador consta de dos partes
La dirección de memoria de un operando consta de dos componentes:
TÉRMINOS IMPORTANTES
- Dirección inicial del segmento de memoria.
- Dirección efectiva o Desplazamiento : Un desplazamiento se determina sumando cualquier combinación de tres elementos de dirección: desplazamiento, base e índice.
- Desplazamiento: Es un valor inmediato de 8 o 16 bits dado en la instrucción.
- Base : Contenido del registro base, BX o BP.
- Índice : Contenido del registro de índice SI o DI.
De acuerdo con las diferentes formas de especificar un operando por parte del microprocesador 8086, el 8086 utiliza diferentes modos de direccionamiento.
Los modos de direccionamiento utilizados por el microprocesador 8086 se analizan a continuación:
- Modo implícito: : En el direccionamiento implícito, el operando se especifica en la instrucción misma. En este modo, los datos tienen una longitud de 8 bits o 16 bits y los datos son parte de la instrucción. Las instrucciones de dirección cero están diseñadas con un modo de direccionamiento implícito.
Example: CLC (used to reset Carry flag to 0)
- Modo de direccionamiento inmediato (símbolo #): En este modo, los datos están presentes en el campo de dirección de la instrucción. Diseñado como un formato de instrucción de dirección.
Nota: La limitación en el modo inmediato es que el rango de constantes está restringido por el tamaño del campo de dirección.
Example: MOV AL, 35H (move the data 35H into AL register)
- Modo de registro: en el direccionamiento de registros, el operando se coloca en uno de los registros de propósito general de 8 o 16 bits. Los datos están en el registro especificado por la instrucción.
Aquí se requiere una referencia de registro para acceder a los datos.
Example: MOV AX,CX (move the contents of CX register to AX register)
- Modo Indirecto de Registro : En este direccionamiento el desplazamiento del operando se coloca en cualquiera de los registros BX,BP,SI,DI como se especifica en la instrucción. La dirección efectiva de los datos está en el registro base o en un registro de índice especificado por la instrucción.
Aquí se requiere la referencia de dos registros para acceder a los datos. Las CPU 8086 le permiten acceder a la memoria indirectamente a través de un registro utilizando los modos de direccionamiento indirecto de registro.
MOV AX, [BX](move the contents of memory location s addressed by the register BX to the register AX)
- Auto indexado (modo de incremento) : la dirección efectiva del operando es el contenido de un registro especificado en la instrucción. Después de acceder al operando, el contenido de este registro se incrementa automáticamente para apuntar a la siguiente ubicación de memoria consecutiva. (R1)+ .
Aquí se requiere una referencia de registro, una referencia de memoria y una operación ALU para acceder a los datos.
Ejemplo:Add R1, (R2)+ // OR R1 = R1 +M[R2] R2 = R2 + d
Útil para recorrer arrays en un bucle. R2 – inicio de la array d – tamaño de un elemento
- Auto indexado (modo decremento) : la dirección efectiva del operando es el contenido de un registro especificado en la instrucción. Antes de acceder al operando, el contenido de este registro se decrementa automáticamente para apuntar a la ubicación de memoria consecutiva anterior. – (R1)
Aquí se requiere una referencia de registro, una referencia de memoria y una operación ALU para acceder a los datos.
Ejemplo:
Add R1,-(R2) //OR R2 = R2-d R1 = R1 + M[R2]
El modo de disminución automática es el mismo que el modo de incremento automático. Ambos también se pueden usar para implementar una pila como push y pop. Los modos de incremento automático y decremento automático son útiles para implementar estructuras de datos «Último en entrar, primero en salir».
Aquí solo se requiere una operación de referencia de memoria para acceder a los datos.
Ejemplo:ADD AL,[0301] //añade el contenido de la dirección de compensación 0301 a AL
1ª referencia para obtener domicilio efectivo.
2ª referencia para acceder a los datos.
Según la disponibilidad de la dirección efectiva, el modo indirecto es de dos tipos:
- Registro indirecto: en este modo, la dirección efectiva está en el registro y el nombre del registro correspondiente se mantendrá en el campo de dirección de una instrucción.
Aquí se requiere una referencia de registro, una referencia de memoria para acceder a los datos. - Memoria indirecta: en este modo, la dirección efectiva está en la memoria y la dirección de memoria correspondiente se mantendrá en el campo de dirección de una instrucción.
Aquí se requieren dos referencias de memoria para acceder a los datos.
Example:MOV AX, [SI +05]
Example: ADD AX, [BX+SI]
Según la transferencia de control, los modos de direccionamiento son:
- Modo de direccionamiento relativo de PC: el modo de direccionamiento relativo de PC se utiliza para implementar la transferencia de control dentro del segmento. En este modo, la dirección efectiva se obtiene agregando desplazamiento a la PC.
EA= PC+ Address field value PC= PC+ Relative value.
- Modo de direccionamiento de registro base: El modo de direccionamiento de registro base se usa para implementar la transferencia de control entre segmentos. En este modo, la dirección efectiva se obtiene agregando el valor del registro base al valor del campo de dirección.
EA= Base register + Address field value. PC= Base register + Relative value.
Nota:
- Ambos modos de direccionamiento son adecuados para la reubicación del programa en tiempo de ejecución.
- El modo de direccionamiento de registro basado es el más adecuado para escribir códigos independientes de posición.
Ventajas de los modos de direccionamiento
- Dotar a los programadores de facilidades como Pointers, contadores para controles de bucle, indexación de datos y reubicación de programas.
- Reducir el número de bits en el campo de direccionamiento de la Instrucción.
Ejemplo de pregunta GATE
Haga coincidir cada una de las declaraciones de lenguaje de alto nivel dadas en el lado izquierdo con el modo de direccionamiento más natural de los enumerados en el lado derecho.
1. A[1] = B[J]; a. Indirect addressing 2. while [*A++]; b. Indexed addressing 3. int temp = *x; c. Autoincrement
(A ) (1, c), (2, b), (3, a)
(B) (1, a), (2, c), (3, b)
(C) (1, b), ( 2, c), (3, a)
(D) (1, a), (2, b), (3, c)
Respuesta: (C)
Explicación:
List 1 List 2 1) A[1] = B[J]; b) Index addressing Here indexing is used 2) while [*A++]; c) auto increment The memory locations are automatically incremented 3) int temp = *x; a) Indirect addressing Here temp is assigned the value of int type stored at the address contained in X
Por lo tanto (C) es la solución correcta.
Este artículo es una contribución de Pooja Taneja. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA