程序存储器Z寄存器的间接寻址与相对寻址
发表:2023-08-29 12:06:25 阅读:147

在下面寻址方式的示意图中,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开始的指令。

 

程序存储器Z寄存器间接寻址与相对寻址

 

 

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开始的指令代码。

 

程序存储器Z寄存器间接寻址与相对寻址

 

 

电子街推荐您阅读:

 

带预减量与带位移的数据存储器的间接寻址

程序存储器取常量寻址的方式

带后增量的程序存储器取常量寻址

程序存储器写数据寻址与直接寻址