Y si, el tipo es cabeza dura nomas !!! Pero hasta que no me cierran las cosas, ando a los golpes !!!
Finalmente pude comprerder el concepto del significado de una declaracion de "RAM locations"...
Ahora lo que creo, es que Yo, te volvi loco a vos BRUNO
...juro que no fue mi intencion !!!
Entiendo lo que decis que hace el MPSAM, de reemplazar el nombre de un registro declarado, por una posicion de RAM...pero mi duda se generaba, cuando asociaba al registro, con los valores que pudiera cargarle (sino no servirian para nada, es decir serian como constantes...)
Hice varios ensayos con los simuladores de MPLAB, y tanto en las versiones viejas (5.0) como en las mas recientes (7.50) obtuve los resultados, que esperaban y cierran con mis conceptos...
Para poder interpretar todo esto, tome tu propio ejemplo y ensaye sobre el...ahi aparecio mi respuesta...Los registros se pueden efectivamente, y como Yo creia, cargar con cualquier valor (eso les da algun motivo de servicio, sino, como digo antes, no sirven para nada...serian constantes !!!
)
Ej: sobre lo que yo mismo expuse...
MOVLW ((4 / 2) * (2 / 2 + 4))
MOVWF AUXA ;aca el reg AUXA toma el valor de .10 (lo que parece esperable y/o correcto...)
Entonces es valido decir, que el registro AUXA, que se encuentra mapeado en la posicion 0x0E (hex) de la memoria RAM (porque yo asi lo declare...) tiene cargado el valor 10 (decimal)...
La respuesta me la dio el REGISTRO DE TRABAJO, es gracias a el, que yo puedo cargar a los registros con los valores que desee...y fijate que sino hubiera prestado atencion debida a tu ejemplo, hubiera seguido con la misma confusion...ya que me decis, que:
MOVLW ((4 / 2) * (2 / 2 + 4)) ;esto es para probar que hacen esos benditos operandos
MOVWF AUXA ;aca el reg AUXA toma el valor de .10 (lo que parece esperable y/o correcto...)
BCF STATUS,C
MOVF AUXA,W
ADDLW 1 + 2
MOVWF AUXA ;es decir el valor de posicion 0E mas 3 = 17
Y esto esta mal, BRUNO...porque cuando moves el AUXA al W (este vale 10), independientemente de que se halle en posicion 0X0E de la RAM (eso es otra cuestion)...entonces ahora W = 10 +1+2 osea 13 y no 17...que era lo que queria...(corregime si me equivoco, por favor !!!)
A mi me daba 17, porque yo hacia:
MOVLW ((4 / 2) * (2 / 2 + 4))
MOVWF AUXA ;aca el reg AUXA toma el valor de .10 (lo que parece esperable y/o correcto...)
BCF STATUS,C
MOVLW (AUXA + 1 + 2) ;aca como cargo literales, W si apunta a 0X0E + 1 + 2 = 17
MOVWF AUXA ;es decir el valor de posicion 0E mas 3 = 17
Porque no pasé el valor previo de AUXA (= 10) a W...entonces ahi si hace lo que decis, reemplaza a AUXA por su posicion de memoria RAM (0X0E) y le suma 3 = 17...
No se si lo explique bien, pero finalmente lo entiendo...a mi me estaba faltando la instruccion MOVLF para solucionarme todo...ahi lo hubiera entendido de primera...voy a mandar una queja a Microchip, esto es una barbaridad !!!
Te agradezco el valiosisimo aporte, ya que gracias a el, pude salir de esta maraña...lo que no quiere decir que me desdiga, inmediatamente, ya que todo esto, lo digo a riesgo de equivocarme...pero me cierra bastante mejor de esta forma...Espero que el resto de los foristas, puedan sacar esto en claro...estoy como siempre receptivo a comentarios o acotaciones y/o correciones que deban hacerse, para no confundir a nadie !!!
Tambien me parecio interesante poder usar la posicion address del registro, como valor conocido para otras necesidades de programa...
POR EJ:
movlw auxa+auxa
movwf auxa
Aca cargo a AUXA con 0X0E+0x0E = 0x1C
O BIEN:
movlw porta+portb
movwf auxa
Aca lo cargue con 0x05+0x06 = 0x0B
En fin...asi con todas las variables que quiera y conozca...voy a probar con los BITS de c/registro a ver que pasa...despues te cuento !!!
SALUDOS y gracias por leer !!!
______________________________
"Justo a mi, me toco ser Yo" QUINO