Vamos a ver si soy capaz de arrojar un poco de luz a este tema.
Programadores obtusos hacen programas ineficientes. Con esto quiero decir que un programador poco ducho en la materia es capaz de hacer un mal programa en ASM, tan ineficiente como uno en C o en BASIC generado por un compilador.
Programadores hábiles hacen programas eficientes en ASM, en C o en BASIC. Pero y esto es lo importante, un programa en C o en BASIC nunca será mas eficiente que un programa eficiente escrito en ASM.
¿Por qué es esto así? Porque nada puede ser mas eficiente que algo eficiente escrito en ASM. En ASM hay una relación directa entre lo que se escribe, mnemónicos, y lo que se genera, código máquina, para enviárselo al PIC. El compilador traduce un instrucción de alto nivel a una secuencia de mnemónicos ASM que hacen lo mismo. Es lo que podemos ver en CCS C, por ejemplo, al editar el fichero .lst que genera, que no es mas que la traducción de C a ASM que ha realizado el compilador.
Por eso todo lo más que pueden hacer los compiladores en C ó BASIC es hacer lo mismo, pero no más.
Ten en cuenta que el compilador nos va a ofrecer, nos va a ayudar con el conocimiento de ASM que tenían los creadores del compilador. Y que si este conocimiento, este saber hacer, de los creadores del compilador es eficiente generará código máquina eficiente en su compilado.
Luego el tema no es si en ASM o en C salen los programas mas cortos o rápidos o eficientes, sino si tú programando en ASM eres capaz de hacer programas mas cortos o rápidos o eficientes de lo que el creador del compilador es capaz de compilar un código tuyo en C haciendo lo mismo.
Puedes ver que este párrafo anterior que te he puesto es un párrafo trampa: Tú en ASM luchando por conseguir brevedad, rapidez o eficiencia contra la unión de ti mismo escribiendo en C y la capacidad para traducir tu C a ASM de los creadores del compilador.
Por todo esto a tu pregunta se puede contestar con una sola palabra: Depende.
Depende de la brevedad, rapidez o eficiencia de quien escribe el programa en ASM, depende de la brevedad, rapidez o eficiencia de quien escribe el programa en C y depende de la brevedad, rapidez o eficiencia de quien traduce tu programa en C a ASM.
Cuando se dice que el C de los PIC18 está diseñado para ser eficiente, quieren decir que los creadores de los PIC18 y del C18, que trabajan ambos para Microchip, se han puesto de acuerdo para implementar instrucciones ASM que acerquen, que sean de fácil traducción entre ellas y el correspondiente código en C.
Fíjate en la frase que viene en el Datasheet del PIC18F4550 sobre el C: "C compiler optimized architecture with optional extended instruction set", El compilador de lenguaje C optimiza la arquitectura con el conjunto opcional de instrucciones ampliada. Esto quiere decir que tiene instrucciones ASM que "se parecen" mas a instrucciones C por lo que la conversión es mas directa.
O sea lo que te estoy diciendo, pero nada que ver con que pueda ser mejor que hacerlo "a pelo" en ASM usando tú esas mismas instrucciones.
No se si habré sabido explicarme.