- 单片机原理及应用(第2版)
- 陈桂友主编
- 1246字
- 2021-09-17 17:33:21
4.3 寻址方式
操作数是指令的重要组成部分,它指定了参与运算的数或数所在的单元地址,而如何得到这个地址就称为寻址方式。一般来说,寻址方式越多,计算机功能越强,灵活性越大。所以寻址方式对机器的性能有重大影响。8051单片机共有7种寻址方式,描述如下。
1.立即寻址
指令中的源操作数是立即数,这种寻址方式叫作立即寻址。立即数的类型如下。
数字:二进制(后缀为B)、十进制(不带后缀)、十六进制(后缀为H)。
字符:以单引号引起的字符,如‘K’。
立即数的字长可以是8位或16位。
例:MOV A,#61H;把十六进制的立即数61H送入累加器A中
该指令的执行过程如图4-1所示。
![](https://epubservercos.yuewen.com/3CCCBD/21122066408961206/epubprivate/OEBPS/Images/59_02.jpg?sign=1739003693-aatXxsY9Vsh2kRrXq2k3qY9iCsgSYhwC-0-e8e0af6593e5b11a083deae136f7d37b)
图4-1 MOV A,#61H指令执行示意图
![](https://epubservercos.yuewen.com/3CCCBD/21122066408961206/epubprivate/OEBPS/Images/59_03.jpg?sign=1739003693-EgfFt3NyCbz25Hs18K45e0FQcWhOeCaY-0-f412845c8260ecc3d5f50c9aacfce9fe)
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位来确定是组内哪一个寄存器,以达到寻址的目的。
![](https://epubservercos.yuewen.com/3CCCBD/21122066408961206/epubprivate/OEBPS/Images/60_01.jpg?sign=1739003693-SZbqJ8lGUmxDwnOr1Qq3JkpePXodTuBA-0-b3bc40ad4ddd2f6152eb8de0f8acb02a)
图4-2 MOV A,60H指令执行示意图
例 INC R5;把寄存器R5的内容加1后再送回R5
该指令的执行过程如图4-3所示。
![](https://epubservercos.yuewen.com/3CCCBD/21122066408961206/epubprivate/OEBPS/Images/60_02.jpg?sign=1739003693-dPUtDPxEXIu4k7A3hXLZRSKZGTiD7WHS-0-7a811871721662a35269eca4de24ab74)
图4-3 INC R5指令执行示意图
4.寄存器间接寻址
指令指定某一寄存器的内容作为操作数地址。8051单片机中可用来间接寻址的寄存器有:选定工作寄存器区的R0、R1、堆栈指针SP或者16位的数据指针DPTR,使用时前面加@表示间接寻址。
![](https://epubservercos.yuewen.com/3CCCBD/21122066408961206/epubprivate/OEBPS/Images/60_03.jpg?sign=1739003693-QHpx6i4FW7XjELcNILVMr5EwXdmFk2XA-0-6212c4f11d62ffb3a11d8adc7a4f3d3e)
该指令的执行过程如图4-4所示。
![](https://epubservercos.yuewen.com/3CCCBD/21122066408961206/epubprivate/OEBPS/Images/60_04.jpg?sign=1739003693-7ACNo2tQ8FrpoxogcyfihIZZy8zcgc5X-0-e19ec81c8f450f3b2539736158f6c0dd)
图4-4 MOV A,@R0指令执行示意图
![](https://epubservercos.yuewen.com/3CCCBD/21122066408961206/epubprivate/OEBPS/Images/60_05.jpg?sign=1739003693-me2R5fV4zQDpPS5cm1IQUqxsFlyletls-0-4aa967cca06a150c0e0895c1a7eb5d89)
5.变址寻址
由指令指定的偏移量寄存器和基址寄存器DP TR或P C相加所得结果作为操作数地址。
![](https://epubservercos.yuewen.com/3CCCBD/21122066408961206/epubprivate/OEBPS/Images/61_01.jpg?sign=1739003693-W5MWe4cMUR4naaFSR2cYOJtfAZZzf2qn-0-e1db4f80b9e5244aa535014fe083845e)
其中,A作为偏移量寄存器(称为变址寄存器),PC作为基址寄存器,A中内容为无符号数和PC相加,从而得到其真正的操作数地址。
6.相对寻址
该寻址方式主要用于相对跳转指令。把指令中给定的地址偏移量与本指令所在单元地址(即程序计数器PC中的内容)相加,得到真正的程序转移地址。与变址方式不同,该偏移量有正、负号,在该机器指令中必须以补码形式给出,所转移的范围为相对于当前PC值的-128~+127之间。
![](https://epubservercos.yuewen.com/3CCCBD/21122066408961206/epubprivate/OEBPS/Images/61_02.jpg?sign=1739003693-x0sTRHl02RBXMQpQGcRB2caafemvsQcy-0-84dbd0fd84d2a9526461cd0b01fb9932)
若CY=0,则PC值不变,若CY=1,则以现行的PC为基地址加上80H得到转向地址。
若转移指令放在1005H,取出操作码后PC指向1006H单元,取出偏移量后PC指向1007单元,所以计算偏移量时PC现行地址为1007H,是转移指令首地址加2了(有些指令如JB bit,rel则加3)。注意指令偏移量以补码给出,所以80H代表着-80H,补码运算后,就形成跳转地址0F87H。
该指令的执行过程如图4-5所示。
![](https://epubservercos.yuewen.com/3CCCBD/21122066408961206/epubprivate/OEBPS/Images/61_03.jpg?sign=1739003693-WSqfjv1Wf1sdY2YlhyGBZ8gFmZxx4NuU-0-0456b415919ba200541d6d7705d90500)
图4-5 JC 80H指令执行示意图
7.位寻址
支持位单元存取操作是8051单片机的一个主要特点。位操作指令能对位地址空间的每一位都可进行运算和传送操作。
![](https://epubservercos.yuewen.com/3CCCBD/21122066408961206/epubprivate/OEBPS/Images/61_04.jpg?sign=1739003693-shD8g38PpKNuNVopzaUozO5WMJCScm3d-0-2cedf01cdf7b4aab65aa4187a8054984)