![单片机原理及应用:基于C51+Proteus仿真](https://wfqqreader-1252317822.image.myqcloud.com/cover/797/41309797/b_41309797.jpg)
2.1 寻址方式
所谓寻址方式,通常是指某一个CPU指令系统中规定的寻找操作数所在地址的方式,或者说通过什么方式找到操作数。寻址方式的方便与快捷是衡量CPU性能的一个重要方面,MCS-51单片机有七种寻找方式。
1.立即数寻址
立即寻址方式是操作数包括在指令字节中,指令操作码后面字节的内容就是操作数本身,其数值由程序员在编制程序时指定,以指令字节的形式存放在程序存储器中。立即数只能作为源操作数,不能当作目的操作数。
例如:
![](https://epubservercos.yuewen.com/5D072F/21511156108176706/epubprivate/OEBPS/Images/66_03.jpg?sign=1739296049-3pnd7AcCxNc5uImwAtFneym71yNlsbCj-0-8d01b45c771f1473935055cfb7497342)
立即寻址示意图如图2-1所示。
![](https://epubservercos.yuewen.com/5D072F/21511156108176706/epubprivate/OEBPS/Images/67_01.jpg?sign=1739296049-B1NARqwutjWCaFuec5AaKfb2CEhLBs4N-0-f89f98e0942a21a6577fa69333712397)
图2-1 立即寻址示意图
a)MOV A, #52H b)MOV DPTR, #5678H
2.直接寻址
在指令中含有操作数的直接地址,该地址指出了参与操作的数据所在的字节地址或位地址。
例如:
![](https://epubservercos.yuewen.com/5D072F/21511156108176706/epubprivate/OEBPS/Images/67_02.jpg?sign=1739296049-GlCZx7PMPguHNwvdfqDZOY4VBmU6p7T9-0-dc286025a69c33e9cb63bb227df99985)
在MCS-51单片机指令系统中,直接寻址方式可以访问2种存储空间,如图2-2所示:
![](https://epubservercos.yuewen.com/5D072F/21511156108176706/epubprivate/OEBPS/Images/67_03.jpg?sign=1739296049-rfrr0PtdxZgHCvhbdHhPkgvc2jtS7mEH-0-070c0d227f72790d48c5f00079caf9e5)
图2-2 直接寻址方式示意图
1)内部数据存储器的低128B单元(00H~7FH)
2)80H~FFH中的(SFR)特殊功能寄存器。
这里要注意,指令MOV A,#52H与MOV A,52H的区别,后者表示把片内RAM字节地址为52H单元的内容传送到累加器(A)中。
3.寄存器寻址
由指令指出某一个寄存器中的内容作为操作数,这种寻址方式称为寄存器寻址。寄存器一般指累加器A和工作寄存器R0~R7。例如:
![](https://epubservercos.yuewen.com/5D072F/21511156108176706/epubprivate/OEBPS/Images/67_04.jpg?sign=1739296049-DrGf6ugufLfTxm2ep1HhzdmIzrcC0M8H-0-727d9574b9fa7d258e6b57dc78f6ccd3)
![](https://epubservercos.yuewen.com/5D072F/21511156108176706/epubprivate/OEBPS/Images/68_01.jpg?sign=1739296049-B3rAwdK5asdOnT1VyOJK52waicfJmomo-0-6dc223662809d70c49a4f26702304119)
寄存器寻址方式的寻址范围包括:
● 寄存器寻址的主要对象是通用寄存器,共有4组32个通用寄存器,但寄存器寻址只能使用当前寄存器组。因此指令中的寄存器名称只能是R0~R7。在使用本指令前,需通过对PSW中RS1、RS0位的状态进行设置,来选择当前寄存器组。
● 部分专用寄存器。累加器A、寄存器B以及数据指针DPTR等。
4.寄存器间接寻址方式
由指令指出某一个寄存器的内容作为操作数,这种寻址方式称为寄存器间接寻址。这里要注意,在寄存器间接寻址方式中,存放在寄存器中的内容不是操作数,而是操作数所在的存储器单元地址。
寄存器间接寻址只能使用寄存器R0或R1作为地址指针,来寻址内部RAM(00H~FFH)中的数据。寄存器间接寻址也适用于访问外部RAM,可使用R0、R1或DPTR作为地址指针。寄存器间接寻址用符号“@”表示。例如:
![](https://epubservercos.yuewen.com/5D072F/21511156108176706/epubprivate/OEBPS/Images/68_02.jpg?sign=1739296049-Th3uWbBM1VED00Rl85jqxcoWkFpFYAIr-0-48e8c9897008d69d2b447f8ac52803b2)
指令功能是把R0或R1所指出的内部RAM地址60H单元中的内容送累加器A。假定(60H)=3BH,则指令的功能是将3BH这个数送到累加器A。
例如:
![](https://epubservercos.yuewen.com/5D072F/21511156108176706/epubprivate/OEBPS/Images/68_03.jpg?sign=1739296049-1suI59v5Nn44uS4LkVrnTpQmo6qfJ4jX-0-90584df1b6aa03dac938d3c4881d90ba)
指令功能是把DPTR寄存器所指的那个外部数据存储器(RAM)的内容传送给A,假设(3456H)=99H,指令运行后(A)=99H。
同样,指令MOVX @DPTR,A;MOV @R1,A;也都属于寄存器间接寻址方式。寄存器间接寻址方式的示意图如图2-3所示。
![](https://epubservercos.yuewen.com/5D072F/21511156108176706/epubprivate/OEBPS/Images/68_04.jpg?sign=1739296049-UUxtyutRm4q7heh3wYmAsSUIbP1UNEku-0-6844a16aa2db0843c881722b1d7484da)
图2-3 寄存器间接寻址方式示意图
5.位寻址
MCS-51单片机中设有独立的位处理器。位操作指令能对内部RAM中的位寻址区(20H~2FH)和某些有位地址的特殊功能寄存器进行位操作。也就是说可对位地址空间的每个位进行位状态传送、状态控制和逻辑运算操作。例如:
![](https://epubservercos.yuewen.com/5D072F/21511156108176706/epubprivate/OEBPS/Images/69_01.jpg?sign=1739296049-0ZZaz8IbvWFOl8UKuRRZtVVJe9ycRtI0-0-0801e1f6c73c11ab3415d5516c52ed0a)
6.基址寄存器加变址寄存器间接寻址
这种寻址方式用于访问程序存储器中的数据表格,它以基址寄存器(DPTR或PC)的内容为基本地址,加上变址寄存器A的内容形成16位的地址,访问程序存储器中的数据表格。例如:
![](https://epubservercos.yuewen.com/5D072F/21511156108176706/epubprivate/OEBPS/Images/69_02.jpg?sign=1739296049-Zhi8qAXjzHmqWsDIrHQnN8J7lwh19tdS-0-36e699826184bb32275dbfc3f05ec521)
这种寻址方式的示意图如图2-4所示。
![](https://epubservercos.yuewen.com/5D072F/21511156108176706/epubprivate/OEBPS/Images/69_03.jpg?sign=1739296049-nS19iKGLWEBjSaNDZcKzpcriyshP1C07-0-17b1ebefa90a5ba97b7ae15b4ea49415)
图2-4 变址寻址方式示意图
7.相对寻址
相对寻址以程序计数器(PC)的当前值作为基地址,与指令中给出的相对偏移量rel进行相加,把所得之和作为程序的转移地址。这种寻址方式用于相对转移指令中,指令中的相对偏移量是一个8位带符号数,用补码表示。该值可正可负,转移的范围为-128~+127。使用中应注意rel的范围不要超出。例如:
![](https://epubservercos.yuewen.com/5D072F/21511156108176706/epubprivate/OEBPS/Images/69_04.jpg?sign=1739296049-SsyYBeaRFC2cTPaL77YbF97Ba7tEFFua-0-ce016679a28b2a62efd4aa40729f6ea5)