Algo aserca de la forma en que se manejan las instrucciones y la memoria si alguien puede añadir un ejemplo codigo con una explicacion bienvenido.
aqui va:
Introducción
El set de instrucciones de los pic18cxxx agrega muchas mejoras, a los anteriores sets de instrucciones.
Cada instrucción esta dividida en un OPCODE que especifica el tipo de instrucción y uno o más operados los cuales facilitan especificar la operación de la instrucción.
El set de instrucciones es altamente ortogonal y es agrupado dentro de 4 categorías básicas:
- Operaciones orientadas a Byte
- Operaciones orientadas a BIT
- Operaciones con un operando literal
- Operaciones de control
Muchas instrucciones orientadas a byte tienen tres operándoos
1. El archivo de Registro (especificado por el valor de 'f').
2. El destino del resultado (especificado por el valor de 'd').
3. El acceso a memoria (especificado por el valor de 'a').
'f' representa un archivo de registros designado y 'd' representa el destino.
El registró designado específica cual registro es el usado por la instrucción.
El indicador de acceso 'a' especifica si BSR selecciona los bancos o si es usado el acceso a bancos.
El nombre del destino especifica dónde el resultado de la operación debe situarse. Si es cero, la el resultado es guardado en el Registro W. Si es uno, el resultado es guardado en el Registro especificado.
Todas las instrucciones orientadas a BIT tienen tres operandos:
1. El registro (Especificado por el valor de 'f').
2. El BIT del registro (especificado por el balor de 'b').
3 El acceso a memoria (especificado por el valor de 'a').
B ' designa el área del BIT seleccionando el número del BIT afectado por la operación, mientras ' f ' representa la posición del archivo en el cual el BIT está ubicado. El señalizador de acceso 'a' especifica si el registro BSR selecciona el banco o si el acceso a banco es usado.
Las instrucciones con literales pueden utilizar algunos de los siguientes operándoos:
- Un literal puede ser cargado en un registro (especificado por el valor de 'k').
- El registro FSR carga el literal dentro (especificado por el valor de 'f').
- No requiere operando (especificado por el valor de '-').
Las instrucciones de de control pueden usar algunos de los siguientes operandos:
- Una dirección de la memoria de programa (especificado por el valor de 'n').
- El modo de operación de las instrucciones CALL o RETURN (especificado por el valor de 's').
- El modo de operación de las instrucciones Read y Write Table (especificado por el valor de 'm').
- No requiere operados (especificado por el valor de '-')
Todas las instrucciones son de una simple palabras excepto por tres instrucciones de doble palabra.
Estas tres instrucciones son echas de doble palabra de instrucción asi que toda la información requerida es valida en 32 Bits. En esta segunda palabra, los 4 bits mas significativos son '1'. Si esta segunda instrucción es ejecutada como una instrucción, esta sera ejecutada como un NOP.
Todas las instrucciones simples son ejecutadas en un simple ciclo de instrucción, a menos que un test condicional sea verdadero el contador de programa sea cambiado como resultado de la instrucción. En estes caso, la ejecución toma dos ciclos de instrucción con un ciclo de instrucción NOP adicional ejecutado.
La doble palabra de instrucción (que no modifica el PC) ejecutada en un doble ciclo de instrucción.
Un ciclo de instrucción consiste de cuatro periodos de oscilador. Así, para una frecuencia de oscilador de 4 MHZ, el tiempo normal de ejecución de una instrucción es de 1 ?S. Si un test condicional es verdadero o el contador de programa es cambiado como resultado de una instrucción, el tiempo de ejecución de es de 2 ?S. Dos palabras de instrucción (si es verdadero) tomarían 3 ?S.
Mapa de memoria de datos
El mapa de memoria de datos consiste en 16 bancos de 256 bytes cada uno. El set de instrucciones y la arquitectura permite operaciones con todos los bancos de memoria (tal como MOVFF). Un Segmento de banco 0 y un segmento de banco 15 abarca el acceso a bancos.
Acceso a bancos
El acceso a bancos es una arquitectura mejorada que es muy útil para la optimización con compiladores de lenguaje C. Las técnicas usadas por el compilador C pueden también ser útiles con programas hechos en assembler
Esta región de memoria de datos puede ser usada para
- Calculo de valores intermedios
- Variables locales de subrutinas.
- Variables comunes
- Rápida Evaluación/control de SFR (sin bancos)
El acceso a bancos es comprendido de 2 segmentos: Segmento 0 y segmento 1. El segmento 0 es la RAM esta mapeada en el banco 0. El segmento 1 son los SFR que estan mapeados en el banco 15.
Cada segmento puede ser de diferente tamaño. La suma de RAM del segmento 0 y el segmento 1 es 256 bytes. Cuando se forza en el acceso a bancos (a = '0') la ultima direccion en el segmento 0 es seguida por la primer direccion en el segmento 1. El segmento 1 contiene los registros de funcion especial a fin de que estos registros puedan ser accedidos por cualquier software cargado. Esto es util en seteo de banderas de estado y modificacion de bits de control.
Cabe destacar que esta es una traduccion del pic18cxxxx