miércoles, 5 de diciembre de 2018

Modo de direccionamiento

Modo de direccionamiento

Un modo de direccionamiento se refiere a cómo se está dirigiendo a una ubicación de memoria determinada. Existen cinco formas diferentes o cinco modos de direccionamiento para ejecutar esta instrucción, que son los 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

Empecemos con un ejemplo.


MOV A, # 6AH

En general, podemos escribir,

MOV A, #data

Se denomina como inmediato 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 de la siguiente dirección de memoria del programa se transfieren al acumulador A (E0H es la dirección del acumulador). Como la instrucción es de 2 bytes y se ejecuta en un ciclo, el contador del programa se incrementará en 2 y apuntará a 0204 de la memoria del programa.

Immediate Addressing Mode


Modo de direccionamiento directo

Esta es otra forma de abordar un operando. Aquí, la dirección de los datos (datos de origen) se proporciona como un operando. Tomemos 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.

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

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

Direct Addressing Mode

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). En 04H, el control encuentra los datos 1F y los transfiere al acumulador y, por lo 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 de origen). Tratemos de entender 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 tratar los registros, se utilizan bancos de registros. Hay 4 bancos de registros nombrados de 0 a 3. Cada banco consta de 8 registros nombrados de R0 a R7.

A la vez, se puede seleccionar un único banco de registros. La selección de un banco de registros se hace posible a través de un Registro de función especial (SFR) denominado Palabra de estado del procesador (PSW). PSW es ​​un SFR de 8 bits donde 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 los bancos de registro.

Ahora, eche un vistazo a la siguiente ilustración para obtener una comprensión clara de cómo funciona.

Register Direct Addressing Mode

Registrar el modo de direccionamiento directo
Opcode 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 registro # 0, los datos de R4 del banco de registro # 0 se moverán al acumulador. Aquí 2F se almacena a las 04H. 04H representa la dirección de R4 del banco de registro # 0.

El movimiento de datos (2F) se resalta 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 completar la ejecución. Lo que significa es que puede guardar la 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 una dirección, que contiene los datos que se transferirán al acumulador. Ejemplo: Si R0 tiene el valor 20H, y los datos 2FH se almacenan en la dirección 20H, el valor 2FH se transferirá al acumulador después de ejecutar esta instrucción. Vea la siguiente ilustración.

Register Indirect Addressing Mode

Registrar modo de direccionamiento indirecto
Así que el código de operación para MOV A, @ R0 es 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 localiza los datos 2FH y transfiere 2FH al acumulador. Esta es una instrucción de 1 byte y el contador del programa se incrementa en 1 y se mueve a 0203 de la memoria del programa.

Nota: solo R0 y R1 pueden formar una instrucción de direccionamiento indirecto. En otras palabras, el programador puede crear una instrucción usando @ R0 o @ R1. Todos los bancos de registro están permitidos.

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). Consideremos 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 los contenidos 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 se transfieren al acumulador.

Indexed Addressing Mode

Modo de direccionamiento indexado
El código de operación es 93H. DPTR tiene el valor 01FE, donde 01 se encuentra en DPH (8 bits más altos) y FE se encuentra en DPL (8 bits más bajos). El acumulador tiene el valor 02H. Luego se realiza una adición 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) se reemplazará 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 + PC funciona de la misma manera que el ejemplo anterior. En lugar de agregar DPTR con el acumulador, aquí se agregan los datos dentro del contador del programa (PC) con el acumulador para obtener la dirección de destino.

0 comentarios:

Publicar un comentario