一条指令由两个主要部分构成,即操作码和操作数。操作码决定CPU的操作性质,而操作数规定以何种方式提供CPU进行操作所需的数据,即寻址方式。
计算机执行程序实际上是在不断寻找操作数并进行操作的过程。每种计算机在设计时已决定了它具有哪些寻址方式,寻址方式越多,计算机的灵活性越强,指令系统也就越复杂。
MCS-51单片机的指令系统提供了7种寻址方式,它们分别为立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址(或称基址寄存器加变址寄存器间接寻址)、相对寻址和位寻址。由于一条指令可能需提供多个数据,因此一条指令可能含多种寻址方式。
1.立即寻址
定义:在指令中直接给出操作数,即操作数包含在指令中的寻址方式。
例如:MOV A,#61H;(A)←61H,将8位数据61H(立即数)送入累加器A中。如图3-1所示。
图3-1 立即寻址过程示意图
特点:指令中直接含有所需的操作数,因此操作数是在程序存储器ROM中。该操作数是8位或16位,常常处在指令的第2或2、3字节的位置上。8位或16位立即数通常采用#data或#data16通式来表示。注意,立即数前面一定要加“#”标志,其目的是与直接寻址或位寻址方式中的直接地址或位地址(direct或bit)区别开来。
2.直接寻址
定义:由指令直接给出操作数所在的存储器地址的寻址方式。
例如:MOV A,60 H;(A)←(60 H),将内部RAM中地址为60 H单元里面的数据送入累加器A中。如图3-2所示。
图3-2 直接寻址过程示意图
特点:指令中含有操作数的地址。此地址表示为direct,该地址指出了参与操作的数据所在的字节单元地址,CPU可根据直接地址找到所需要的操作数。
寻址范围:
(1)片内RAM的低128个单元(00H~7FH)。
(2)特殊功能寄存器SFR(80H~FFH)。此寻址方式是访问SFR的唯一寻址方式。书写时除了可用单元地址的形式外,也可用寄存器符号的形式给出。例如:MOV A,90 H与MOV A,P1是等价的。
3.寄存器寻址
定义:操作数在指定的寄存器中的寻址方式。
例如:INC R5;(R5)←(R5)+1,把寄存器R5中的数据加1后再送回到R5中。如图3-3所示。
图3-3 寄存器寻址过程示意图
特点:由指令指出某一个寄存器的内容作为操作数。存放操作数的寄存器在指令代码中不占据单独的一个字节,而是嵌入(隐含)到操作码字节中。
寻址范围:
(1)4组通用工作寄存区共32个工作寄存器Rn(即R0~R7)。
(2)部分特殊功能寄存器SFR(A、B以及DPTR等)。
4.寄存器间接寻址(简称间址寻址)
定义:指令给出的寄存器中存放的是操作数据的单元地址,即操作数在RAM之中,而其单元地址就是由指令指定寄存器的值。
例如:MOV A,@R0;(A)←((R0)),将R0中的内容所表示的内部RAM地址单元中的内容送给A。如图将3-4所示,若R0中的内容为60H,把内部RAM中60H单元的内容(37H)送到A。
图3-4 寄存器间接寻址过程示意图
特点:指令给出的寄存器中存放的是操作数地址。寄存器间接寻址是一种二次寻找操作数地址的寻址方式,寄存器前边必须加前缀符号“@”。
寻址范围:内部RAM低128B(只能使用R0或R1作间址寄存器)、外部RAM(只能使用DPTR作间址寄存器)。对于外部低256单元RAM的访问,除可以使用DPTR外,还可以使用R0或R1作间址寄存器。
寻址范围:
(1)访问内部RAM低128个单元(00 H~7FH),只能采用Ri(即R0或R1)作间址寄存器;访问52子系列的内部RAM高128个单元(80H~FFH),只能采用这种寻址方式。
(2)对片外RAM的64K字节的间接寻址(0000 H~FFFH),采用DPTR作间址寄存器。例如:MOVX A,@DPTR。
(3)片外RAM的低256字节,高8位不变或高8位无连线(xx00 H~xx FFH),采用Ri作间址寄存器。例如:MOVX A,@Ri。
(4)堆栈区(只能设在内部RAM中)的堆栈操作指令PUSH(压栈)或POP(出栈)采用堆栈指针(SP)作间址寄存器。
5.变址寻址(也称基址寄存器加变址寄存器间址寻址或基址加变址寻址)
定义:以累加器A作为变址寄存器,以程序计数器PC或数据指针DPTR作为基址寄存器,这两者内容之和形成16位ROM地址的寻址方式。
例如:指令MOVC A,@A+DPTR;(A)←((A)+(DPTR))(www.xing528.com)
若A的原有内容为0FH,DPTR的内容为2400H,该指令执行的结果是把程序存储器240FH单元的内容传送给A,如图3-5所示。
图3-5 变址寻址过程示意图
特点:指令操作码中隐含作为基址寄存器用的DPTR或PC和作为变址用的累加器A。在CPU执行变址寻址指令时,先把基地址(DPTR或PC的内容)和地址偏移量(A的内容)相加,以形成操作数所在的16位ROM地址,再由操作数地址找到操作数,并完成相应的操作。
寻址范围:只能对程序存储器ROM进行寻址,主要用于查表性质的访问。
注意:累加器A中存放的操作数地址相对基地址的偏移量的范围为00H~FFH(无符号数)。MCS-51单片机共有以下3条变址寻址指令:
寻址范围及说明:
(1)该寻址方式是专门针对程序存储器ROM中表格数据的寻址方式,寻址范围可达到ROM 64KB空间(0000 H~FFFH)。
(2)该寻址方式中的累加器A里存放的操作数地址相对基地址的偏移量的范围为00 H~FFH(无符号数)。
(3)该寻址方式的指令只有两条查表指令和1条散转指令,这3条为:
6.相对寻址
定义:以程序计数器PC的当前值为基准(取出本条指令后的PC值),加上指令中给出的相对偏移量(rel)-128~+127个字节形成新的转移目标地址。
例如:JC 80H;若C=0则PC值加2,若进位C=1则(PC)←(PC)+2+80H,即以现行的PC为基地址加上80H(有符号数的-128)得到转向地址,如图3-6所示。
特点:此寻址方式是为实现程序的相对转移而设计的,其指令码中含有相对地址偏移量,能生成浮动代码。若发生了相对转移,则转移的目的地址=指令地址+指令字节数+偏移量。
寻址范围及说明:
图3-6 相对寻址过程示意图
(1)只能对程序存储器ROM中的指令进行寻址。
(2)相对地址偏移量(rel)是一个带符号的8位二进制补码数据,其取值范围为-128~+127(它以PC为中间的256个字节范围内)。
7.位寻址
定义:MCS-51设置了独立的位处理器,CPU进行位处理时,可对内部RAM和特殊功能寄存器的某些位寻址单元进行位寻址。位寻址方式的指令中给出的操作数是一个可单独寻址的位地址,这种寻址方式称为位寻址方式。
例如:MOV C,40H;(Cy)←(40H),即把位地址40H单元中的值送到进位位Cy。
特点:位寻址是直接寻址方式的一种,它是对位寻址区域中的某一位的地址进行操作。位地址可表示为bit。
寻址范围:
(1)内部RAM中的位寻址区,即位寻址区的低128B(00 H~7FH)。
(2)SFR中的可寻址位,即SFR字节地址能被8整除的位寻址区高128B(80H~FFH)。
在指令中位寻址的位地址bit可表示为4种形式,它们分别为:
1)直接使用位地址形式。
例如:MOV 05H,D7 H;(05 H)←(D7H),其中,位地址D7 H实际上就是Cy,05H是片内RAM中20H地址单元的第5位。
2)字节地址加位序号的形式。
例如:MOV 20H.5,D0H.7;(20H.5)←(D0H.7),其中,位地址D0H.7实际上就是Cy,20H.5是片内RAM中20H地址单元的第5位。
3)位的符号地址(位名称)的形式。对于部分特殊功能寄存器,其各位均有一个特定的名字,所以可以用它们的位名称来访问该位。
例如:ORL C,P;(Cy)←(Cy)∨(P),其中,Cy是PSW的第7位,P是PSW的第0位。
4)字节符号地址(字节名称)加位序号的形式。对于部分SFR(如PSW),还可以用其字节名称加位序号形式来访问某一位。
例如:CPL PSW.7;,其中,PSW.7表示该位是PSW的第7位,即Cy。
【例3-1】 指出下列指令原操作数的寻址方式。
MCS-51单片机指令系统的7种寻址方式可总结为表3-1。
表3-1 7种寻址方式及其寻址空间
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。