Hoy veremos cómo se programan las sumas en picasm.
Más adelante publicaré ejemplos prácticos, así que hay que mantenerse atento
.
En Assembler se trabaja siempre a nivel de registros generales de memoria y el registro de trabajo, conocido como W. No se puede realizar directamente operaciones entre 2 registros cualquiera, siempre hay que trabajar con el registro W como intemediario.
Pero teniendo sólo el registro w y los registros generales somos capaces de realizar operaciones aritméticas básicas, en este caso la suma es bastante simple de realizar.
En assembler siempre usamos directamente el set de instrucciones del pic, que para la serie 16fxxx son sólo 35. Entre estas instrucciones, las que se relacionan a sumas son:
- ADDLW
- ADDWF
- INCF
Ahora veremos a que se refiere cada una:
ADDLW
ADDLW suma una literal, es decir un número al registro de trabajo W, y el resultado queda guardado en el registro de trabajo.
Su sintaxis es:
ADDLW cantidad
Donde cantidad es la cantidad que queremos sumar al contenido del registro w, expresada ya sea en decimal, hexadecimal, o binario.
Ejemplo de uso:
movlw 0x04; movemos el numero 4 al registro w
addlw 0x06; sumamos el numero 6 al contenido de w
En pseudocódigo se expresaría así:
w = 4 w = w+6
El resultado es 10 (0x0A), y queda guardado en el registro W.
ADDWF
ADDWF suma el contenido del registro de trabajo W, con otro registro que debemos especificar, y el contenido se guarda ya sea en W o en el registro con el que hicimos la suma.
Su sintaxis es:
ADDWF registro,destino
Donde:
registro es la dirección del registro con el que queremos sumar el contenido del registro de trabajo W.
destino es el lugar donde va a quedar guardado el resultado, ya sea en w si se coloca un 0, o en el registro con el que se realiza la suma si se coloca un 1.
Ejemplos de uso:
En este ejemplo el resultado de la suma queda en el registro de trabajo w, y el contenido de la variable no cambia.
movlw 0x04; movemos el numero 4 al registro w
addwf variable,0; sumamos w con la variable,
En este otro ejemplo, el resultado de la suma se guarda en el registro (la variable) con el que trabajamos, y no en el registro w.
movlw 0x04; movemos el numero 4 al registro w addwf variable,1; sumamos w con la variable
En picasm (osea, el lenguaje assembler para pics), se tiene el convenio de llamar w al registro de trabajo, y una f significa un registro cualquiera.
En la mayoría de programas para programación de pics, como piklab o mplab, tenemos predefinidos unas constantes w=0 y f=1, lo que hace más fácil de entender y escribir código, ya que lo anterior se puede escribir como:
movlw 0x04; movemos el numero 4 al registro w
addwf variable,w; sumamos w con la variable,
; y el resultado queda en w, o bien:
addwf variable,f; para que el resultado quede en la variable.
Como se ve, se puede usar directamente una w, si el resultado lo queremos guardar en el registro w, o una f si el resultado lo queremos guardar en el registro, de esta forma es más fácil de entender el código y también es más fácil escribirlo.
Para entenderlo mejor el código anterior, traducido a pseudocódigo sería:
w = 4 w = w + variable # la suma queda en w, o bien: variable = w + variable # la suma queda en la variable.
INCF
Esta es la tercera forma de hacer sumas, en este caso sumamos 1 al registro de destino, como su nombre lo indica, es sólo un incremento. Esta instrucción tiene la ventaja de que también se puede seleccionar el destino del resultado, si en el registro w o en el registro f.
Ejemplo:
incf variable,w ;incrementa la variable, el resultado queda en w incf variable,f ;incrementa la variable, el resultado queda en la variable
En pseudocódigo:
w = variable + 1 # suma 1 a la variable, el resultado queda en w variable = variable + 1 # suma 1 a la variable, el resultado queda en la variable.

0 Respuestas a “Programando sumas en picasm”