您的位置: 网站首页 > 电子与嵌入式 > 单片机原理与应用 > 第3章 MCS-51单片机指令系统 > 【3.2 寻 址 方 式】

3.2 寻 址 方 式

 

指令的一个重要组成部分是操作数,它指明了参与操作的数据或数据所在的地址,也就是指出了操作数的来源,这就是对操作数进行寻址。对于相对转移指令,操作数则指出下一条要执行的指令的地址,这就是对指令地址寻址。寻址方式就是寻找操作数地址或指令地址的方式。形成操作数地址或指令地址的过程,称为寻址过程。

不同的微处理器,其内部硬件结构不相同,依附于硬件结构的指令系统也不相同,但寻址方式是相似的。所以,掌握好寻址方式既有助于加深对指令系统的理解,也有助于学习其他机型。

一般来说,寻址方式越多,编程的灵活性就越大,而且直接影响指令的长度和执行的时间,因此,寻址方式是反映计算机功能的一个重要指标。

MCS-51共有7种寻址方式:立即寻址、直接寻址、寄存器寻址、寄存器间接寻址,变址寻址、相对寻址和位寻址。寻址方式与相应的存储器的空间及寄存器见表3-2。下面将分别介绍各寻址方式。

3-2  寻址方式与相应的存储器的空间及寄存器

   

寻址方式

相应的存储器空间及寄存器

1

寄存器寻址

R0R7ACCCY位寻址DPTR

2

直接寻址

内部RAM0B128BSFR

续上表

   

寻址方式

相应的存储器空间及寄存器

3

寄存器间接寻址

内部RAM@RiSP)、外部RAM@Ri@DPTR

4

立即寻址

程序存储器

5

基址+变址寄存器的间接寻址

程序存储器@DPTR+A@PC+A

6

相对寻址

PC的当前值为基地址+rel=有效地址。转移范围:PC当前值的-128+127

7

位寻址

对内部RAMSFR中有定义的单元进行位寻址

 

3.2.1  寄存器寻址方式

寄存器寻址方式的寻址空间如下。

·    R0R7,由RS1RS0两位的值选定工作寄存器区。

·    ABCYDPTR

寄存器寻址是指由指令选定的寄存器中的内容作为操作数的寻址方式,由指令的操作码字节的最低3位所寻址的是工作寄存器R0R7。对累加器A、寄存器B、数据指针DPTR、位处理累加器CY等,也以寄存器方式寻址。例如,以下指令:

MOV A,R0;

该指令的功能是将工作寄存器R0的内容送入累加器A中,其中的操作数AR0都是寄存器寻址。其执行过程如图3-1所示

3-1  寄存器寻址方式的执行过程

3.2.2  寄存器间接寻址

寄存器间接寻址的寻址空间如下。

·    内部RAM@R0@RlSP)。

·    外部数据存储器(@R0@R1DPTR)。

指令所选中的寄存器的内容是实际操作数的地址(而不是操作数本身),这种寻址方式称为寄存器间接寻址。用R0R1寄存器进行间接寻址之前,需要有一个确定的寄存器间接寻址区,并且各个寄存器均是有操作数地址的。

寄存器间接寻址是指将指令指定的寄存器的内容作为操作数所在的地址,对该地址单元中的内容进行操作的寻址方式。MCS-51规定,使用R0R1作为间接寻址寄存器,对于MCS-51系列单片机可寻址内部RAM中地址从00H7FH128个单元;对于8052子系列单片机则为256个单元,而且8052子系列单片机的高128BRAM只能使用寄存器间接寻址方式访问。另外,数据指针DPTR也可作为间接寻址寄存器,寻址外部数据存储器的64KB空间。例如,以下指令:

MOV A,@R1;

该指令的功能是将当前工作区以R1中的内容作为地址的存储单元中的数据送到累加器A中,其源操作数采用寄存器间接寻址方式,以R1作为地址指针。假设R1中的内容为30H,则该指令是将地址为30H存储单元中的内容45H送到累加器A中,指令执行后累加器A中内容为45H。其执行过程如图3-2所示。

3-2  寄存器间接寻址方式的执行过程

3.2.3  立即寻址

寻址空间:程序存储器。

立即寻址是指指令的操作数以字节的形式存放在程序存储器中,即操作码后紧跟着一个称为立即数的操作数,这是在编程时由用户给定存放在程序存储器中的常数。

立即寻址指令中的操作数即为立即数,其特征为数前加符号“#”。指令中有8位立即数“#data”和16位立即数“#datal6”。由于立即数是一个常数,不是物理空间,所以立即数只能作为源操作数,不能作为目的操作数。例如,以下指令:

MOV A,#67H;

该指令是数据传送指令,它的功能是将立即数67H送入累加器A中,67H为立即数。指令执行过程如图3-3所示。

3-3  立即寻址方式的执行过程

3.2.4  直接寻址

直接寻址的寻址空间如下。

·    内部RAM的低128B

·    特殊功能寄存器SFR直接寻址是访问SFR的唯一方式

直接寻址是指操作码后面的一个字节是实际操作数地址。例如,以下指令:

MOV A,80H;

该指令是数据传送指令,80H是内部RAM地址,功能是把80H的内容12H送入累加器A中。指令执行过程如图3-4所示。

3-4  指令“MOV A,80H”的执行过程

3.2.5  基址寄存器+变址寄存器的间接寻址

寻址空间:程序存储器(@A+DPTR,A+PC)。

基址寄存器+变址寄存器的间接寻址是MCS-51系列单片机指令系统所特有的一种寻址方式,它以DPTRPC作为基址寄存器,A作为变址寄存器存放8位无符号数,两者内容之和所组成的16位程序存储器地址作为操作数地址。这种寻址方式是单字节的,用于读出程序存储器中数据表格的常数。例如,以下指令:

MOVC A,@A+DPTR;

该指令的功能是从程序存储器某地址单元中取一个字节数据送入累加器A中。假设累加器A的内容为30HDPTR的内容为2100H,执行该指令时把程序存储器中地址为2100H30H=2130H的单元中的数据送入累加器A中。该指令的执行过程如图3-5所示。

3-5  基址加变址寄存器间接寻址方式的执行过程

3.2.6  相对寻址

寻址空间:程序存储器。

相对寻址用于程序控制,利用指令修正PC指针的方式实现转移,即以程序计数器PC的内容为基址,加上指令中给出的偏移量rel,所得结果为转移目标地址。其中,偏移量rel8位符号补码数,范围为-128+127。故可知,转移范围应当在当前PC-128+127之间的程序存储器。相对寻址一般为双字节或3字节。例如,以下指令:

JC 70H

若此指令所在地址为2000HC=1,由于指令本身占用两个单元,所以取出此指令后PC内容为2000H+2=2002H,程序将转移到2002H+70H=2072H的单元去执行。该指令的执行过程如图3-6所示。

3-6  相对寻址方式的执行过程

3.2.7  位寻址

位寻址方式的寻址空间如下。

·    片内RAM20H,,2FH

·    SFR中有定义的能被8整除的字节地址。

位寻址是指以访问位的方式对内部RAM、特殊功能寄存器SFR中位地址空间进行访问。