Bueno,en assembler sabrás que cada instrucción se ejecuta en un ciclo de reloj excepto las instrucciones de salto que invierten dos ciclos.
Cuando hablamos de C todo depende del tipo de instrucción pues supongo que el compilador convierte estas instrucciones a código ensamblador y todo depende pues de estas instrucciones en sí mismas.Puedes probar a ver que cantidad de instrucciones assembler genera la sentencia delay_ms (pulsando en el botón C/ASM list) por ejemplo y así te haces una idea.
Saludos desde Málaga,España.