Convertir Asm en CCS

buenos dias, alguien me puede ayudar a convertir, asm xc16 a asm CCS, o simplemente a ccs
gracias.

este es en XC16:
asm("MOV _Multiplier, W4");
asm("MOV _P1TPER, W5");
asm("MOV #_Result, W0");
asm("MPY W4*W5, A");
asm("SAC A, [W0]");

en CCS seria:
#asm

#endasm
el problema es no se como
 
No conozco exactamente el ensablador de ese modelo pero parece que es una simple multiplicación de entero de ocho bits ¿No?
 
Código:
asm("MOV _Multiplier, W4");  // Carga el registro W4 con el valor almacenado en _Multiplier
asm("MOV _P1TPER, W5");      // Carga el registro W4 con el valor almacenado en _P1TPER
asm("MOV #_Result, W0");     // Carga el registro W0 con la dirección _Result
asm("MPY W4*W5, A");         // Multiplica W4*W5 y guarda el resultado en el registro A
asm("SAC A, [W0]");          // Guarda el registro A en la dirección apuntada por W0

En efecto, es una multiplicación, pero como las instrucciones no tienen modificador de tamaño, entonces se toma 16 bits por defecto. Así que es una multiplicación de dos valores de 16 bits (en realidad, 17), cuyo resultado (32 bits, en realidad, 34) se guarda primero en el registro A, del que luego se extraen los bits más altos (A[31:16]) para guardarlos en la dirección apuntada por W0.

En C lo podrías poner así:
C:
resultado = _Multiplier * _P1TPER;
declarando antes las variables como enteros de 16 bits.
 
Atrás
Arriba