在程序内存中跨越页面边界



我需要程序内存位置汇编代码和页面交叉的帮助。

ORG  0x500;
BCF pclath,4;
BSF pclath,3;
CALL sub1_p1;
.
.
.
ORG 0x900;
sub1 :
 :
RETURN

如果我想在程序内存中跨越页面边界。例如第0页到第3页。我应该写什么代码?

PCLATH寄存器的第3位和第4位决定页码!

例子:

BCF  PCLATH,4 ;Select page0
BCF  PCLATH,3 ;Select page0
CALL xpage0
...
BCF  PCLATH,4 ;Select page 1
BSF  PCLATH,3 ;Select page 1
CALL xpage1
...
BSF  PCLATH,4 ;Select page2
BCF  PCLATH,3 ;Select page2
CALL xpage2
...
BSF  PCLATH,4 ;Select page 3
BSF  PCLATH,3 ;Select page 3
CALL xpage3
...

较新的PIC16xxx mcu使用特殊指令MOVLP

的例子:

MOVLP high HiProc2
CALL  HiProc2
...  

最新更新