Variables; constantes y posiciones de memoria RAM.
En ASM es raro hablar de variables y/o constantes sino que se habla de posiciones de memoria. Esto es así, porque es el usuario (el que programa) como se van a usar las diferentes posiciones de memoria. El usuario puede tratar a una posición de memoria como constantes, y luego cambiarla; lo que haría perder el estado de constante para convertirse en una variable.
En JALv2, esto no pasa. Si el usuario nombra a una posición de memoria (o varias) como constante, así quedará por todo el programa. Si uno intenta modificar una constante, el compilador dará un error; pues para ello tenemos variables, en las que una posición de memoria puede cambiar todo el tiempo. Justamente una variable no garantiza que el valor de la memoria se mantenga por todo el programa. En ASM, es el usuario quien debe tomar la precaución de no modificar una posición de memoria que se necesita en algún momento.
Veamos como se nombran y trabajan las posiciones de memoria.
ASM
El MPASM, o sea, el compilador de assembler de Microchips, acepta dos formas básicas de nombrar posiciones de memoria RAM con nombres.
La primer manera es:
CBLOCK H'xx'
Lo que hace es renombrar las posiciones de memoria, en forma consecutiva a partir de lo especificado en H'xx'
Veamos un ejemplo.
CBLOCK H'20'
rotar
subir
bajar
ENDC
rotar es la posición de memoria 0x20
subir es la posición de memoria 0x21
bajar es la posición de memoria 0x22
ENDC indica que se terminó de renombrar posiciones de memoria. Su uso es obligatorio.
La segunda opción es:
nombre EQU H'xx'
A diferencia de la anterior, aquí solo se puede renombrar una posición de la RAM de una vez por vez; teniendo que repetir toda la misma sentencia por cada posición de memoria a renombrar. Por ejemplo
subir EQU H'30'
bajar EQU H'25'
rotar EQU H'50'
Como podrán observar, se puede asignar nombres en forma desordenada, y no como la anterior que es consecutiva.
Hay que prestar atención a que posición de memoria estamos nombrando, porque sin querer podemos estar trabajando sobre un registro sin darnos cuentas. El usuario tiene que asegurarse de que esté haciendo la reserva en la posición de memoria asignada para el usuario.
JALv2
Hay que tener en claro que es lo que se necesita, si los datos de la posición de memoria a usar sea momentánea o fija.
En el caso de que sea fija, la posición de memoria deberá ser llamada como constante, pero si es momentánea o varía su valor, se debe llamar variable.
Veamos un ejemplo de su uso.
var byte subir
var byte rotar
const byte bajar
Noten que aquí, no se asigna la dirección de la memoria. JALv2, es el que se encarga de asignar la dirección de la memoria a renombrar.
Como se han dado cuenta, var indica que subir/bajar es una variable; mientras con bajar es una constante.
Byte indica el tamaño de la posición de memoria a usar.
Algo que hay que tener en cuenta es que el tamaño de cada posición de la RAM de un PIC, es de un byte (8 bit), pero el compilador nos permite nombrar una variable más grande que un byte; por ejemplo del tamaño de un WORD. ¿Cómo hace esto? muy fácil, utiliza tantas posiciones de memoria consecutivas según lo especificado.
Por ejemplo VAR WORD TEMPORAL.
La variable temporal, va a ocupar dos posiciones de memoria; ya que word equivale a dos BYTE.