Iniciando con el tema, un poco de información... que en el caso de ensamblador es un
mundo de información.
Al momento de escribir este tema (13-01-2010) existen dos tipos de “ramas” o “series” dentro de la familia o gama de los PIC24:
- La 24F.- Opera en el rango de 2-->3.6 volts y trabajan hasta 16 MIPS (Millones de Instrucciones Por Segundo).
- La 24H.- Opera en el rango de 3-->3.6 volts y trabaja hasta 40 MIPS.
Existen muchas versiones de los PIC24F/H, muchos tipos de µicros, encapsulados y características (como cualquier otro µicro de Microchip). Esto no es importante para el tema, lo que es importante es que toda la gama utiliza el mismo tipo de instrucciones en ensamblador (como cualquier µicro de Microchip). De hecho, estas instrucciones son derivadas de la gama de los dsPICs PIC30F/33F……. pero ese es otro tema.
Para ejemplo se puede tomar cualquier µicro, pero se hará con el PIC24HJ32GP202. La GP significa que es de propósito general y los 32 indica la memoria del programa, 32 bytes Kilobinarios (
Ki).
El ancho de los canales de comunicación interna son de 16 bits. Esto significa que el formato para realizar operaciones es de 16 bits; operaciones aritméticas de 16 bits u 8 bits serán realizadas en una sola instrucción. Las operaciones de más de 16 bits se pueden realizar, pero requieren mayor número de instrucciones (normalmente dos….. al parecer).
Las instrucciones para la familia PIC24F/H son 71 (según la hoja de datos del PIC24HJ32GP202), de las cuales la mayoría requiere 24 bits (3 bytes) para ser codificadas. Esto contrasta con las arquitecturas de la gama base (12F683) de 12 bits, los de gama media de 14 bits (16F887) y los de gama alta de 16 bits (18F4450). Los manuales definen
“instruction word” a un valor de codificación para las instrucciones donde pueden ser utilizadas para direccionar y/o procesar información dentro de la arquitectura del microprocesador (para mayor información sobre esto lean el libro de
Morris Mano sobre arquitectura de computadoras,
Computation Structures del MIT, o
The Elements of Computing Systems: Building a Modern Computer from First Principles del MIT); para la familia de 16 bits, la arquitectura interna para esta tarea es de 24 bits. Dos tipos de instrucciones requieren dos
“instruction words” (6 bytes) para ser codificadas.
Se observa en la siguiente figura que el registro para instrucciones contiene la instrucción a decodificar, la que está en ejecución. La unidad aritmética lógica (
ALU) es toda la lógica combinacional que produce las diferentes operaciones aritméticas y lógicas. La entrada izquierda del ALU proviene de un banco de 16 registros
“trabajadores”, los famosos registros W de la Microchip (o de la arquitectura Harvard).
Dichos registros cuentan con los nombres de W
0-W
15y son de 16 bits. La parte derecha del ALU se encuentra conectada al
X-data bus, lo que significa que esta variable u operando puede ser de fuentes diferentes, siendo las más comunes la memoria de datos o un registro W. Observar que la salida del ALU se encuentra conectada también al
X-data bus, y de nuevo, siendo lo más común un registro W o la memoria de datos.
Figura 1.- Arquitectura interna del PIC24HJ32GP202
Al estar hablando de memorias y otros dispositivos inmersos en el µicro, será conveniente establecer cómo se encuentra la organización de la memoria, tanto para el programa como para las variables y los registros propios del µicro en cuestión.
Como ya se señaló, la arquitectura interna es
Harvard. El contador del programa (PC) es un registro de 23 bits que proporciona la dirección a la cual “apuntará” dentro del programa, de esta manera la instrucción es ejecutada según el valor del contador del programa.
La siguiente figura muestra cómo está compuesto el contador del programa del µicro.
Figura 2.- El contador del programa (PC)
Se observa que son 32 bits, de los cuales 23 son para el contador del programa, algo que resulta más sencillo (por lo menos para uno) es tratarlos como registros de 32 bits, con una palabra más significativa y uno menos significativo (MSW y LSW), como se contempla en cualquier µicro que tenga el TIMER1 en la gama media: TMR1H y TMR1L. De la palabra más significativa suponer que el Byte Más Significativo de la Palabra Más Significativa está siempre en ceros….. “BYTE FANTASMA” como lo llama Microchip. De esta manera se puede accesar en palabras (16 bits), y el contador del programa “apunta” siempre al principio de cada palabra de instrucción, o a la Palabra Menos Significativa.
En otras palabras, y se espera sean más claras que en lo antes estipulado: el bit menos significativo del PC siempre es cero, y que los 22 bits más significativos del contador del programa contienen la dirección de una
“instruction word” (recordar que son los 23 bits) de los posibles 4Mi localidades (2
22 = 4 Mi).
Entonces la pregunta se presenta: Si el µicro es de 32 Ki………. ¿habrá problema para no direccionar? La teoría señala que no, pero en la práctica (por lo menos para este µicro) no se debería tener problemas.
Posiblemente sea algo enredoso, y lo es, por lo menos para uno. Después de varias leídas es como mejor pude acomodarlo en la cabeza: en lugar de truncar a 3 bytes, moverlo a 4 y suponer ceros en el más significativo. Lo anterior porque no se está acostumbrado a manejar bytes impares. A menos que alguien me corrija, nunca he visto en Microchip arquitectura con Bytes impares.
Obervar que en la figura 2 las palabras “impares” se encuentran a la izquierda y las “pares” a la derecha. Esto será importante porque después se deberá tomar en cuenta cuando se direccione a bytes, porque deben quedar acomodados de tal manera que se puedan llamar sin problemas después.
Edición#1 13-01-2010 10:16 PM
¡Qué poquita información!
Debo señalar que no se le metió mucho tiempo de investigación pero esto, esto es realmente poco. El ensamblador de estos µicros, en conjunto con la arquitectura es algo a lo que no estoy acostumbrado. Leo por ejemplo la guía de ensamblador y me direcciona a las 10 páginas a otra, una de C...... y dicha de C a las cuatro páginas me manda a otra
Lo anterior me hace sentir algo así:
Aquí:
BTFSS cabeza, aprendizaje
GOTO Aquí
Por fin salí de allá:
BTFSS cabeza, aprendizaje
GOTO Por fin salí de allá
algo parecido.
Edición #2 13-01-2010 10:24 PM
Las imágenes se ven chicas, ¿algún tamaño que recomienden?
Espero tener más información para el Domingo, el ensamblador se complica con los direccionamentos.