Modos de direccionamiento

Anuncio
Modos de direccionamiento
Modos de direccionamiento
El CPU HCS08 incluye 16 modos de
direccionamiento:
• Apuntador de pila, offset de 8
• Inherente
bits
• Inmediato
• Apuntador de pila, offset de 16
• Directo
bits
• Extendido
• Memoria a memoria:
• Indexado, sin offset
o Inmediato a directo
• Indexado, offset de 8 bits
o Directo a directo
• Indexado, offset de 16 bits
o Indexado a directo con
• Relativo
post incremento
• Indexado con post incremento
o
Directo
a indexado con
• Indexado, offset de 8 bits con
post
incremento
post incremento
1
Direccionamiento inherente
Las instrucciones que utilizan este
direccionamientos no tienen que buscar
un operando sobre el cual actuar
„ Algunas de estas instrucciones actuan
sobre los datos que se encuentran en los
registros
„
… DIV
… CLI
… MUL
… CLRA
… LSLA
… NEGA
… PSHX
… NOP
… TAX
Direccionamiento inmediato
„
„
„
„
El operando en instrucciones con
direccionamiento inmediato se encuentra en los
bytes que siguen al código de operación
Estos bytes son el valor del operando que
utilizará la instrucción
Para indicar que se utilizará direccionamiento
inmediato, se utiliza el símbolo #
El operando está limitado a uno o dos bytes,
dependiendo del registro involucrado
2
Direccionamiento inmediato
„
Algunos ejemplos de uso de este
direccionamiento son:
… CPHX
#$FFFF
… LDA #100
… LDHX #etiqueta
… SUB #$A0
„
Otras instrucciones que lo utilizan:
… ADC,
ADD, AND, CPX, EOR, ORA, SBC
Direccionamiento directo
„
La mayoría de las instrucciones que lo
utilizan pueden acceder a los primeros
256 bytes de la memoria con solo 2 bytes:
…1
byte para el código de operación
… 1 byte para la parte baja de la dirección
efectiva
„
El byte más significativo de la dirección
efectiva se toma siempre como $00
3
Direccionamiento directo
El uso de este modo de direccionamiento
está limitado a operandos en la página
directa o página 0 (direcciones $0000 a
$00FF)
„ En la página 0 se encuentra parte de la
memoria RAM del microcontrolador
($0040 a $023F), así como la mayoría de
los registros de E/S ($0000 a $003F)
„
Direccionamiento directo
„
Algunos ejemplos de uso de este modo de
direccionamiento son:
$03 ;A Æ Puerto D
… LDX $00 ;Puerto A Æ X
… CPX $E0 ;Compara X con el contenido de
$00E0
… STA
4
Direccionamiento extendido
Utilizando este modo de direccionamiento,
las instrucciones pueden acceder a
cualquier dirección en un mapa de
memoria de 64Kbytes
„ Todas las instrucciones extendidas utilizan
3 bytes:
„
…1
byte para el código de operación
… Los otros dos son el MSB y LSB de la
dirección del operando
Direccionamiento extendido
Se utiliza cuando es necesario utilizar
memoria por encima de la página 0
„ Algunos ejemplos de uso de este modo de
direccionamiento son:
„
… ADC
$5006
… AND $0100
… LDX $FE04
5
Direccionamiento indexado, sin
offset
Este modo se utiliza para tener acceso a
datos con direcciones variables. X
contiene la parte baja de la dirección,
mientras que H contiene la parte alta
„ Estas instrucciones pueden mover un
apuntador a través de una tabla o
almacenar la dirección de una localidad de
RAM o E/S que se utilice frecuentemente
„
Direccionamiento indexado, sin
offset
„
Algunos ejemplos de uso de este modo de
direccionamiento son:
… JMP
,X
… STA ,X
… ADC ,X
… NEG ,X
6
Direccionamiento indexado,
con offset de 8 bits
En estas instrucciones, el CPU suma los
bytes sin signo en H:X al byte sin signo
que sigue al código de operación. La
suma es la dirección efectiva del operando
„ Estas instrucciones son útiles para
seleccionar el k-ésimo elemento en una
tabla de n elementos
„
Direccionamiento indexado,
con offset de 8 bits
„
Algunos ejemplos de uso de este modo de
direccionamiento son:
… JMP
$FF,X
… STA 18,X
… LDA 7,X
… NEG $10,X
7
Direccionamiento indexado,
con offset de 16 bits
En estas instrucciones, el CPU suma los
bytes sin signo en H:X a la palabra sin
signo formada por los dos bytes que
siguen al código de operación. La suma
es la dirección efectiva del operando
„ Estas instrucciones son útiles para
seleccionar el k-ésimo elemento en una
tabla de n elementos
„
Direccionamiento indexado,
con offset de 16 bits
„
Algunos ejemplos de uso de este modo de
direccionamiento son:
… JMP
$20FF,X
… STA $A018,X
… LDA $FF00,X
… JSR $1000,X
8
Direccionamiento con el apuntador
de la pila, con offset de 8 y 16 bits
Estos modos de direccionamiento son
similares a los indexados con offset, sólo
que utilizan el apuntador de la pila en
lugar del registro índice
„ Estas instrucciones son útiles para
acceder de una manera sencilla a los
datos en la pila
„
Direccionamiento con el apuntador
de la pila, con offset de 8 y 16 bits
„
Algunos ejemplos de uso de estos modos
de direccionamiento son:
… STA
$10,SP
… TST $25,SP
… LDA
$FF00,SP
… STX $0500,SP
9
Direccionamientos de memoria a
memoria
El CPU08 incorpora la capacidad de
realizar transferencia de datos directa
entre localidades de memoria
„ Se utiliza la instrucción MOV
„ Se cuenta con cuatro modos de
direccionamiento de memoria a memoria
„
Memoria a memoria: Inmediato a
Directo
Generalmente se utiliza para inicializar
variables y registros en la página directa
„ El operando en el byte que sigue al código
de operación se almacena en la localidad
de la página directa indicada por el
segundo byte
„ La instrucción MOV asociada a este modo
no altera el contenido del acumulador
„
10
Memoria a memoria: Inmediato a
Directo
PSHA
LDA
#$27
STA
$A0
PULA
; Respalda el valor de A
; A=$27
; Se almacena #$27 en $00A0
; Se restaura el valor de A
El código anterior se puede cambiar por el siguiente:
MOV
#$27,$A0
Memoria a memoria: Directo a
Directo
Generalmente se utiliza para intercambiar
datos entre registros en la página directa
„ El operando en la localidad de la página
directa indicada por el byte que sigue al
código de operación se almacena en la
localidad de la página directa indicada por
el segundo byte
„ La instrucción MOV asociada a este modo
no altera el contenido del acumulador
„
11
Memoria a memoria: Directo a
Directo
PSHA
LDA
$04
STA
$05
PULA
; Respalda el valor de A
; A=Contenido de la dir. $0004
; $0005=$0004
; Se restaura el valor de A
El código anterior se puede cambiar por el siguiente:
MOV
$04,$05
Memoria a memoria: Indexado a
Directo con Post Incremento
Generalmente se utiliza para transferir
tablas direccionadas por el registro índice
a un registro en la página directa
„ El operando direccionado por H:X se
almacena en la localidad de la página
directa indicada por el byte que le sigue al
código de operación. H:X se incrementa al
terminar
„ La instrucción MOV asociada a este modo
no altera el contenido del acumulador
„
12
Memoria a memoria: Indexado a
Directo con Post Incremento
Si quisiéramos escribir el contenido de la
dirección a la que apunta H:X en el puerto
B, se haría lo siguiente:
MOV X+,$01
Una vez que se ha movido el dato, H:X
incrementa su valor en 1, apuntando así a la
siguiente dirección
Memoria a memoria: Directo a
Indexado con Post Incremento
Generalmente se utiliza para llenar tablas
desde registros en la página directa
„ El operando en la localidad de la página
directa indicada por el byte que le sigue al
código de operación, se almacena en la
localidad direccionada por H:X. H:X se
incrementa al terminar
„ La instrucción MOV asociada a este modo
no altera el contenido del acumulador
„
13
Memoria a memoria: Directo a
Indexado con Post Incremento
Si quisiéramos escribir el contenido del
puerto D en la dirección a la que apunta
H:X, se haría lo siguiente:
MOV $03,X+
Una vez que se ha movido el dato, H:X
incrementa su valor en 1, apuntando así a la
siguiente dirección
Direccionamiento relativo
Todas las instrucciones de salto
condicional utilizan el direccionamiento
relativo para calcular la dirección efectiva
resultante
„ Si la condición es verdadera, la dirección
efectiva se carga en el PC. Si es falsa,
avanza a la siguiente instrucción
„
14
Direccionamiento relativo
„
El desplazamiento es un byte en
complemento a 2 que permite un rango de
salto de -128 a 127 bytes desde la
dirección que sigue a la del salto
Direccionamiento relativo
Inicio:
Fin:
LDA #1
CMP #-2
BLT Inicio
BRA Fin
; Salta si A es < -2
15
Direccionamiento indexado con post
incremento, sin offset y con offset de 8
bits
Este modo de direccionamiento es útil
para búsquedas en tablas.
„ Una vez direccionado el operando, H:X se
incrementa
„ Sólo se utiliza con la instrucción CBEQ
(Compare and Branch if Equal)
„
Direccionamientos indexados con
post incremento
LDA
STA
MOV
CLRX
Ciclo:
CBEQ
BRA
Iguales: CLRX
Ciclo2:
CBEQ
BRA
Iguales2: BRA
#$FF
$10
$10,$60
X+,Iguales
Ciclo
; Sin offset
$50,X,Iguales
Ciclo2
Iguales2
; Offset de 8 bits
16
Descargar