Creo que todo depende del compilador. Y como pase eso a ASM, y tambien las intrucciones en ASM que posea el PIC.
Por ejemplo supongamos el caso mas basico donde supongo que no supera los 255 y trabajo con un PIC16f887
El programa en ASM que haría seria algo asi:
CLRF registroX ( 1 ciclo )
Loop:
DECFSZ registroX,0 ( 1 ciclo si no llega a 0, y 2 ciclos cuando llega )
Goto Loop ( 2 ciclos )
No recuerdo mucho del ASM pero sino me equivoco el DECFSZ solo se puede usar para registros y no W.
Cuanto tarda esto ?
4 ciclos la primer pasada
3 ciclos las demas excepto la ultima
2 ciclos la ultima
1 ciclo es 4/fXTAL, es sacar cuentas.
Ahora si el compilador lo hace de la misma forma no lo se. Y si fuera mas de 256 es poner otro DECFSZ afuera con otra variable.
Con todo esto dicho, como dije depende del valor que pongas en tu condición, de como el compilador crea ese for (como lo pasa a ASM ), y los delays genelramente estan hechos con for() + algunos asm("NOP"); pero alguien se tomo el tiempo de calcularlos xD.
Igual si queres saber cuanto tiempo equivale el mismo podes crear el for(), poner un par de breakpoints y simularlo con el Stop Watch ver los ciclos y si tenes configurado el XTAL el tiempo tambien te va a dar correctamente.