Sistemas integrados: modos de direccionamiento

Un addressing modese refiere a cómo se dirige a una ubicación de memoria determinada. Hay cinco formas diferentes o cinco modos de direccionamiento para ejecutar esta instrucción, que son las siguientes:

  • Modo de direccionamiento inmediato
  • Modo de direccionamiento directo
  • Registrar el modo de direccionamiento directo
  • Registrar modo de direccionamiento indirecto
  • Modo de direccionamiento indexado

Modo de direccionamiento inmediato

Comencemos con un ejemplo.

MOV A, #6AH

En general, podemos escribir,

MOV A, #data

Se denomina como immediate porque los datos de 8 bits se transfieren inmediatamente al acumulador (operando de destino).

La siguiente ilustración describe la instrucción anterior y su ejecución. El código de operación 74H se guarda en la dirección 0202. Los datos 6AH se guardan en la dirección 0203 en la memoria del programa. Después de leer el código de operación 74H, los datos en la siguiente dirección de memoria del programa se transfieren al acumulador A (E0H es la dirección del acumulador). Dado que la instrucción es de 2 bytes y se ejecuta en un ciclo, el contador del programa se incrementará en 2 y apuntará al 0204 de la memoria del programa.

Note- El símbolo '#' antes de 6AH indica que el operando es un dato (8 bits). En ausencia de '#', el número hexadecimal se tomaría como dirección.

Modo de direccionamiento directo

Esta es otra forma de abordar un operando. Aquí, la dirección de los datos (datos de origen) se da como operando. Pongamos un ejemplo.

MOV A, 04H

El banco de registros # 0 (4º registro) tiene la dirección 04H. Cuando se ejecuta la instrucción MOV, los datos almacenados en el registro 04H se mueven al acumulador. Como el registro 04H contiene los datos 1FH, 1FH se mueve al acumulador.

Note- No hemos utilizado '#' en el modo de direccionamiento directo, a diferencia del modo inmediato. Si hubiéramos usado '#', el valor de datos 04H se habría transferido al acumulador en lugar de 1FH.

Ahora, observe la siguiente ilustración. Muestra cómo se ejecuta la instrucción.

Como se muestra en la ilustración anterior, esta es una instrucción de 2 bytes que requiere 1 ciclo para completarse. La PC se incrementará en 2 y apuntará a 0204. El código de operación para la instrucción MOV A, dirección es E5H. Cuando se ejecuta la instrucción en 0202 (E5H), el acumulador se activa y está listo para recibir datos. Luego, la PC pasa a la siguiente dirección como 0203 y busca la dirección de la ubicación de 04H donde se encuentran los datos de origen (que se transferirán al acumulador). A las 04H, el control encuentra los datos 1F y los transfiere al acumulador y, por tanto, se completa la ejecución.

Registrar el modo de direccionamiento directo

En este modo de direccionamiento, usamos el nombre del registro directamente (como operando fuente). Intentemos comprender con la ayuda de un ejemplo.

MOV A, R4

A la vez, los registros pueden tomar valores de R0 a R7. Hay 32 registros de este tipo. Para utilizar 32 registros con solo 8 variables para direccionar registros, se utilizan bancos de registros. Hay 4 bancos de registros con nombres de 0 a 3. Cada banco consta de 8 registros con nombres de R0 a R7.

A la vez, se puede seleccionar un solo banco de registro. La selección de un banco de registro es posible a través de unSpecial Function Register (SFR) nombrado Processor Status Word(PSW). PSW es ​​un SFR de 8 bits en el que cada bit se puede programar según sea necesario. Los bits se designan de PSW.0 a PSW.7. PSW.3 y PSW.4 se utilizan para seleccionar bancos de registros.

Ahora, observe la siguiente ilustración para comprender claramente cómo funciona.

El código de operación EC se utiliza para MOV A, R4. El código de operación se almacena en la dirección 0202 y cuando se ejecuta, el control va directamente a R4 del banco de registros respetado (que se selecciona en PSW). Si se selecciona el banco de registros # 0, entonces los datos de R4 del banco de registros # 0 se moverán al acumulador. Aquí 2F se almacena a las 04H. 04H representa la dirección de R4 del banco de registros # 0.

El movimiento de datos (2F) está resaltado en negrita. 2F se transfiere al acumulador desde la ubicación de la memoria de datos 0C H y se muestra como una línea de puntos. 0CH es la ubicación de la dirección del Registro 4 (R4) del banco de registros # 1. La instrucción anterior es de 1 byte y requiere 1 ciclo para su ejecución completa. Lo que significa es que puede ahorrar memoria del programa utilizando el modo de direccionamiento directo de registro.

Registrar modo de direccionamiento indirecto

En este modo de direccionamiento, la dirección de los datos se almacena en el registro como operando.

MOV A, @R0

Aquí el valor dentro de R0 se considera como una dirección, que contiene los datos que se transferirán al acumulador. Example: Si R0 tiene el valor 20H y los datos 2FH se almacenan en la dirección 20H, entonces el valor 2FH se transferirá al acumulador después de ejecutar esta instrucción. Vea la siguiente ilustración.

Entonces el código de operación para MOV A, @R0es E6H. Suponiendo que se selecciona el banco de registros # 0, el R0 del banco de registros # 0 contiene los datos 20H. El control del programa se mueve a 20H donde ubica los datos 2FH y transfiere 2FH al acumulador. Esta es una instrucción de 1 byte y el contador del programa aumenta en 1 y se mueve a 0203 de la memoria del programa.

Note- Solo R0 y R1 pueden formar una instrucción de direccionamiento indirecto de registro. En otras palabras, el programador puede crear una instrucción usando @ R0 o @ R1. Se permiten todos los bancos de registro.

Modo de direccionamiento indexado

Tomaremos dos ejemplos para comprender el concepto de modo de direccionamiento indexado. Eche un vistazo a las siguientes instrucciones:

MOVC A, @A+DPTR

y

MOVC A, @A+PC

donde DPTR es el puntero de datos y PC es el contador del programa (ambos son registros de 16 bits). Considere el primer ejemplo.

MOVC A, @A+DPTR

El operando de origen es @ A + DPTR. Contiene los datos de origen de esta ubicación. Aquí estamos agregando el contenido de DPTR con el contenido actual del acumulador. Esta adición dará una nueva dirección que es la dirección de los datos de origen. Los datos apuntados por esta dirección luego se transfieren al acumulador.

El código de operación es 93H. DPTR tiene el valor 01FE, donde 01 está ubicado en DPH (8 bits más altos) y FE está ubicado en DPL (8 bits más bajos). El acumulador tiene el valor 02H. Luego se realiza una suma de 16 bits y 01FE H + 02H da como resultado 0200 H. Los datos en la ubicación 0200H se transferirán al acumulador. El valor anterior dentro del acumulador (02H) será reemplazado con los nuevos datos de 0200H. Los nuevos datos en el acumulador se resaltan en la ilustración.

Esta es una instrucción de 1 byte con 2 ciclos necesarios para la ejecución y el tiempo de ejecución requerido para esta instrucción es alto en comparación con las instrucciones anteriores (que fueron todas de 1 ciclo cada una).

El otro ejemplo MOVC A, @A+PCfunciona de la misma manera que el ejemplo anterior. En lugar de agregar DPTR con el acumulador, aquí los datos dentro del contador de programa (PC) se agregan con el acumulador para obtener la dirección de destino.