在下面寻址方式的示意图中,OP表示操作码;RA-MEND表示RAM空间的最高位地址;FLASHEND表示FLASH空间的最高位地址。
1)程序存储器Z寄存器间接寻址
程序存储器Z寄存器间接寻址方式是把Z寄存器的内容传送到程序计数器PC中.即Z寄存器存放的是下一步要执行的指令代码,然后执行从程序计数器PC开始的指令代码。此寻址方式用于LIMP和ICALL指令。IJ MP和ICALL指令的寻址方式相同.但ICALL指令除了把操作数给PC外,还把返回地址压人堆栈且堆栈指针寄存器SP内容减2(如图3—1 2所示)。
例:IJMP
操作:PC←Z。把Z寄存器的内容送到程序计数器PC、.P,P Z寄存器保存的是下一步要执行的指令代码的地址。
ICALL
操作:STACK←PC+1.SP←SP-2,PC←Z。指令先将程序计数器PC、加2后压入堆栈.堆栈指针SP减2.然后执行从程序存储器$0100开始的指令。
2)程序存储器相对寻址
在程序存储器相对寻址方式中.在指令中包含一个相对偏移量κ(取值范围为-2048~2 047),指令执行时,首先将当前程序计数器PC值加1后再与偏移量κ相加.结果(P+1+κ)作为程序下条要执行指令的地址。此寻址方式用于RJ MP和RCALL指令。RJ MP和RCALL指令的寻址方式相同,但RCALL指令除了把操作数给PC外,还把返回地址压人堆栈且堆栈指针
寄存器SP内容减2(如图3—1 3所示)。
例:RJMP$0100
操作:PC←PC+1+$0100。若当前指令地址为$0200,即PC=$0200,则把PC+l+$0100的结果,即$030 1,送到程序计数器PC中,接下来执行程序存储器$0301开始的指令代码。
例:RCALL$0100
操作:STACK←PC+1,SP←SP-2,PC=PC+1+$0100,即先将程序计数器PC的当前值加1后压进堆栈,堆栈指针计数器SP的内容减2,然后把PC+1+$0100的结果,即$0301,送到程序计数器PC中,接下来执行程序存储器$0301开始的指令代码。
电子街推荐您阅读: