lo que era MPLAB v8.x + C18 ya no se le da mas soporte desde microchip creo, e intentan justamente usar el MPLAB X y XC8.
Aca en el foro hay una persona que tambien uso XC8 y ademas incluyo algunos archivos .asm, por supuesto cada version de compilador tiene su forma de hacerlo.
Es la unica diferencia que vas a tener, ya que C es C igual en todos los compiladores, lo que cambia si decis que intentas juntar ASM y C es la forma. XC8 tiene un capitulo dedicado a eso, pero bueno, nadie puede decirte que elegir. Y si ya encontraste como hacerlo con C18 mejor aun.
El por que se arregla de esa forma? hacer eso que estas haciendo implica que la multiplicacion se haga en 16bits, es decir el resultado se haga en 16 bits
Conta1 = (int) 5*127
Ejemplo, 5 ocupa un registro de 8bits, 127 ocupa otro registro de 8bits, si multiplicas asi nomas uno asume ( al menos un buen compilador, deberia) asumir que si se va a poner en un registro de 16bits deberia ser justamente la multiplicacion de 16bits.
Pero normalmente hace 5 * 127 ( en 8 bits) y luego esos 8 bits los guarda en el registro de 16bits
distinto es si tenes una variable de 16 bits
int a=5;
Conta1 = a*127
Aca como la variable es de 16 bits y una constante de 8bits, la multiplicacion se va a hacer de 16bits y luego guardarse. lo que hiciste arriba con el (int) es decirle que ese 5 en realidad ocupa 16bits (0x0005) y no 8 ( 0x05 )
Siendo valores constantes el compilador (vuelvo a repetir) DEBERIA, de hacerlo libremente sin tener que definir eso. e incluso hacerlo en la PC y no con el PIC
En fin es un error del compilador.
Lo que podes hacer si no te gusta tanto el C, es generar las ecuaciones y ver el ASM generado, pero aun asi no se acerca a lo bueno del ASM. No tengo idea de cuanto le habra tomado hacer ese calculo en C, con constante obviamente que no deberia haber calculo, pero con una variable si. Por ejemplo en ASM, cualquiera de esas hubiera bastado con 2 rotaciones de 16bits mas 1 suma de 16 bits.