You are using the wrong tool for the job. The 16F877 is a pain for stuff like that. There is no good way to transfer a block of data, as there is only one indirect addressing register.
If you use a PIC18F4420, you can access 196 registers directly, without having to change banks. It is just about pin compatible with the 16F877
If you want to transfer a block of data, you can write:-
Code:
lfsr fsr0, source
lfsr fsr1, destination
movlw data_size
movwf count
transfer_loop
movff postinc0, postinc1
decfsz count, f
bra transfer_loop