I would try and use one of the chip's timer modules to generate an interrupt that incremented a tick_count variable which you could use for getting the timing data. Preferably one with a decent 16 bit register like TIMER1.
To do this you would need to add initialisation to enable the timer, and the GIE global interrupt enable, INTCON register to name another register. You may also need to re-structure the code start address to be after the interrupt vector at address 0x04 and add a jump instruction to skip past the interrupt code if interrupts are not already being used.
From what you say you really wouldn't need to worry too much about the precise reload value of the timer as long as you slow it down enough that it gives you the max length of time period without overflowing your tick_count, but not too slow that it ticks less than your required 8 times a second.
You will probably need a 16 bit tick_count variable as 256 1/8ths of a sec is .......32
- edit acutally that might be ok, but i prefer overkilling it.. go for 50ms interrupts and 16bit counter
To program a time.. zero tick_count when the button press is detected. Save the count when it is released.
To replay the time, zero the tick_count at the start and compare against the saved value.
Really, all of what you need is in the PIC datasheet for the chip