理论教育 单片机原理及接口技术:寄存器寻址方式及范围

单片机原理及接口技术:寄存器寻址方式及范围

时间:2023-11-05 理论教育 版权反馈
【摘要】:采用寄存器寻址方式的指令都是一个字节的指令,指令中以符号名称来表示寄存器。寄存器寻址方式的寻址范围包括:1)4组通用工作寄存器区共32个工作寄存器。对52子系列的高128B RAM,必须采用寄存器间接寻址方式访问。

单片机原理及接口技术:寄存器寻址方式及范围

指令系统中,操作数是一个重要的组成部分,它指出了参加运算的数或数所在的单元地址:而如何找到这个操作数就称为寻址方式。寻址方式越多,则计算机的功能越强,灵活性亦越大,但指令系统也就越复杂。MCS-51系列单片机提供了7种寻址方式,下面分别介绍。

1.立即寻址方式

所谓立即寻址就是操作数在指令中直接给出。通常把出现在指令中的操作数称为立即数,为了与直接寻址指令中的直接地址相区别,需要在立即数前面加前缀标志“#”。例如指令:

MOV A,#40H ;A←40H

其中40 H就是立即数,该指令的功能是把40 H这个立即数送到累加器A中。40 H这个常数是指令代码的一部分,就是放在程序存储器内的常数。

2.直接寻址方式

在指令中直接给出操作数地址,这就是直接寻址方式。此时,指令的操作数直接以单元地址的形式给出。例如指令:

MOV A,40H ;A←(40H)

其中40 H就是表示直接地址,该指令功能是把内部RAM地址为40H单元中的内容66 H传送给累加器A,其操作示意图如图3-1所示。

图3-1 直接寻址示意图

直接寻址方式可访问以下存储空间:

1)内部RAM低128B单元,在指令中直接地址以单元地址的形式给出。

2)特殊功能寄存器。对于特殊功能寄存器,其直接地址还可以用特殊功能寄存器的符号名称来表示,例如MOV A,80H表示把P0口(地址为80H)的内容传送给累加器A,也可以写为:MOV A,P0,这两条指令是等价的。应注意,直接寻址是访问特殊功能寄存器的唯一方法。

3.寄存器寻址方式

寄存器寻址就是以寄存器的内容作为操作数,因此在指令的操作数位置上指定了寄存器就能得到操作数。采用寄存器寻址方式的指令都是一个字节的指令,指令中以符号名称来表示寄存器。例如:

MOV A,Rn ;A←(Rn),n=0~7

MOV B,A ;B←(A)

以上两条指令都是属于寄存器寻址。前一条指令是将Rn寄存器的内容传送到累加器A;后一条是把累加器A中的内容传送到B寄存器中。

由于寄存器在CPU内部,所以采用寄存器寻址可以获得较高的运算速度。寄存器寻址方式的寻址范围包括:

1)4组通用工作寄存器区共32个工作寄存器。但只能寻址当前工作寄存器区的8个工作寄存器,因此指令中的寄存器的名称只能是R0~R7。

2)部分特殊功能寄存器,例如累加器A、寄存器B以及数据指针DPTR等。

4.寄存器间接寻址方式

所谓寄存器间接寻址就是以寄存器中的内容作为RAM地址,该地址中的内容才是操作数。寄存器间接寻址需要在指令中指定某个寄存器,同时该寄存器以符号名称来表示,这时,这个寄存器被称为间址寄存器或间接地址指针。为了区别寄存器寻址和寄存器间接寻址,在寄存器名称前加“@”标志,用来表示寄存器间接寻址。

当访问内部RAM或者外部数据存储器的低256B时,只能采用R0或R1作为间址寄存器,例如指令:

MOV A,@Ri ;A←((Ri)),i=0、1

其操作示意图如图3-2所示。

图3-2 寄存器间接寻址示意图

这时R0寄存器的内容40 H是操作数地址,内部RAM的40H单元的内容65H才是操作数,并把该操作数传送到累加器A,结果为(A)=65H。若是寄存器寻址指令:

MOV A,R0

则执行结果为(A)=40H。对这两类指令的差别和用法,一定要区分清楚。间接寻址理解起来较为复杂,但在编程时是极为有用的一种寻址方式。(www.daowen.com)

MCS-5l系列单片机规定只能用寄存器R0、Rl、DPTR作为间接寻址的寄存器。间接寻址可以访问的存储器空间为内部RAM和外部RAM:

1)内部RAM的低128个单元采用R0、R1作为间址寄存器,通用形式为@Ri(i=0、1)。

2)外部RAM的寄存器间接寻址有两种形式:一是采用R0、R1作为间址寄存器,可寻址低256个单元;二是采用16位的DPTR作为间址寄存器,可寻址外部RAM的整个64KB地址空间,通用形式为@DPTR。

3)堆栈区:堆栈操作指令PUSH(进栈)和POP(出栈),使用堆栈指针寄存器SP作为间址寄存器来进行对堆栈区的间接寻址,只是这时指令不出现间址寄存器,使用隐含的间址寄存器SP而已。

对于52子系列的单片机,其内部RAM是256B,其高128B与特殊功能寄存器的地址是重叠的,两者由不同的寻址方式加以区分。对52子系列的高128B RAM,必须采用寄存器间接寻址方式访问。

5.基址寄存器加变址寄存器寻址方式

基址寄存器加变址寄存器寻址方式以DPTR或PC作为基址寄存器,以累加器A作为变址寄存器(存放地址偏移量),并以两者内容相加形成的16位地址作为操作数的地址,以达到访问数据表格的目的。这种寻址方式的指令只有3条:其中,前两条指令是读程序存储器指令,用于访问程序存储器中的数据表格,且都为一字节指令,最后一条是无条件转移指令,常用来实现散转程序,即实现多分支程序的转移,是1字节指令。

第一条指令的功能是将A的内容与DPTR的内容相加形成操作数的地址(即ROM的16位地址),把该地址中的内容送入累加器A中,如图3-3所示。

图3-3 基址加变址寻址方式示意图

第二条指令的功能是将A的内容与PC(程序计数器)的内容相加形成操作数的地址(ROM的16位地址),把该地址中的内容送入累加器A中。

第三条指令操作的结果是把累加器A的内容和数据指针DPTR的内容相加,送给PC,作为新的程序的入口地址。

6.相对寻址方式

相对寻址只在相对转移指令中使用,指令中给出的操作数是相对地址偏移量用“rel”表示。相对寻址就是将程序计数器PC的当前值与指令中给出的偏移量rel相加,其结果作为转移地址送入PC中。此种寻址方式的操作是修改PC的值,故可用来实现程序的分支转移。

这里PC当前值是指正在执行指令的下一条指令的地址,rel是带符号的8位二进制数,取值范围是-128~+127,故rel给出了相对于PC当前值的跳转范围。转移的目的地址可以用如下公式表示:

目的地址=转移指令地址+转移指令的字节数+rel

例如: SJMP 54 H

这是无条件相对转移指令,是双字节指令,在ROM中占用2字节,指令代码为80 H、54 H,其中80 H是该指令的操作码,54 H是偏移量。现假设此指令所在地址为2000H,执行此指令时,PC当前值为2000H+02H,则转移地址为2000H+02H+54H=2056H,故指令执行后,PC的值变为2056H,指令执行完后程序发生了转移。其寻址方式如图3-4所示。

7.位寻址方式

MCS-51系列单片机有位处理功能,可对寻址的位单独进行操作,相应的在指令系统中有一类位操作指令,它们可以采用位寻址方式。在指令的操作数位置上直接给出位地址,这种寻址方式被称为位寻址方式。例如:

图3-4 相对转移示意图

MOV C,30 H

该指令的功能是把位地址30H中的值(0或1)传送到位累加器Cy中。

8031单片机内部RAM有两个区域可以按位寻址:一个是位寻址区,即20 H~2FH单元的128位,另一个是字节地址能被8整数的特殊功能寄存器的相应位。

在MCS-51系列单片机中,位地址的表示可以采用以下几种方式。

1)直接使用位地址。对于20H~2FH共16个单元的128位,其位地址是00H~7FH,例如,20 H单元的0~7位的位地址为00 H~7FH。

2)用单元地址加位序号表示,如25 H.5表示25 H单元的D5位(位地址是2DH),而PSW中的D3可表示为D0H.3,这种表示方法可以避免查表或计算,比较方便。

3)用位名称表示。特殊功能寄存器中的可寻址位均有位名称,可以用位名称来表示该位,如可用RS0表示PSW中的D3即D0H.3位。

4)对特殊功能寄存器可直接用寄存器符号加位序号表示。如PSW中的D3又可表示为PSW.3。习惯上,对于特殊功能寄存器的可寻址位常使用位名称表示其位地址。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈