间接寻址也称为寄存器间接寻址,它的特点是以指令中给出的寄存器中的数据为地址,从该地址的单元取得操作数。在指令中给出的寄存器内容是操作数的地址,而不是操作数,从该地址中取出的数才是真正的操作数。能用于寄存器间接寻址的寄存器有R0、R1、DPTR、SP,其中SP仅用于堆栈操作。
为了区别寄存器寻址和寄存器间接寻址,在寄存器间接寻址方式中,应在寄存器名称前面加前缀标志@。@Ri(i=0,1)、@DPTR、@R0或@R1(用于访问片内RAM或片外RAM低8位地址范围为00H~FFH的单元)。
寄存器间接寻址的寻址范围如下:
1)访问内部RAM或外部数据存储器的低256B时,可采用R0或R1作为间址寄存器,通用形式为@Ri。
MOV A,@Ri ;(i=0,1)访问片内单元
MOVX A,@Ri ;(i=0,1)访问片外256B范围内的单元
2)访问片外数据存储器还可用数据指针DPTR作为间址寄存器,可对整个64KB外部数据存储器空间寻址。
MOV DPTR,#****H;
MOVX A,@DPTR;访问片外RAM全部64KB范围,地址范围为0000H~FFFFH(www.xing528.com)
3)执行PUSH和POP指令时,使用堆栈指针SP作间址寄存器来进行对栈区的间接寻址。
值得注意的是,对于片内RAM高端128B中的特殊功能寄存器SFR,不能使用间接寻址的方式访问,规定SFR只能用直接寻址方式访问,这样就可以把两者区别开来。
MAIN:MOV A,#03H;A←03H
MOV DPTR,8000H;DPTR←8000H
MOVX @DPTR,A;(DPTR)←(A)
其中,第三条指令的目的操作数使用的是间接寻址方式,助记符MOVX表示指令的操作功能是“写片外RAM”,该MOVX @DPTR,A指令的执行过程如图3-5所示。
图3-5 间接寻址示意图
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。