The ASM routine assumes that the time variables are in BANK0.

If the program has grown in size, there may be more variables which push i_hour, i_minu, i_sec and i_tic into a different Bank.

Adding BANK0 modifiers to the variable declarations may help, but it's a long shot without knowing the rest of the code.
If the variables are still in BANK0, I see no reason why it shouldn't work with a 16F877A.
Code:
i_hour var BYTE BANK0
i_minu var BYTE BANK0
i_sec  var BYTE BANK0
i_tic  var BYTE BANK0