Actually, it's just 1/8000000 of a second for 8mhz =)
To calculate timing precisely without using timers, you have to write using assembly. for example in avr:
ldi R17, 16 ' takes 1 clock cycle
b: dec r17 ' takes 1 clock cycle
brne b ' takes 2 cycle to branch, and 1 otherwise
so whole program will take 1+1+16*2+1=35 cycles, or 4.37 usec