Buenas, tengo tiempo programando microcontroladores... Cuando era nuevo usaba muchas etiquetas para realizar saltos...
Cabe acotar que mi primer PIC y donde aprendí a programar fue el PIC18f4550... Sin embargo luego en un proyecto estuve trabajando con unos PIC16's, donde descubrí el interesante salto goto $+x, donde podia dar saltos hacia adelante y hacia atrás y me pareció excelente al ahorrarme el utilizar muchas etiquetas...
En estos dias volví nuevamente al 18F4550 y quise usar el mismo truco, y bueno mi primer error lo noté rápidamente al recordar que en los 18's las instrucciones avanzan de 2 en 2 y en algunas especiales inclusive el PC avanzan 4 espacios... así que sacar cuentas para un salto relativo no es tan cómodo y fue cuando recordé haber visto unas instrucciones que me parecieron inútiles en aquel entonces y son todos los BRANCH
Si leemos el manual del microcontrolador vemos que dice que la instrucción BRA n, dará como resultado PC = PC + 2 + 2n... perfecto!! justo lo que necesitaba, pero al intentar hacer un BRA 4, me manda es a la dirección literal 0x04 del programa. Estuve revisando y pues noté que por años muchos han usado esa instrucción para saltos literales como me ocurre a mí... pero pregunto yo, para eso no está ya el goto? y además, porque entonces miente el manual? habrá alguna forma de configurar el compilador para que funcione como aparece en el manual? o será que simplemente lo estoy interpretando mal? porque inclusive, mas extraño es cuando volví a revisar el manual para ver si es que estoy interpretándolo mal, es que a pesar de mostrar la ecuación del resultado como les estoy diciendo "PC = PC + 2 + 2n" el ejemplo que utilizan para la demostración del uso de esas instrucciones, si hacen saltos literales =S... Alguna ayuda???