Los modos de direccionamiento indican cómo se calcula la dirección de memoria de un dato en función de la dirección base y otros posibles desplazamientos o índices.
Algunos ejemplos de modos de direccionamiento son:
- Implícito: El operando no se especifica en la instrucción, sino que se deduce por el contexto o por el código de operación. Por ejemplo, la instrucción
INC A
incrementa el contenido del registro A en una unidad. La ventaja de este modo es que ahorra espacio y tiempo al no tener que indicar el operando. La desventaja es que limita las posibilidades de operación a los registros o valores predefinidos. - Inmediato: El operando es un valor constante que se indica en la instrucción. Por ejemplo, la instrucción
ADD #5
suma 5 al acumulador. La ventaja de este modo es que permite operar con valores constantes sin tener que almacenarlos previamente en memoria. La desventaja es que ocupa más espacio al tener que incluir el valor del operando. - Directo o absoluto: El operando es una dirección de memoria que se indica en la instrucción. Por ejemplo, la instrucción
LD A,(1000)
carga en el registro A el contenido de la dirección 1000 de memoria. La ventaja de este modo es que permite acceder directamente a cualquier posición de memoria sin intermediarios. La desventaja es que ocupa más espacio al tener que incluir la dirección completa del operando. - Indirecto: El operando es una dirección de memoria que se obtiene a partir de otra dirección de memoria o registro indicado en la instrucción. Por ejemplo, la instrucción
LD A,(HL)
carga en el registro A el contenido de la dirección apuntada por el registro HL. La ventaja de este modo es que permite acceder a posiciones variables o dinámicas de memoria mediante punteros o vectores. La desventaja es que requiere un acceso adicional a memoria para obtener la dirección efectiva del operando. - De registro: El operando es un registro específico indicado en la instrucción. Por ejemplo, la instrucción
ADD B
suma al acumulador el contenido del registro B. La ventaja de este modo es que permite acceder rápidamente a los registros sin tener que usar direcciones ni valores constantes. La desventaja es que limita las posibilidades de operación a los registros disponibles. - De desplazamiento: El operando es una dirección de memoria calculada sumando un valor constante (desplazamiento) a otra dirección base (registro o posición fija). Por ejemplo, la instrucción
LD A,(IX+5)
carga en el registro A el contenido de la dirección obtenida sumando 5 al contenido del registro IX (registro índice). La ventaja de este modo es que permite acceder a posiciones relativas o estructuradas de memoria mediante índices o bases. La desventaja es que requiere un cálculo adicional para obtener la dirección efectiva del operando. - De pila: El operando está situado en una zona especializada y ordenada de memoria llamada pila (stack), donde se pueden insertar (push) y extraer (pop) elementos siguiendo una política LIFO (Last In First Out). Por ejemplo, las instrucciones
PUSH BC
yPOP DE
insertan y extraen respectivamente los contenidos de los registros BC y DE en/de la pila usando como puntero el registro SP (Stack Pointer). La ventaja de este modo es que permite gestionar fácilmente datos temporales, parámetros o retornos mediante una estructura dinámica y automática. La desventaja es que requiere mantener actualizado el puntero SP y controlar los posibles desbordamientos (overflow) o subdesbordamientos (underflow).