Actualizado el 21 de Marzo del 2018 (Publicado el 9 de Noviembre del 2017)
931 visualizaciones desde el 9 de Noviembre del 2017
2,1 MB
24 paginas
Creado hace 15a (15/07/2009)
MODOS
DE
DIRECCIONAMIENTO
CPU08
Curso de Microcontroladores
Familia HC908 Flash de Freescale
Parte II
ING. DANIEL DI LELLA
MODOS DE
DIRECCIONAMIENTO
• Inherente
• Inmediato
• Directo
• Extendido
• Indexado
• Relativo
• Memoria a Memoria
A continuación veremos cada uno de estos modos de direccionamiento en la familia HC908,
detalles de funcionamiento y uso más frecuente de los mismos. El direccionamiento “memoria
a memoria” es una novedad para aquellos usuarios de la familia HC705 y veremos en detalle las
ventajas que ello implica.
Curso de Microcontroladores
Familia HC908 Flash de Freescale
Parte II
ING. DANIEL DI LELLA
Direccionamiento Inherente
No tiene operando
Mayormente, son operaciones sobre los registros del CPU o bits.
No se necesitan datos adicionales.
Ejemplo:
CLRA
Memoria
Espacio de Programa
4 F
X X
ocl*
ocl + 1
Espacio de Datos
X X
X X
CPU
A
X X
0 0
* localización del opcode
Contenido del registro
Curso de Microcontroladores
Familia HC908 Flash de Freescale
Parte II
ING. DANIEL DI LELLA
Direccionamiento Inmediato
Especifica el valor directamente, no la dirección del valor
•
Indicado por el símbolo #
Tiene un solo operando
• Contenido en el byte o los bytes seguidos inmediatamente al opcode
Ejemplo:
Memoria
LDA
#$FF
Espacio de Programa
A 6
F F
ocl
ocl + 1
Espacio de Datos
X X
X X
Curso de Microcontroladores
Familia HC908 Flash de Freescale
Parte II
CPU
A
X X
F F
Contenido del registro
ING. DANIEL DI LELLA
Direccionamiento Directo
Se especifican 8 bit de dirección del operando
• Byte superior de los 16 bits de dirección se asume que sea $00
• Usado para acceder a los primeros 256 bytes de memoria (por lo
general este espacio es en RAM).
Dirección contenida en el byte inmediatamente seguido al opcode
Ejemplo:
LDA $50
Memoria
Espacio de programa
B 6
5 0
ocl
ocl + 1
Espacio de Datos
A A
X X
0050
0051
Curso de Microcontroladores
Familia HC908 Flash de Freescale
Parte II
CPU
A
X X
A A
Contenido del registro
ING. DANIEL DI LELLA
Direccionamiento Extendido
Se especifican los 16 bits de dirección del operando
• Usado para acceder a direcciones mayores a $00FF en memoria (puede ser espacio
de RAM (mayor a $00FF) o espacio de Flash o ROM, hasta 64Kb).
Dirección contenida en los 2 bytes inmediatamente seguidos al opcode
Ejemplo:
Memoria
LDA $0400
Espacio de Programa
C 6
0 4
0 0
ocl
ocl + 1
ocl + 2
Espacio de Datos
A A
X X
0400
0401
Curso de Microcontroladores
Familia HC908 Flash de Freescale
Parte II
CPU
A
X X
A A
Contenido del registro
ING. DANIEL DI LELLA
Direccionamiento Indexado
- Sin Offset -
Se especifica el contenido del Index Register H:X como dirección del operando. A diferencia del
HC705, en el HC908 el registro indice es de 16 Bits, por lo que el compilador assembler
interpretará “H:X” cuando solo vea “X” en la instrucción con direccionamiento indexado.
CLR ,X
Ejemplo:
Memoria
Espacio de Programa
7 F
X X
X X
ocl
ocl + 1
ocl + 2
Espacio de Datos
X X
0 0
0400
0400
Curso de Microcontroladores
Familia HC908 Flash de Freescale
Parte II
CPU
H:X
04
00
Contenido del registro
ING. DANIEL DI LELLA
Direccionamiento Indexado
- 8 Bit Offset-
8 bit offset no signado + registro H:X no signado = localización de memoria
• Registro H:X no es afectado
• 8 bit offset es el byte inmediatamente seguido al opcode
CLR 10,X
Ejemplo:
Memoria
Espacio de Programa
6 F
0 A
X X
ocl
ocl + 1
ocl + 2
Espacio de Datos
X X
0 0
040A
040A
CPU
H:X
04
00
Contenido del registro
Curso de Microcontroladores
Familia HC908 Flash de Freescale
Parte II
ING. DANIEL DI LELLA
Direccionamiento Indexado
- 16 Bit Offset -
16 bit offset no signado + Registro H:X no signado = localización de memoria
• Registro H:X no es afectado
• 16 bit offset son los dos bytes inmediatamente seguidos al opcode
Ejemplo:
Memoria
Espacio de programa
STA $0100,X
D 7
0 1
0 0
ocl
ocl + 1
ocl + 2
Espacio de Datos
X X
0150
5 5
0150
Curso de Microcontroladores
Familia HC908 Flash de Freescale
Parte II
CPU
A
55
H:X
00
50
Contenido del registro
ING. DANIEL DI LELLA
Direccionamiento Indexado-
8 & 16 Bit Offsets -
Comunmente usado para acceder a elementos de estructura de datos
• El Offset sería la dirección base de la estructura
• El registro indice contendría el desplazamiento del “N”...avo elemento
Table
ORG
FCB
$100
$10, $20, $30, $40 .......
•
•
* Calcula desplazamiento para elemento N en A
•
CLRH
TAX
LDA
Table,X
NOTA: Si Table estuviera en los primeros 256 bytes de
memoria, la mayoría de de los ensambladores usarían
instrucciones de 8-bit de offset
Curso de Microcontroladores
Familia HC908 Flash de Freescale
Parte II
Table
H:X=N
0100
element 0
element 1
element 2
•
•
•
•
element n
element n+1
element n+2
element n+3
ING. DANIEL DI LELLA
Direccionamiento Indexado
- Usando el Stack pointer y 8-Bit Offset -
8 bit offset no signado + Registro SP no signado = localización memoria
• Registro SP no es afectado
• 8 bit offset es el byte inmediatamente seguido al byte del opcode
STA 5,SP
Ejemplo:
Memoria
Espacio de programa
9 E
E 7
0 5
Espacio del Stack
X X
•
•
•
F F
ocl
ocl + 1
ocl + 2
00D0
00D5
CPU
A
FF
SP
00
D0
Contenido del registro
Curso de Microcontroladores
Familia HC908 Flash de Freescale
Parte II
ING. DANIEL DI LELLA
Direccionamiento Indexado
- Usando Stack pointer y 16-Bit Offset -
16 bit offset no signado + registro SP no signado = localización memoria
• Registro SP no es afectado
• 16 bit offset son los dos bytes inmediatamente seguidos al opcode
Ejemplo:
Memoria
Espacio de programa
STA $100,SP
9 E
D 7
0 1
0 0
ocl
ocl + 1
ocl + 2
ocl + 3
Espacio de datos
X X
•
•
•
F F
00D0
01D0
Curso de Microcontroladores
Familia HC908 Flash de Freescale
Parte II
CPU
A
FF
SP
00
D0
Contenido del registro
NOTA: Si las interrupciones están deshabilitadas, el SP
puede ser usado como un registro indice adicional
• Menos eficiente por el uso del Pre Byte !!!
ING. DANIEL DI LELLA
Stack Pointer
- 8 Bit Offsets -
Soporta lenguajes de alto nivel
• Los Compiladores a menudo colocan parametros para procedimientos y almacenaje temporal en el stack
Direccionando el Stack Pointer es una manera eficiente para acceder a esa información
00C0
X X
temp 1
temp 2 msb
temp 2 lsb
param 3
param 2
param 1
SP
temp 1 = 1,SP
temp 2 = 2,SP and 3,SP
param 3 = 4,SP
param 2 = 5,SP
param 1 = 6,SP
Curso de Microcontroladores
Familia HC908 Flash de Freescale
Parte II
ING. DANIEL DI LELLA
Direccionamiento Relativo
• Only for branch instructions.
BGT SERVICE
OCL
PC
OP CODE
OFFSET
+2
OFFSET
SERVICE
BEQ LOOP
LOOP
OFFSET
OCL
PC
+2
OP CODE
OFFSET
• PC is + 2 from OCL (due to prefetching)
• 8 bit offset. Range is -128 +126
• Effective Address (EA) = PC + displacement(8-bit Offset)
• Assembler calculates displacement: disp. = EA - PC
from PC
Curso de Microcontroladores
Familia HC908 Flash de Freescale
Parte II
ING. DANIEL DI LELLA
Direccionamiento Relativo, Continuación...
Usado en todas las instrucciones branch (salto) condicionales
Si la condición es VERDADERA:
Program Counter = Program Counter + 8 bit offset signado
SINO:
Program Counter no es afectado
BEQ $8100
Ejemplo:
Memoria
Espacio de programa
2 7
A E
X X
$8150
$8151
$8152
Curso de Microcontroladores
Familia HC908 Flash de Freescale
Parte II
CPU
PC
81
52
Si la condición es verdadera
81
00
Contenido del registro
ING. DANIEL DI LELLA
Direccionamiento Indexado
- No Offset con Post Incremento -
El Registro indice H:X contiene la dirección del operando
• Despues que la dirección del operando es calculada, H:X es incrementado en 1 (siempre)
Loop
Out
CBEQ X+,Out
BRA
. . . .
Loop
Ejemplo:
Memoria
Espacio de Programa
7 1
0 2
X X
ocl
ocl + 1
ocl + 2
Espacio de Datos
X X
•
•
•
5 5
0400
0410
Curso de Microcontroladores
Familia HC908 Flash de Freescale
Parte II
A
55
Contenido del registro
CPU
H:X
04
04
04
04
00
01
02
11
ING. DANIEL DI LELLA
Direccionamiento Indexado
- 8 bit Offset con Post Incremento -
Igual al direccionamiento indexado con 8 bit offset, plus post incremento
• Después que la dirección del operando es calculada, H:X es incrementado en 1 (siempre)
Loop
Out
CBEQ $50,X+,Out
BRA
. . . .
Loop
Ejemplo:
Memoria
Espacio de programa
7 1
5 0
0 2
ocl
ocl + 1
ocl + 2
Espacio de Datos
X X
•
•
•
5 5
0450
0460
Curso de Microcontroladores
Familia HC908 Flash de Freescale
Parte II
A
55
Contenido del registro
CPU
H:X
04
04
04
04
00
01
02
11
ING. DANIEL DI LELLA
Direccionamiento “Memoria a Memoria”
Usado para mover información desde una locación a otra
• No usa / afecta registros del CPU
– Excepto cuando se usa direccionamiento indexado con post
incremento
• Mas eficiente que la combinación Load/Store
Pueden utilizarse con intrucciones MOV solamente
• MOV Dirección Fuente, Dirección Destino
Cuatro variantes:
Inmediato a Directo
•
• Directo a Directo
Indexado a Directo con Post Incremento
•
• Directo a Indexado con Post Incremento
Curso de Microcontroladores
Familia HC908 Flash de Freescale
Parte II
ING. DANIEL DI LELLA
Direccionamiento Memoria a Memoria
- Immediato a Directo -
La Fuente es un byte valor inmediato
El Destino debe estar en los primeros 256 bytes de memoria
Ejemplo de uso:
•
Inicialización de variables o registros en RAM.
MOV #$AA,$F0
Espacio de programa
Espacio de Datos
Memoria
6 E
A A
F 0
ocl
ocl + 1
ocl + 2
X X
A A
00F0
00F0
Curso de Microcontroladores
Familia HC908 Flash de Freescale
Parte II
ING. DANIEL DI LELLA
Direccionamiento Memoria a Memoria
- Directo a Directo -
La Fuente debe estar en los primeros 256 bytes de memoria
El Destino debe estar en los primeros 256 bytes de memoria
Ejemplo de uso:
• Movimiento de datos desde una página cero a otro lugar dentro de la
misma página (mover datos dentro de la misma
Comentarios de: HC08 FLASH, MODOS DE DIRECCIONAMIENTO CPU08 (0)
No hay comentarios