首页 理论教育 单片机指令系统特点及存储范围

单片机指令系统特点及存储范围

时间:2023-10-22 理论教育 版权反馈
【摘要】:指令是单片机用于控制其各功能部件完成某一操作的指示和命令。MCS-51系列单片机指令系统有111条指令,其特色为位操作指令丰富,面向工业控制。从指令执行时间长短划分1)单机器周期指令(64条)。2)双机器周期指令(45条)。在MCS-51系列单片机中,操作数的存放范围较宽,可以放在片内ROM/RAM中,也可以放在片外ROM/RAM以及SFR中。2)分散在片内RAM的高1

单片机指令系统特点及存储范围

指令是单片机用于控制其各功能部件完成某一操作的指示和命令。是供用户使用的单片机的软件资源。

指令系统是单片机具有的指令的集合,不同的单片机具有不同的指令系统,在单片机芯片设计时决定。指令系统在很大程度上决定了单片机处理问题的能力及使用的方便性。MCS-51系列单片机指令系统有111条指令,其特色为位操作指令丰富,面向工业控制。

1.指令的格式

要让单片机完成一定的任务,就得给单片机以指令,而单片机只能识别二进制机器码,如前面的74H、03H、24H等,所以指令的第一种格式就是数字的形式。但这种形式实在是太难记了,于是有另一种格式,助记符格式,如MOV A,#03H,这样就好记了。这两种格式之间的关系不难理解,本质上它们完全等价,只是形式不一样而已。助记符格式经过汇编可以得到机器码格式。

MCS-51系列单片机指令格式,即指令的表示形式如下:

<操作码>[操作数]

操作码——规定了指令所能完成的功能,进行什么操作。指令中唯一不能缺少的部分。

操作数——指出了指令的操作对象。可以是一个具体的数据,也可以指出取得数据的单元地址或符号地址等。在一条指令中可能有多个操作数,也可能没有操作数,操作数与操作数之间用逗号分开。如:

1)“MOV A,#03H”在该指令中,MOV是操作码,它表示该指令可以完成数据传送操作。A与03H是操作数,其中A是目标操作数,03H是源操作数。

2)“NOP”这是一条空操作指令,没有操作数,只有操作码。

2.指令的分类

MCS-51系列单片机共有111条指令。

(1)按照指令长度划分

1)单字节指令49条。这类指令只有一个字节,操作码和操作数的信息都包含在其中,指令中一般只包括工作寄存器或特殊功能寄存器。在写入程序存储器ROM时,用1个字节单元存放。如:

978-7-111-46831-8-Chapter02-49.jpg

2)双字节指令45条。这类指令包含两个字节,第一个字节为操作码,第二个字节为操作数,在写入程序存储器ROM时必须用两个连续的字节单元存放。如:

MOV A,#data;立即数送累加器。机器码为74 data H=01110100 data B。

978-7-111-46831-8-Chapter02-50.jpg

MOV A,direct;直接地址中的内容送累加器。机器码为E5 direct H=11100101 direct B。

978-7-111-46831-8-Chapter02-51.jpg

3)三字节指令17条。这类指令包含三个字节,第一个字节为操作码,操作数占两个字节,在写入程序存储器ROM时必须用三个连续的字节单元存放。如:

MOV direct,#data;立即数送直接地址中。机器码为75 direct data H

978-7-111-46831-8-Chapter02-52.jpg

通常,指令的字节数越少,所占存储单元越少,指令的执行速度越快。因此用户在编制程序时,应尽可能选用字节数少的指令。

(2)从指令执行时间长短划分

1)单机器周期指令(64条)。

2)双机器周期指令(45条)。

3)四机器周期指令(2条),即乘法和除法指令。

若系统时钟频率为12MHz,大多数指令的执行时间仅需要1μs,执行时间最长的指令也仅需要4μs。

(3)按指令的功能划分,MCS-51系列单片机的指令可分为以下5类。

1)数据传送类指令(28条)。

2)算术运算类指令(24条)。

3)逻辑运算与移位类指令(25条)。

4)控制转移类指令(17条)。

5)位操作类指令(17条)。

3.寻址方式

在计算机中寻找操作数的方法称为寻址方式,其实质就是如何获得操作数或操作数的单元地址的问题。计算机执行程序的过程就是不断寻找操作数(在片内或片外存储器中)并对该数进行操作的过程。

在介绍MCS-51系列单片机提供的七种寻址方式中,常用到以下符号。

1)Rn(n=0~7):当前寄存器组的8个工作寄存器R0~R7,由PSW中的RS1、RS0决定当前具体使用哪一组。

2)Ri(i=0或1):当前工作寄存器组中的可用于间接寻址的两个寄存器R0、R1。

3)#data:8位立即数,8位出现在指令中直接参与操作的操作数。

4)#datal6:16位立即数。

5)direct:片内RAM的8位单元地址,寻址范围256个单元。可以是片内RAM的低128单元地址,也可以是片内RAM高128单元地址中特殊功能寄存器的单元地址或符号地址。

6)addrll:11位目的地址。只限用于ACALL与AJMP指令中。目的地址必须放在与下一条指令起始地址同一个2KB程序存储器地址空间中。

7)addr16:16位目的地址。只限用于LCALL与LJMP指令中,目的地址可以是64KB范围内。

8)rel:相对转移指令中的偏移量,为8位补码数。

9)bit:片内RAM和SFR中的位地址。

10)ACC:累加器A的直接地址形式。

11)@:间接寻址中工作寄存器的前缀符号。

12)(X):某单元的内容。

13)@:寄存器间接寻址前缀。

14)$:当前指令的地址。

15)Pi:MCS-51系列单片机的I/O接口,i=1~3。

在MCS-51系列单片机中,操作数的存放范围较宽,可以放在片内ROM/RAM中,也可以放在片外ROM/RAM以及SFR中。按源操作数存放位置可分七种寻址方式。

(1)寄存器寻址 这类指令所需操作数放在内部某工作寄存器Rn(R0~R7)或部分SFR(如A、B、DPTR)中,为单字节指令,存放操作数据的寄存器在机器码中不单独占一个字节,而是内含在操作码字节中。机器码内含有该操作数的工作寄存器地址,即操作数在寄存器中。例如:

978-7-111-46831-8-Chapter02-53.jpg

指令中指明了寄存器R0,就可以从中取出操作数。

注意:寄存器寻址的主要寻址范围是工作寄存器R0~R7,共有4组32个,在使用中,只能使用当前寄存器组(通过PSW中的RS1、RS0设置)。

(2)直接寻址 在指令中给出操作数所在的单元地址,不是操作数本身,以direct表示。例如:

设指令执行前A=20H,(30H)=56H

MOV A,30H ;把片内RAM中30H单元的数据56H传送给累加器A。

(直接寻址示意图如图2-19所示。)

978-7-111-46831-8-Chapter02-54.jpg

图2-19 直接寻址示意图

a)指令执行前 b)指令执行后

指令中对30H的寻址即为直接寻址。该类指令为双字节或三字节。

直接寻址方式的寻址范围只限定在片内RAM。

1)片内RAM的低128B,且在指令中以直接地址形式出现。

2)分散在片内RAM的高128B中的特殊功能寄存器(SFR)。这些特殊功能寄存器既可以以单元地址形式给出,也可以是寄存器符号形式。如:

MOV A,35H

MOV 30H,P1(www.xing528.com)

MOV 3AH,90H

MOV SP,#33H

上面指令中的35H、30H、P1、90H、SP均是直接寻址方式。顺便指出,直接寻址方式是访问特殊功能寄存器的唯一方式。

(3)立即寻址 操作数直接放在指令的第二字节或第三字节中,以#data表示,其中data为立即数,可用二进制、十六进制十进制等表示,指令为双或三字节。例如:

MOV A,#30H ;将十六进制立即数30传送到累加器A中。

MOV A,#30D ;将十进制立即数30传送到累加器A中。

MOV A,#00110000B ;将二进制立即数传送到累加器A中。

注意:“#”是direct地址和data数区别的标志。

在MCS-51系列单片机的指令系统中,除8位立即数外,还有一条16位立即寻址指令,即:

MOV DPTR,#data16

其功能是把16位立即数传送到数据指针DPTR中,例如:MOV DPTR,#2000H。

(4)寄存器间接寻址 操作数的地址放在指令中给出的寄存器Ri或DPTR中,以@Ri(只有R0或R1)或@DPTR表示,其中@是寄存器间接寻址区别于寄存器寻址的标志,单字节指令。例如:

设指令执行前R0=30H,(30H)=76H,A=3AH

MOV A,@R0 ;以R0寄存器内容30H为地址,将该地址单元内的操作数传送给累加器A。

其寻址方式如图2-20所示。

978-7-111-46831-8-Chapter02-55.jpg

图2-20 寄存器间址寻址方式示意图

a)执行前 b)执行后

注意:

1)DPTR作16位数据指针,寻址64KB片外RAM空间。

MOVX A,@DPTR ;A←(DPTR)

2)Ri作8位数据指针,寻址片内RAM低128B(00H~7FH)、片外RAM256B(0000H~00FFH)空间。

MOV A,@Ri ;A←(Ri)←(片内RAM单元)

MOVX A,@Ri ;A←(Ri)←(片外RAM单元)

例如:片内RAM的50H单元的内容是20H,片外RAM的50H单元的内容是7FH,2050H单元的内容是10H,指令的执行情况如下。

MOV R1,#50H ;R1←50H

MOV A,@R1 ;A←(R1)←(片内50H),A=20H

MOVX A,@R1 ;A←(R1)←(片外50H),A=7FH

MOV DPTR,#2050H ;DPTR←2050H

MOVX A,@DPTR ;A←(DPTR)←(片外2050H),A=10H

(5)变址寻址 操作数放在以DPTR或PC作为基址寄存器,以累加器A作为变址寄存器,并以两者内容相加形成的16位地址的ROM单元中,即它是专门针对程序存储器的寻址方式,寻址范围64KB,为单字节。

例如:设指令执行前A=30H,DPTR=2000H,片外ROM(2030H)=0FH,执行

MOVC A,@A+DPTR ;A←(A+DPTR)=(片外2030H),A=0FH。

其寻址方式示意图如图2-21所示。

978-7-111-46831-8-Chapter02-56.jpg

图2-21 变址寻址方式示意图

a)指令执行前 b)指令执行后

使用变址寻址方式的指令只有以下3条:

MOVC A,@A+DPTR

MOVC A,@A+PC

JMP @A+DPTR

(6)位寻址 操作数为片内RAM的位寻址区及某些SFR寄存器的某一位,即指令中给出的操作数是一个可单独寻址的位地址。

如:MOV C,7FH ;Cy←(7FH)

MOV C,ACC.7 ;Cy←ACC.7

指令中Cy、7FH与ACC.7均是位地址,分别表示把7FH位、累加器最高位的状态(0或1)传送到Cy中。

应注意以下问题:

1)位寻址的寻址范围是片内RAM低128B单元中位寻址区(20H~2FH)的128位(位地址为00H~7FH);片内RAM高128B中11个可位寻址的SFR中的位地址见表2-2。

2)可位寻址的位的表示方式如下。

①直接使用位地址。

例如:MOV C,7FH ;将片内RAM的2FH单元最高位的状态送进位标志位。

MOV C,0D5H ;将PSW的位5(位地址D5H)的状态送进位标志位。

②单元地址加位序号的形式。

MOV C,2FH.7 ;将片内RAM的2FH单元最高位(位地址2FH)的状态送进位标志位。

MOV C,0D0H.5 ;将PSW(单元地址0D0H)的位5(位地址D5H)的状态送进位标志位。

③位名称表示形式。

例如:MOV C,F0 ;将PSW的位5(位地址D5H、位名称F0)的状态送进位标志位。

④特殊功能寄存器名加位序号的形式。

例如:MOV C,PSW.5 ;将PSW的位5的状态送进位标志位。

位寻址的表示形式比较灵活,给程序设计带来较大的方便。

(7)相对寻址 前面的寻址方式主要是寻找操作数的,而相对寻址是专门为实现程序转移设置的,在相对转移指令中使用,机器码中含相对当前PC值(即该指令执行后的PC值)的偏移量rel。指令执行时,将PC当前值加上偏移量rel构成程序转移的目标地址。即:

目的地址=转移指令所在的起始地址+转移指令的字节数+rel例如2000H SJPM rel;978-7-111-46831-8-Chapter02-57.jpg

SJMP rel为双字节指令,该指令执行后PC当前值为2002H,在2002H的基础上加上rel,就得到下一条要执行指令的PC当前值。

偏移量rel是一个带符号的8位二进制补码数,其取值范围是:-128~+127。因此相对转移的范围是以PC当前值为基准的256个字节的范围,即以PC当前值为基准向前最大可转移127个单元,向后最大可转移128个单元。

对MCS-51系列单片机的寻址方式作如下小结:

1)在有两个操作数的指令中,前边的为目标操作数,后边的为源操作数。前面所讲的寻址方式都是针对源操作数,实际上目标操作数也有寻址问题。也就是指令中的源操作数可以使用七种寻址方式中的任何一种。但是目标操作数只能是寄存器寻址、寄存器间接寻址、直接寻址、位寻址这四种寻址方式中的任何一种。

例如:MOV 30H,#30H

其源操作数是立即寻址方式,而目标操作数是直接寻址方式。

2)对片外ROM只能使用变址寻址方式;对于片外RAM只能使用寄存器间接寻址方式。

3)相对寻址只用来解决程序转移的问题。

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

我要反馈