Viendo el ensamblador es más claro.
Pero no creo que CCS esté ignorando el int8, en mi opinión es correcto.
Por ejemplo, si yo pongo...
float *valor;
Lo que CCS va a hacer es una variable apuntador de 9 bits (2 bits banco + 7 bits dirección) que indique el comienzo de una variable float normal, por lo que el apuntador tendrá un tamaño de 16bits (necesita 9 pero habrá que usar dos bytes para llenarlo) y no de 4 bytes.
En estas condiciones me atrevo a decir que para todos los siguientes apuntadores...
int8 *ent1;
int16 *ent2;
int32 *ent3;
float *valor1;
char *valor2;
... CCS siempre apartará 2 bytes ya que la máxima dirección ram direccionable para ellos siempre es de 9 bits.
Pero ahora que nos ponemos quisquillosos... ¿qué pasará con un apuntador a int1? Bueno, nada... porque la gente de CCS todavía no se anima a implementarlos
Ya existen los arreglos de int1, pero no se vale usarlos apuntados.
int1 superbits[20]; //Válido
int1 *apunta; //Inválido
Por cierto, con tu ejemplo en ensamblador resolví otra duda que ya tenía hace tiempo... ¿qué endian usa CCS? Se ve que el 0x0100 se guarda en little endian. Primero el 0x00 y después el 0x01.