Está en la página 1de 6

Diego Iván Flores Munguía

Modos de direccionamiento de la CPU08.


Tarea 4

La CPU08 utiliza 16 modos de direccionamiento diferentes para poder acceder a los


datos.
Estos modos de direccionamiento definen como la CPU busca los datos requeridos
para poder ejecutar una instrucción. Estos son:

1. INHERENTE.

El direccionamiento inherente es utilizado en instrucciones donde el operando a


tratar se encuentra implícito en el código de la instrucción.
La mayoría de estas instrucciones tienen una longitud de 1 byte.
Ejemplos:
PULA, CLRA, TXA, INCA... ;Empila, borra, transfiere, incrementa... el acumulador.

2. INMEDIATO.

En las instrucciones con direccionamiento inmediato, el operando está contenido en


el(los) byte(s) siguiente(s) al código de operación de la instrucción. Estos bytes
representan el propio valor del operando. El operando tiene una longitud de 1 o 2
bytes.

Ejemplos:
SUB #$22 ;Resta el valor inmediato $22 al acumulador.
AIX #1 ;Suma el valor 1 al registro H:X.

3. DIRECTO.

Se utiliza el direccionamiento directo para acceder a los primeros 256 bytes (página
directa o página 0) del mapa de memoria mediante solo un byte de dirección. Se asume el
byte alto de la dirección efectiva como 0x00.
Este método de direccionamiento da lugar a instrucciones mas cortas (2 bytes, uno
para el opcode y otro para la dirección) reduciendo el espacio de memoria ocupado y el
tiempo de ejecución.

Ejemplos:
LDA 0x02 ;Carga en el acumulador el valor del la pos. de memoria
;0x02.
STA 0x01 ;Y posteriormente lo guarda en la pos. de memoria 0x01.

En ambos casos, las direcciones se representan mediante operandos de 1 byte.

4. EXTENDIDO.

Se utiliza el direccionamiento extendido para poder acceder a cualquiera de los 64 Kbytes


del mapa de memoria mediante dos bytes de dirección. Las instrucciones que utilizan este
direccionamiento tienen una longitud de 3 bytes, el primero para el código de operación y
el segundo y tercero para el byte mas y menos significativo de la dirección de memoria. Se
utiliza este método de direccionamiento cuando la dirección requerida está fuera de la
página directa (o página 0).

Ejemplos:
LDA 0x8000 ;Carga en el acumulador el valor de la pos. de memoria
;0x8000.
STA 0x100 ;Y posteriormente lo guarda en la pos. de memoria 0x100.

5. INDEXADO, SIN OFFSET.

Los direccionamientos indexados utilizan el registro índice como puntero que


contiene la (o parte de la) dirección del operando a tratar.
El direccionamiento indexado sin offset se utiliza para acceder a cualquiera de los 64
Kbytes del mapa de memoria mediante instrucciones de solo 1 byte de longitud. Para
obtener la dirección de memoria requerida se utiliza el registro índice H:X, donde H
contiene el byte mas significativo y X el menos significativo.

Ejemplos:
LDA ,X ;Carga en el acumulador el valor de la pos. apuntada por el
;registro H:X.
INCX ;Actualiza el registro índice.
STA ,X ;Guarda el valor del acumulador en la pos. apuntada por el
;nuevo valor en H:X.
6. INDEXADO, CON OFFSET DE 8 BIT.

El direccionamiento indexado con offset de 8 bit se utiliza para acceder a cualquiera


de los 64 Kbytes del mapa de memoria mediante instrucciones de 2 bytes de longitud. Para
obtener la dirección de memoria requerida se utiliza el registro índice H:X mas el offset de
8 bits (1 byte) que sigue al código de operación. La CPU suma estos valores para obtener la
dirección efectiva.

Ejemplos:
LDA off8bit,X ;Carga en el acumulador el valor de la pos. apuntada por H:X
;+ off8bit.
NCX ;Actualiza el registro índice.
STA off8bit,X ;Guarda el valor del acumulador en la pos. apuntada por H:X
;+ off8bit.

7. INDEXADO, CON OFFSET DE 16 BIT.

El direccionamiento indexado con offset de 16 bit se utiliza para acceder a cualquiera


de los 64 Kbytes del mapa de memoria mediante instrucciones de 3 bytes de longitud.
Para obtener la dirección de memoria requerida se utiliza el registro índice H:X mas el
offset de 16 bits (2 bytes) que sigue al código de operación. La CPU suma estos valores
para obtener la dirección efectiva.

Ejemplos:
LDA off16bit,X ;Carga en el acumulador el valor de la pos. apuntada por H:X
;+ off16bit.
INCX ;Actualiza el registro índice.

STA off16bit,X ;Guarda el valor del acumulador en la pos. apuntada por H:X
;+ off16bit.

8. STACK POINTER, CON OFFSET DE 8 BIT.

Los direccionamientos indexados mediante Stack Pointer utilizan el registro SP


como puntero que contiene la (o parte de la) dirección del operando a tratar.
El direccionamiento mediante Stack Pointer con offset de 8 bit se utiliza para
acceder a cualquiera de los 64 Kbytes del mapa de memoria mediante instrucciones
de 3 bytes de longitud. Para obtener la dirección de memoria requerida se utiliza el
registro SP mas el offset de 8 bits (1 byte) que sigue al código de operación (2 bytes).
La CPU suma estos valores para obtener la dirección efectiva.

Ejemplos:
LDA off8bit,SP ;Carga en el acumulador el valor de la pos. apuntada por
SP
;+ off8bit.
TXS ;Actualiza el registro SP.
STA off8bit,SP ;Guarda el valor del acumulador en la pos. apuntada por
SP
;+ off8bit.

9. STACK POINTER, CON OFFSET DE 16 BIT.


El direccionamiento mediante Stack Pointer con offset de 16 bit se utiliza para
acceder a cualquiera de los 64 Kbytes del mapa de memoria mediante instrucciones
de 4 bytes de longitud. Para obtener la dirección de memoria requerida se utiliza el
registro SP mas el offset de 16 bits (2 byte) que sigue al código de operación (2
bytes). La CPU suma estos valores para obtener la dirección efectiva.

Ejemplos:
LDA off16bit,SP ;Carga en el acumulador el valor de la pos. apuntada por
SP
;+ off16bit.
TXS ;Actualiza el registro SP.
STA off16bit,SP ;Guarda el valor del acumulador en la pos. apuntada por
SP
;+ off16bit.

10. RELATIVO.

El direccionamiento relativo se utiliza en las bifurcaciones condicionales para


obtener la dirección efectiva de la próxima instrucción a ejecutar (salto).
La CPU calcula la dirección de destino sumando al contador de programa actual
(siguiente al salto) el valor del byte que sigue al código de operación de la instrucción.
Este valor de desplazamiento se codifica mediante un byte complemento a dos lo que
permite un rango de salto de -128 a 127 bytes.

Ejemplos:

CMP #7 ;Compara el valor guardado en el acumulador con 7.


BEQ SIGUE ;Y si es igual salta a la direcció n SIGUE.

11. MEMORIA A MEMORIA, INMEDIATO A DIRECTO.

Este direccionamiento permite mover un valor inmediato a una posición


perteneciente a la página 0 (0x00 - 0xFF) sin que tenga que almacenarse
temporalmente en el acumulador.
El primer operando después del código de operación es el valor inmediato, el
segundo byte la dirección de la página 0 donde será almacenado. Este
direccionamiento es útil para inicializar variables y registros que están ubicados en
la página 0.

Ejemplos:
MOV #0,$40 ;Inicializa la direcció n 0x40 a 0.
12. MEMORIA A MEMORIA, DIRECTO A DIRECTO.

Este direccionamiento permite mover contenidos entre posiciones de la página


0 sin que tenga que almacenarse temporalmente en el acumulador.
El primer operando después del código de operación es la dirección de
origen y el segundo operando es la dirección de destino.

Ejemplos:
MOV $40,$80 ;Mueve el valor almacenado en la direcció n 0x40 a la 0x80.

13. MEMORIA A MEMORIA, INDEXADO A DIRECTO CON POST-INCREMENTO.

Este direccionamiento permite mover el valor contenido en la posición apuntada


por H:X a otra posición dentro de la página 0 sin que tenga que almacenarse
temporalmente en el acumulador. El operando después del código de operación es la
dirección de destino. Después se incrementa el registro índice.

Ejemplos:
MOV X+,$20 ;Mueve el valor apuntado en H:X a la direcció n 0x20.

14. MEMORIA A MEMORIA, DIRECTO A INDEXADO CON POST-INCREMENTO.

Este direccionamiento permite mover el valor contenido en una posición de la página 0 a otra
posición apuntada por el registro H:X sin que tenga que almacenarse temporalmente en el
acumulador. El operando después del código de operación es la dirección de origen. Después
se incrementa el registro índice.

Ejemplos:
MOV $20,X+ ;Mueve el valor almacenado en 0x20 a la posició n apuntada
;por H:X.

15. INDEXADO CON POST-INCREMENTO.

Se trata de un direccionamiento indexado mediante índice H:X sin offset. El


índice apunta al operando a tratar con posterior incremento para apuntar al
siguiente valor. Lo utilizan instrucciones de comparación para realizar búsquedas de
datos en tablas lineales, si se encuentra el valor buscado se bifurca a la dirección
dada mediante direccionamiento relativo.

Ejemplos:
BUSQ CBEQ X+,ENC ;Compara el valor apuntado por H:X con el
;acumulador y si es igual salta a ENC.
BRA BUSQ ;En caso contrario, sigue buscando.

16. INDEXADO CON OFFSET DE 8 BIT Y POST-INCREMENTO.

Se trata de un direccionamiento indexado mediante índice H:X con offset de 8 bits. El


índice apunta al operando a tratar con posterior incremento para apuntar al siguiente
valor. Lo utilizan instrucciones de comparación para realizar búsquedas de datos en
tablas lineales, si se encuentra el valor buscado se bifurca a la dirección dada
mediante direccionamiento relativo.

Ejemplos:
BUSQ CBEQ $20,X+,ENC ;Compara el valor apuntado por (H:X + 0x20) con
el
;acumulador y si es igual salta a ENC.
BRA BUSQ ;En caso contrario, sigue buscando.

También podría gustarte