I've been working on a 16F1703 assembly language program, and it stopped working after I made made a small revision that moved 7 instructions to a different location. I couldn't see any reason for this, but reversed the change, and everything was fine again. After more experimentation, I determined that I could turn the problem on or off by inserting or removing 4 nop instructions near the place where I'd made the original revision. So, then I decided to move the nop's to different locations in the program. The result was that if the nop's were located anywhere before the revised code, then everything worked fine. If I moved them to any place after the revised code, or left them out completely, then the program failed.
This looks to me like some kind of page boundary problem, but the 16F1703 has only 2048 words of memory, which from my understanding, means that PCLATH should never have to be loaded with anything other than zero. The other memory boundary problem could be a table of computed goto's or calls. I do have some of these, but they all occur at the beginning of the program and none of them cross a 256 word boundary. The program length is 1613 words. The area of the program where the revision was made is around address 0x0200, which is suspicious, but I can't see anything amiss there.
Am I completely misunderstanding the memory page boundary principles, or are there other possible issues that could be affected by a slight shift of the program?