void call12delay12(void)
{
nop
}
For 20-23 counts, you would call it once plus adding 8 to 11 nops after the call (or a dummy jump to the next instruction which would eat up 6 cycles plus 2 to 5 nops -- so delaying 20 cycles would cost just four instructions plus the subroutine which is assumed to be used more than once.). For 24-31 counts, you would call itdelay12 twice, and add 0 to 70to 5 nops and/or a jump instruction as needed.
So to delay 20 cycles:
acall delayl12
jump next
next:
nop
nop