(1)片内RAM低128单元,这里只能使用R0,R1作为间址寄存器.其通用形式写为@Ri(i=0,1);
(2)片外RAM64KB;使用DPTR作为间址寄存器,书写形式为@DPTR.
(3)片外RAM低256单元.除可使用DPTR作为间址寄存器外还可以使用R0,R1作为间址寄存器.
(4)堆栈区,堆栈操作指令(PUSH和POP)也属于寄存器间接寻址,即使用SP(堆栈指针)作为间址寄存器的间接寻址方式.
5.变址寻址
变址寻址是以DPTR或者PC作为基础寄存器,累加器A作为变址寄存器,以两者内容相加形成的16位程序存储器地址作为操作数地址.例如指令:
MoVC A, @A DPTR ; A --- ((A)十(DPTR))
其功能是将DPTR和A的内容相加所得到的程序存储器地址单元的内存送累加器A.
变址寻址指令有如下特点:
(1)变址寻址方式只能对程序存储器进行寻址。
(2)变址寻址方式的指令只有三条:
MOVC A,@A DPTR;
MOVC A,@A PC;
JMP @A DPTR;
其中,前两条是程序存储器读指令,后一 条是无条件转移指令.
(3)尽管变址寻址方式复杂,但这三条指令都都是单字节指令.
(4)变址寻址力式可用于查表操作。
6 相对寻址:
相对寻址是指在指令中l给出的操作数为指令转移的偏移量。相对寻址方式是为实现程序的相对转移而设置的,为相对转移指令所采用:
在相对转移指令中,给出地址偏移量(在51单片I机系列的指令系统中,以“Rel"表示)把Pc的当前值加上偏移量就构成了程序转移目的地的地址。而Pc的当前值是指执行完转移指令后的PC值,即转移指令的Pc值加上它的字节数。因此.转移的目的地的地址可用如下公式表示:
目的地地址=转移指令所在地地址 转移指令字节数 Rel
在51单片l机指令系统中,有许多条相对转移指令。这些指令多数均为两字节指令,只有个别的是三字节指令。偏移量Rel是一个带符号的8位二进制补码数,所能表示数的范围是-128--- 127.因此,相对转移指令的所在地址为基点,向前最大可转移(127 转移指令字节数)个单元地址,向后最大可转移(128-转移指令字节数)个单元地址。
例如指令:
JC 70H
该指令表示若进位位c为o,则程序计数器Pc中的内容不变,不转移;若C为1,则以Pc中当前值为基地址,加上偏移量70H后所得结果作为该转移指令的目的地址。
7 位寻址
51单片机有位处理功能,可以对数据位进行操作,因此就有相应的位寻址方式.
位寻址的范围是:
(1)片内RAM中的位寻址区
片内RAM中的单元地址为20H—2FH,共16个单元128位.为位寻址区,位地址是00H~7FH。这128个位的寻址使用直接地址表示。例如指令:
MOV C,2BH;
该指令的功能是把位寻址区的2BH位状态送给位C。
(2)可位寻址的特殊功能寄存器位。
可位寻址的特殊功能寄存器有11个,对应寻址位共83位。对这些寻址位在指令中有以下4种表示方法。
·直接使用位地址表示法。
·单元地址加位的表示方法。例如,88H单元的位5,则表示为88H.5。
·特殊功能寄存器符号加位的表示方法。例如,psw寄存器的位5,可表示为psw.5。
·位名称表示方法,特殊功能寄存器中的一些寻址位是有名称的。例如,PSW寄存器位5为F0标志位,则可使用F0表示该位。
一个寻址位有多种表示方法,看起来似乎复杂,实际上将为程序设计带来方便。
位寻址时,操作数是二进制数的某一位,其地址出现在指令中,例如指令:
SETB bit ; (bit)---1