- 单片机原理及应用(第2版)
- 陈桂友主编
- 1246字
- 2025-02-23 19:58:25
4.3 寻址方式
操作数是指令的重要组成部分,它指定了参与运算的数或数所在的单元地址,而如何得到这个地址就称为寻址方式。一般来说,寻址方式越多,计算机功能越强,灵活性越大。所以寻址方式对机器的性能有重大影响。8051单片机共有7种寻址方式,描述如下。
1.立即寻址
指令中的源操作数是立即数,这种寻址方式叫作立即寻址。立即数的类型如下。
数字:二进制(后缀为B)、十进制(不带后缀)、十六进制(后缀为H)。
字符:以单引号引起的字符,如‘K’。
立即数的字长可以是8位或16位。
例:MOV A,#61H;把十六进制的立即数61H送入累加器A中
该指令的执行过程如图4-1所示。

图4-1 MOV A,#61H指令执行示意图

2.直接寻址
直接寻址就是在指令中包含了操作数的地址,即在指令中直接包含了参加运算或传送的单元或位的地址。直接寻址可访问以下3种地址空间。
1)特殊功能寄存器SFR:直接寻址是唯一的访问形式。
2)内部数据RAM中的00H~7FH的128个字节单元。
3)位地址空间。
例:MOV A,60H;把60H单元的内容送入累加器A中
假设60H单元中的内容是89H,则执行指令后,A中的内容为89H。执行过程如图4-2所示。
3.寄存器寻址
指定某一可寻址的寄存器的内容为操作数,对寄存器ACC、B、DPTR和CY(进位标志,也是布尔处理机的累加器)寻址时,具体的寄存器已隐含在其操作码中。而对选定的8个工作寄存器R7~R0,则用指令操作码的低3位指明所用的寄存器。在应用中,可以先通过PSW中的RS1、RS0两个位来选择寄存器组,再用操作码中低3位来确定是组内哪一个寄存器,以达到寻址的目的。

图4-2 MOV A,60H指令执行示意图
例 INC R5;把寄存器R5的内容加1后再送回R5
该指令的执行过程如图4-3所示。

图4-3 INC R5指令执行示意图
4.寄存器间接寻址
指令指定某一寄存器的内容作为操作数地址。8051单片机中可用来间接寻址的寄存器有:选定工作寄存器区的R0、R1、堆栈指针SP或者16位的数据指针DPTR,使用时前面加@表示间接寻址。

该指令的执行过程如图4-4所示。

图4-4 MOV A,@R0指令执行示意图

5.变址寻址
由指令指定的偏移量寄存器和基址寄存器DP TR或P C相加所得结果作为操作数地址。

其中,A作为偏移量寄存器(称为变址寄存器),PC作为基址寄存器,A中内容为无符号数和PC相加,从而得到其真正的操作数地址。
6.相对寻址
该寻址方式主要用于相对跳转指令。把指令中给定的地址偏移量与本指令所在单元地址(即程序计数器PC中的内容)相加,得到真正的程序转移地址。与变址方式不同,该偏移量有正、负号,在该机器指令中必须以补码形式给出,所转移的范围为相对于当前PC值的-128~+127之间。

若CY=0,则PC值不变,若CY=1,则以现行的PC为基地址加上80H得到转向地址。
若转移指令放在1005H,取出操作码后PC指向1006H单元,取出偏移量后PC指向1007单元,所以计算偏移量时PC现行地址为1007H,是转移指令首地址加2了(有些指令如JB bit,rel则加3)。注意指令偏移量以补码给出,所以80H代表着-80H,补码运算后,就形成跳转地址0F87H。
该指令的执行过程如图4-5所示。

图4-5 JC 80H指令执行示意图
7.位寻址
支持位单元存取操作是8051单片机的一个主要特点。位操作指令能对位地址空间的每一位都可进行运算和传送操作。
