hola cuca, creo q con respecto a tu pregunta original, lo q hace el compilador es lo correcto,
me parece q la confusion puede venir del hecho de como maneja y/o explican en el manual el tema de la memoria
este es un chip de 16bits , con lo cual cuando hablan de un ciclo, siempre son 2 bytes, y la instruccion MOVFF ocupa dos ciclos que son eso 2 words o sea 4 bytes, el A9e, a9f,aa0 y aa1
luego viene el nop q es un ciclo=2 bytes, q son aa2 y aa3
y luego nuevamente el MOVFF q ocupa otros 4 bytes.
lo q pasa q nadie hace incapie en el "word aligment" q aqui es automatico, pero si te fijas bien veras q nunca una instruccion comienza en un byte impar, pq en realidad lo q tiene por ejemplo un f452 son 16K de flash (y no 32k) solo q son de una word o sea 2 bytes y le es imposible dividirlos.
reviso permanentemente q es lo q genera el CCS porque creo q es una manera de aprender un poco (los q hicieron este compilador seguro sabian un cachitin).
de cualquier manera tengo problemas con el "disasembler listing" del ccs ya q no representa todas las instrucciones y aun no le encuentro la manera de ver todo completo y ordenado.
Suerte