1、3.1 3.1 指令系统的基本概念指令系统的基本概念 单片机所有指令的集合称为该单片机的指令系统,单片机所有指令的集合称为该单片机的指令系统,不同种类的单片机具有不同的指令系统,本书主要不同种类的单片机具有不同的指令系统,本书主要介绍目前最流行的介绍目前最流行的MCS-51单片机的指令系统及其应单片机的指令系统及其应用。用。3.1.1 3.1.1 指令的基本格式指令的基本格式 MCS-51单片机指令主要由标号、操作码、操作数和注释单片机指令主要由标号、操作码、操作数和注释组成。比如,组成。比如,LOOP:MOV R0,#20H ;将数据将数据20H送到寄存器送到寄存器R0标号标号操作码操作码
2、操作数操作数注释注释下面我们来了解一下各组成部分的功能特点。下面我们来了解一下各组成部分的功能特点。(1)LOOP(标号):指明该指令在(标号):指明该指令在ROM的起始存储地址。的起始存储地址。标号可有可无,一般起转移指令的标志作用。标号可有可无,一般起转移指令的标志作用。由不超过由不超过8位的数字和英文字母组成,第一字符必须为英位的数字和英文字母组成,第一字符必须为英文字母,同时,不能与指令系统中的规定字符和符号相冲突,文字母,同时,不能与指令系统中的规定字符和符号相冲突,如如R0、MOV等。等。后面必须跟冒号(后面必须跟冒号(:)。)。(2)MOV(操作码):指明执行什么性质和类型的操作
3、。(操作码):指明执行什么性质和类型的操作。不同的操作码具有不同的操作功能,比如不同的操作码具有不同的操作功能,比如MOV执行的是数执行的是数据传送的操作,而据传送的操作,而ADD执行的是加法的操作。执行的是加法的操作。(3)R0,#20H(操作数):指明操作数的本身或者是操作(操作数):指明操作数的本身或者是操作数所在的地址。数所在的地址。操作数分为目的操作数操作数分为目的操作数R0和源操作数(和源操作数(#20H)。源操作)。源操作数存放的是参加操作的原始数据或地址,目的操作数存放的数存放的是参加操作的原始数据或地址,目的操作数存放的是参加操作的另外一个原始数据或地址,操作结束后,结果是参
4、加操作的另外一个原始数据或地址,操作结束后,结果存放于目的操作数。存放于目的操作数。源操作数可以是数据(源操作数可以是数据(#20H),也可以是存放数据的地),也可以是存放数据的地址(址(20H)或寄存器()或寄存器(R0)。)。目的操作数只能是存放数据的地址或寄存器。目的操作数只能是存放数据的地址或寄存器。操作数个数可以是操作数个数可以是0个(如个(如NOP)、)、1个(如个(如INC A)、)、2个(如个(如MOV A,#40H)、也可以是)、也可以是3个(如个(如CJNE A,#40H,LOOP),各个操作数之间要用逗号(),各个操作数之间要用逗号(,)隔开。)隔开。(4)注释:指明该指
5、令或程序段的功能。)注释:指明该指令或程序段的功能。注释可有可无,但必要的程序注释有助于提高程序的可读注释可有可无,但必要的程序注释有助于提高程序的可读性,方便程序的修改。常常会发生这样的事,时间久了,自性,方便程序的修改。常常会发生这样的事,时间久了,自己写的程序自己也看不懂了,建议养成加注释的习惯。己写的程序自己也看不懂了,建议养成加注释的习惯。在注释前面必须加在注释前面必须加“;”。3.1.2 MCS-513.1.2 MCS-51指令系统中的常用符号说明指令系统中的常用符号说明在介绍指令前,先把指令中使用的一些代表符号作简单说明:在介绍指令前,先把指令中使用的一些代表符号作简单说明:Rn
6、当前选中的寄存器区中的当前选中的寄存器区中的8个工作寄存器个工作寄存器R0R7(n=07)。)。Ri当前选中的寄存器区中的当前选中的寄存器区中的2个工作寄存器个工作寄存器R0、R1(i=0、1)。)。direct8位的内部数据存储器单元中的地址。位的内部数据存储器单元中的地址。#data包含在指令中的包含在指令中的8位常数。位常数。#data16包含在指令中的包含在指令中的16位常数。位常数。addr1616位目的地址。位目的地址。addr1111位目的地址。位目的地址。rel8位带符号的偏移字节,简称偏移量,范围为位带符号的偏移字节,简称偏移量,范围为+127-128。DPTR数据指针,可用
7、作数据指针,可用作16位地址寄存器。位地址寄存器。bit内部内部RAM或专用寄存器中的直接寻址位。或专用寄存器中的直接寻址位。A累加器。累加器。B专用寄存器,在执行乘法和除法前用于存放乘数和除专用寄存器,在执行乘法和除法前用于存放乘数和除数。执行后存放乘法的高数。执行后存放乘法的高8位结果和除法的余数。位结果和除法的余数。C进位标志,可以作为进位位或布尔处理机中的位累加进位标志,可以作为进位位或布尔处理机中的位累加器。器。间址寄存器或基址寄存器的前缀,如间址寄存器或基址寄存器的前缀,如Ri、A+DPTR。/位操作数的前缀,表示对该位操作数取反,如位操作数的前缀,表示对该位操作数取反,如/bit
8、。()片内片内RAM的直接地址中的内容。的直接地址中的内容。(Rn)由某寄存器间接寻址的单元中的内容。由某寄存器间接寻址的单元中的内容。箭头左边的内容被箭头右边的内容所代替。箭头左边的内容被箭头右边的内容所代替。说明:这些符号只是为了起说明指示的作用,在具体写指令说明:这些符号只是为了起说明指示的作用,在具体写指令的时候,必须用实际含义的内容来替代。如的时候,必须用实际含义的内容来替代。如direct,在写指,在写指令的时候,可以用令的时候,可以用20H之类的地址码来代替。之类的地址码来代替。3.1.3 3.1.3 MCS-51MCS-51指令系统的分类指令系统的分类MCS-51指令系统共集成
9、了指令系统共集成了111条指令,按照不同标准的分类条指令,按照不同标准的分类如下。如下。(1)按指令长度来分类,可分为)按指令长度来分类,可分为 单字节指令:在单字节指令:在ROM中所占有的空间为一个存储单元。中所占有的空间为一个存储单元。双字节指令:在双字节指令:在ROM中所占有的空间为两个存储单元。中所占有的空间为两个存储单元。三字节指令:在三字节指令:在ROM中所占有的空间为三个存储单元。中所占有的空间为三个存储单元。(2)按指令执行所需的时间来分类,可分为)按指令执行所需的时间来分类,可分为 单周期指令:执行该指令需要一个机器周期时间(如单周期指令:执行该指令需要一个机器周期时间(如f
10、osc=12 MHz,T机机=1s)。)。双周期指令:执行该指令需要两个机器周期时间。双周期指令:执行该指令需要两个机器周期时间。四周期指令:执行该指令需要四个机器周期时间。四周期指令:执行该指令需要四个机器周期时间。(3)按指令的功能分类,如表3-1所示。表3-1 指令分类表类 别数 目功 能数据传送类29条执行内外RAM、ROM之间的数据传送算术运算类24条执行数据的加减乘除运算逻辑运算类24条执行与、或、非、异或等逻辑操作位操作类12条执行位的传送和逻辑操作控制转移类22条执行无条件和有条件的转移、调用和返回操作3.1.4 寻址方式寻址方式 所谓寻址方式,就是寻找操作数(一般是指源操作数
11、)所谓寻址方式,就是寻找操作数(一般是指源操作数)地址的方式,在用汇编语言编程时,数据的存放、传送、运地址的方式,在用汇编语言编程时,数据的存放、传送、运算都要通过指令来完成。编程者必须自始至终都十分清楚操算都要通过指令来完成。编程者必须自始至终都十分清楚操作数的位置,以及如何将它们传送到适当的寄存器去参与运作数的位置,以及如何将它们传送到适当的寄存器去参与运算。每一种计算机都具有多种寻址方式。寻址方式的多少是算。每一种计算机都具有多种寻址方式。寻址方式的多少是反映指令系统优劣的主要指标之一。反映指令系统优劣的主要指标之一。MCS-51单片机指令系单片机指令系统有统有7种寻址方式:立即寻址、直
12、接寻址、寄存器寻址、寄种寻址方式:立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址、相对寻址和位寻址。存器间接寻址、变址寻址、相对寻址和位寻址。(1)立即寻址)立即寻址指将操作数直接写在指令中,例如:指将操作数直接写在指令中,例如:MOV A,#12H;将立即数;将立即数12H送入累加器送入累加器A中,中,12HA,如图如图3-1所示。所示。MOV 30H,#31H;将立即数;将立即数31H送入内送入内RAM 30H单元中,单元中,31H30H。说明:说明:操作数前有立即数符号操作数前有立即数符号“#”,则该操作数为立即寻址。,则该操作数为立即寻址。目的操作数不能采用立即寻址方式。目的
13、操作数不能采用立即寻址方式。图3-1 立即数寻址示意图 图3-1 立即数寻址示意图 说明:直接寻址的范围为片内RAM低128 B和特殊功能寄存器。(2)直接寻址)直接寻址将存放操作数的内存单元的地址直接写将存放操作数的内存单元的地址直接写在指令中,例如:在指令中,例如:MOV A,12H;将内;将内RAM 12H单元内容送累加器单元内容送累加器A中,中,(12H)A,如图,如图3-2所示。所示。MOV 30H,P0;将;将P0口的内容送入内口的内容送入内RAM 30H单元中,单元中,P030H。图3-2 直接寻址示意图(3)寄存器寻址)寄存器寻址将存放操作数的寄存器直接写在指令将存放操作数的寄
14、存器直接写在指令中,例如:中,例如:MOV R0,A;将送累加器;将送累加器A中的内容送入寄存器中的内容送入寄存器R0中,中,AR0,如图,如图3-3所示。所示。说明:规定的寄存器包括说明:规定的寄存器包括8个工作寄存器个工作寄存器R0R7、累加器、累加器A、数据指针数据指针DPTR、堆栈指针、堆栈指针SP及其他特殊功能寄存器。及其他特殊功能寄存器。INC A;寄存器寻址方式,;寄存器寻址方式,INC ACC;直接寻址方式。;直接寻址方式。INC R0;寄存器寻址方式,;寄存器寻址方式,INC 00H;直接寻址方式。;直接寻址方式。图3-3 寄存器寻址示意图 (4)寄存器间接寻址)寄存器间接寻
15、址指将存放操作数的内存单元的地指将存放操作数的内存单元的地址放在寄存器中,指令中只给出该寄存器。址放在寄存器中,指令中只给出该寄存器。形象地说,甲要找乙,可不知道乙的地址,但丙知道乙的地形象地说,甲要找乙,可不知道乙的地址,但丙知道乙的地址,甲也知道丙的地址,所以甲先找到丙,从丙那里得到乙址,甲也知道丙的地址,所以甲先找到丙,从丙那里得到乙的地址,最后找到乙。的地址,最后找到乙。例如:已知例如:已知R0寄存器的内容是寄存器的内容是3AH,则指令为,则指令为MOV A,R0;将以将以R0中内容(即中内容(即3AH)为地址的单)为地址的单元中的数据送到元中的数据送到A中,中,(R0)A,如图,如图
16、3-4所示。所示。图3-4 寄存器间接寻址示意图(5)变址寻址)变址寻址将基址寄存器与变址寄存器的内容相加,将基址寄存器与变址寄存器的内容相加,结果作为操作数的地址。结果作为操作数的地址。DPTR或或PC是基址寄存器,累加器是基址寄存器,累加器A是变址寄存器。该类寻是变址寄存器。该类寻址方式主要用于查表操作。例如:如图址方式主要用于查表操作。例如:如图3-5所示,已知所示,已知A=02H,DPTR=0300H,则指令,则指令MOVC A,A+DPTR的功的功能将累加器能将累加器A和基址寄存器和基址寄存器DPTR的内容相加(图中),的内容相加(图中),结果作为操作数存放的地址(图中),再将该地址
17、中的内结果作为操作数存放的地址(图中),再将该地址中的内容取出来送到累加器容取出来送到累加器A中(图中),执行后,累加器中(图中),执行后,累加器A为为ROM 0302H单元地址中的内容。单元地址中的内容。图3-5 变址寻址示意图说明:说明:变址寻址是专门针对程序存储器的寻址方式。变址寻址是专门针对程序存储器的寻址方式。MCS-51指令系统中,只有下面指令系统中,只有下面3条指令采用这种寻址方式:条指令采用这种寻址方式:MOVC A,A+DPTRMOVC A,A+PCJMP A+DPTR(6)相对寻址)相对寻址程序计数器程序计数器PC的当前内容与指令中的操的当前内容与指令中的操作数相加,其结果
18、作为跳转指令的转移地址,该类寻址方式作数相加,其结果作为跳转指令的转移地址,该类寻址方式主要用于跳转指令。主要用于跳转指令。程序转移目标地址程序转移目标地址=当前当前PC值值+相对偏移量相对偏移量rel+转移指令字节转移指令字节数数相对偏移量相对偏移量rel是一个是一个8位有符号数,范围为:位有符号数,范围为:-128+127。例如,例如,2000H:SJMP 54H;执行指令后,程序目标地址;执行指令后,程序目标地址=2000H+54H+02H=2056H,也就是说,程序跳转到,也就是说,程序跳转到2056H单单元去执行了,如图元去执行了,如图3-6所示。所示。说明:从上面读者也许发现相对寻
19、址计算太复杂,但在实际说明:从上面读者也许发现相对寻址计算太复杂,但在实际应用中,不需要这样来计算,而直接用目标地址的标号来代应用中,不需要这样来计算,而直接用目标地址的标号来代替偏移量替偏移量rel就可以了,因为编译软件会自动帮你算出相对偏就可以了,因为编译软件会自动帮你算出相对偏移量,这样比较方便。如:移量,这样比较方便。如:LOOP:SJMP LOOP;跳转到;跳转到LOOP处执行,处执行,如目标出界,指令改成如目标出界,指令改成LJMP图3-6 相对寻址示意图 (7)位寻址指按位进行的寻址操作。例如:SETB 3DH;将内部RAM位寻址区中的3DH位置1,如图3-7所示。图图3-7中的
20、中的27H代表的是字节地址,代表的是字节地址,3DH是位地址,对于这点是位地址,对于这点大家一定要区分清楚,如:大家一定要区分清楚,如:MOV C,01H;这里的;这里的01H代表的是位地址,因为代表的是位地址,因为C是位是位累加器累加器MOV A,01H;这里的;这里的01H代表的是字节地址,因为代表的是字节地址,因为A是是字节累加器字节累加器说明:对于位地址,有以下几种表示方法;说明:对于位地址,有以下几种表示方法;直接使用位地址的表示方法,如直接使用位地址的表示方法,如MOV C,05H。使用位名称的表示方法,如使用位名称的表示方法,如MOV C,RS1。单元地址加位的表示方法,如单元地
21、址加位的表示方法,如 MOV C,PSW.4或或MOV C,D0H.4。图3-7 位寻址示意图3.2.1 3.2.1 数据传送类指令数据传送类指令 在在MCS-51单片机系在单片机系在MCS-51指令系统中,数据传送类指令系统中,数据传送类指令是运用最频繁的一类指令。由于单片机的逻辑空间分为指令是运用最频繁的一类指令。由于单片机的逻辑空间分为内部内部RAM、外部、外部RAM和和ROM,数据的传送也都是在这,数据的传送也都是在这3者者之间进行,传送路径如图之间进行,传送路径如图3-8所示。列中,所示。列中,8031、8032内部内部没有程序存储器,没有程序存储器,8051/8751/AT89C5
22、1内部有内部有4K的程序存储的程序存储器,器,8052/8752/AT89C52内部有内部有8K的程序存储器。的程序存储器。图3-8 MCS-51单片机片数据传送图从图从图3-8中可知:中可知:(1)片内)片内RAM的单元数据可以相互传送,用的单元数据可以相互传送,用MOV指令。指令。(2)外部)外部RAM只能与累加器只能与累加器A进行数据传送,外部进行数据传送,外部RAM送送内内RAM或者内或者内RAM送外部送外部RAM必须经过累加器必须经过累加器A,用,用MOVX指令。指令。(3)从)从ROM只能读取数据,并且只能到只能读取数据,并且只能到A,如果要将,如果要将ROM数据送内数据送内RAM
23、或者外部或者外部RAM,也必须经过累加器,也必须经过累加器A。1内内RAM数据传送指令数据传送指令(1)以累加器)以累加器A为目的字节的传送指令(为目的字节的传送指令(4条)条)MOV A,Rn;RnA,n=07,如如 MOV A,R2MOV A,Ri;(Ri)A,i=0、1,如如 MOV A,R1MOV A,direct;(direct)A,如如 MOV A,30HMOV A,#data;data,如如MOV A,#20H 这这4条指令不影响其他标志位,只影响条指令不影响其他标志位,只影响P标志位。标志位。【例例3-1】已知已知(23H)=50H,(50H)=45H,R0=23H,指出,指出
24、每条指令执行后相应单元内容的变化。每条指令执行后相应单元内容的变化。MOV A,50H;(50)A,A45H。MOV A,R0;(R0)A,A50H。MOV A,R0;R0A,A23H。MOV A,#52H;52HA,A52H。(2)以工作寄存器)以工作寄存器Rn为目的字节的传送指令(为目的字节的传送指令(3条)条)这这3条指令不影响任何标志位。条指令不影响任何标志位。MOV Rn,A;ARn,n=07,如如MOV R2,AMOV Rn,direct;(direct)Rn,n=07,如如MOV R2,30HMOV Rn,#data;dataRn,n=07,如,如MOV R2,#30H【例例3-
25、2】将将R3中的内容送中的内容送R2。解解:MOV A,R3;R3AMOV R2,A;AR2很多初学者常写出很多初学者常写出MOV R2,R3的错误指令,所以在这的错误指令,所以在这里必须强调,在书写指令时,必须按照规定的指令格式写,里必须强调,在书写指令时,必须按照规定的指令格式写,不能凭自己的想象编造,否则单片机无法执行。同时,大家不能凭自己的想象编造,否则单片机无法执行。同时,大家可以记住,在同一条指令中,不可能同时出现两个可以记住,在同一条指令中,不可能同时出现两个Rn或或Ri。【例例3-3】已知已知A=34H,(40H)=52H,指出每条指令执行后相,指出每条指令执行后相应单元内容的
26、变化。应单元内容的变化。MOV R0,A;AR0,R0=34HMOV R3,40H;(40H)R3,R3=52HMOV R4,#40H;40HR4,R4=40H(3)以直接地址为目的字节的传送指令()以直接地址为目的字节的传送指令(5条)条)MOV direct,A;A direct,如,如 MOV 30H,AMOV direct,Rn;Rn direct,n=07,如,如MOV 30H,R2MOV direct,Ri;(Ri)direct,i=0、1,如,如MOV 30H,R1MOV direct,#data;datadirect,如,如MOV 30H,#40HMOV direct,dire
27、ct1;(direct1)direct,如,如MOV 30H,40H这这5条指令不影响标志位。条指令不影响标志位。【例例3-4】已知已知A60H,R0=38H,(38H)=83H,(40H)=7FH,指出每条指令执行后相应单元内容的变化。指出每条指令执行后相应单元内容的变化。MOV 41H,A;A41H,(41H)=60HMOV 41H,R0;(R0)41H,(41H)=83HMOV 41H,R0;R041H,(41H)=38HMOV 41H,40H;(40H)41H,(41H)=7FHMOV 41H,#0F8H;F8H41H,(41H)=F8H最后结果:最后结果:(41H)=F8H。(4)以
28、寄存器间接寻址为目的字节传送指令()以寄存器间接寻址为目的字节传送指令(3条)条)MOV Ri,A;A(Ri),i=0、1,如,如MOV R1,AMOV Ri,direct;(direct)(Ri),i=0、1,如,如MOV R1,30HMOV Ri,#data;data(Ri),i=0、1,如,如MOV R1,#30H这这3条指令不影响标志位。条指令不影响标志位。【例例3-5】已知已知A=30H,R1=50H,(50H)=70H,(60H)=09H,指出每条指令执行后相应单元内容的变化。指出每条指令执行后相应单元内容的变化。MOV R1,A;A(R1),(50H)=30H。MOV R1,#6
29、0H;60H(R1),(50H)=60H。MOV R1,60H;(60H)(R1),(50H)09H。最后结果:最后结果:(50H)=09H。(5)交换指令()交换指令(6条)条)字节交换指令字节交换指令XCH A,Rn;ARn,n=07,如如XCH A,R1XCH A,Ri;A(Ri),i=0、1,如如XCH A,R0XCH A,direct;A(direct),如如XCH A,40H上述指令的功能是将目标操作数和源操作数的内容互换。上述指令的功能是将目标操作数和源操作数的内容互换。半字节交换指令半字节交换指令XCHD A,Ri;A30(Ri)30,高,高4位不变。位不变。i=0、1,如如X
30、CHD A,R0 累加器高低累加器高低4位互换指令位互换指令SWAP A ;A74A30这这5条指令只影响条指令只影响P标志位。标志位。【例例3-6】已知已知(20H)=54H,(21H)=32H,A=01H,指出每条,指出每条指令执行后相应单元内容的变化并写出最后结果。指令执行后相应单元内容的变化并写出最后结果。XCH A,20H;A(20H),A=54H,(20H)=01HMOV R1,#21H;21HR1,R1=21HXCHDA,R1;A30(R1)30,A=52H,(21H)=34HSWAP A;A74A30,A=25HXCH A,20H;A(20H),A=01H,(20H)=25H最
31、后结果:最后结果:A=01H,(20H)=25H,(21H)=34H。2 21616位数据传送指令(位数据传送指令(1 1条)条)在在MCS-51指令系统中,只有一条指令系统中,只有一条16位数据传送指令:位数据传送指令:MOV DPTR,#data16;data16DPTR,如,如MOV DPTR,#3000H这条指令不影响标志位。这条指令不影响标志位。说明:说明:(1)该指令的功能是将)该指令的功能是将16位立即数送入位立即数送入DPTR,其中,其中DPH存放高存放高8位,位,DPL存放低存放低8位,也就是说,指令位,也就是说,指令MOV DPTR,#5678H可以用下面两条指令来代替:可
32、以用下面两条指令来代替:MOV DPH,#56HMOV DPL,#78H(2)DPTR一般用作一般用作16位间接寻址,如果是位间接寻址,如果是MOVX指令,指令,则寻片外则寻片外RAM地址,如果是地址,如果是MOVC指令,则寻指令,则寻ROM地址。地址。3片外片外RAM传送指令(传送指令(4条)条)MOVXA,Ri;(Ri)A,i=0、1MOVXA,DPTR;(DPTR)AMOVXRi,A;A(Ri),i=0、1MOVXDATR,A;A(DPTR)说明:说明:(1)对外部)对外部RAM的访问必须通过累加器的访问必须通过累加器A。(2)对外部)对外部RAM的访问必须采用寄存器间接寻址方式,寻的访
33、问必须采用寄存器间接寻址方式,寻址寄存器有两种。址寄存器有两种。8位寄存器位寄存器R0、R1,寻址范围为片外,寻址范围为片外RAM低低8位地址空间位地址空间(00HFFH),其高),其高8位地址由位地址由P2口状态确定。口状态确定。16位寄存器位寄存器DPTR,寻址范围为片外,寻址范围为片外RAM 64K地址空间地址空间(0000HFFFFH)。)。(3)外)外RAM高高8位地址由位地址由P2口送出,低口送出,低8位地址由位地址由P0口送出,口送出,8位数据也由位数据也由P0口分时传送。在执行读外口分时传送。在执行读外RAM时,信号有效,时,信号有效,为低电平。在执行写外为低电平。在执行写外R
34、AM时,信号有效,为低电平。时,信号有效,为低电平。(4)由于)由于MCS-51扩展扩展I/O地址与外地址与外RAM地址是统一编址的,地址是统一编址的,所以访问外所以访问外RAM的指令也作为扩展的指令也作为扩展I/O的输入的输入/输出指令。比输出指令。比如,已知某外部如,已知某外部I/O端口地址为端口地址为7FF7H,则对此,则对此I/O的读写操的读写操作为:作为:MOV DPTR,#7FF7H;赋端口地址;赋端口地址MOVX A,DPTR;输入操作(读);输入操作(读)MOVX DPTR,A;输出操作(写);输出操作(写)【例例3-7】要求编写指令序列,实现以下功能:要求编写指令序列,实现以
35、下功能:将片外将片外RAM 2000H单元内容传送到片内单元内容传送到片内RAM 20H单元中。单元中。将片外将片外RAM 2120H单元内容送到片外单元内容送到片外RAM 3210H单元中。单元中。解:解:MOV DPTR,#2000HMOVXA,DPTRMOV20H,AMOVDPTR,#2120HMOVXA,DPTRMOVDPTR,#3210HMOVXDPTR,A4ROM指令(查表指令)(指令(查表指令)(2条)条)我们知道,我们知道,ROM中存放的是程序代码,一般不需要人为去中存放的是程序代码,一般不需要人为去读,但有时候,在程序中也包含某些重要数据(也称表格),读,但有时候,在程序中也
36、包含某些重要数据(也称表格),如显示字型码、常数等。这些数据在程序运行过程中需要被如显示字型码、常数等。这些数据在程序运行过程中需要被读出来,参与程序的处理过程。读出来,参与程序的处理过程。比如要实现函数,比如要实现函数,x为输入量,是为输入量,是010的整数,如果采用编的整数,如果采用编程方法实现这个函数的运算,则比较复杂。我们可以利用其程方法实现这个函数的运算,则比较复杂。我们可以利用其他工具先算出他工具先算出Y(0)Y(10)的值,把它依次存放在的值,把它依次存放在ROM中,中,然后根据然后根据x的值去找出的值去找出Y(x)的值,这种方法就称为查表,也是的值,这种方法就称为查表,也是2条
37、读条读ROM指令的主要功能。指令的主要功能。MOVCA,A+DPTR;(A+DPTR)AMOVCA,A+PC;PC+1PC,(A+PC)A说明:说明:(1)这两条指令的寻址方式都为变址寻址方式,都是单字)这两条指令的寻址方式都为变址寻址方式,都是单字节指令,都只影响标志位节指令,都只影响标志位P。(2)MOVC A,A+DPTR的寻址以的寻址以DPTR为基址,可以寻为基址,可以寻址整个址整个64 KB的的ROM空间。空间。(3)MOVC A,A+PC的寻址以当前指令的的寻址以当前指令的PC值为基址值为基址寄存器,其寻址范围为该指令后寄存器,其寻址范围为该指令后256 B的的ROM空间。空间。(
38、4)在实际应用中,)在实际应用中,MOVC A,A+DPTR寻址范围广,寻址范围广,不用修正不用修正A值,比较方便,采用较多。值,比较方便,采用较多。【例例3-8】在单片机应用系统中,常用在单片机应用系统中,常用LED数码管显示数码,数码管显示数码,但显示数字(但显示数字(9)与显示数字编码并不相同,需要将显示数)与显示数字编码并不相同,需要将显示数字转换为显示字型(段)码,通常是用查表的方法。现要求字转换为显示字型(段)码,通常是用查表的方法。现要求将将30H中的显示数字转换为显示字型(段)码并存入中的显示数字转换为显示字型(段)码并存入30H。已知共阴字段码表首址为已知共阴字段码表首址为T
39、AB。解:编程如下。解:编程如下。CHANG:MOV DPTR,#TAB;置共阴字;置共阴字段码表首址段码表首址MOV A,30H;读显示数;读显示数字字 MOVCA,A+DPTR;查表,转换为显;查表,转换为显示字段码示字段码 MOV 30H,A;存显示字段码;存显示字段码 RETTAB:DB 3FH,06H,5BH,4FH,66H;04共阴字段码表共阴字段码表 DB 6DH,7DH,07H,7FH,6FH;59共阴共阴字段码表字段码表5堆栈操作指令堆栈操作指令PUSH direct;SP+1SP,(,(direct)SP;如;如PUSH 20HPOPdirect;(;(SP)direct,
40、SP-1SP;如;如POP 30H说明:(说明:(1)入栈操作过程。先将堆栈指针)入栈操作过程。先将堆栈指针SP的内容加的内容加1,指,指向堆栈顶的一个空单元;然后将指令指定的直接寻址单元中向堆栈顶的一个空单元;然后将指令指定的直接寻址单元中的数据送到该空单元中。假如的数据送到该空单元中。假如PUSH 30H,(30H)=2BH,SP=0FH,则其操作过程如图,则其操作过程如图3-9所示。所示。图3-9 指令PUSH操作示意图(2)出栈操作过程。先将)出栈操作过程。先将SP所指单元(栈顶地址)中的数所指单元(栈顶地址)中的数据弹出,送到指定的内据弹出,送到指定的内RAM单元;然后单元;然后SP
41、-1SP,SP仍指仍指向栈顶地址。以向栈顶地址。以POP 30H,SP=0FH,则其出栈操作过程如,则其出栈操作过程如图图3-10所示。所示。图3-10 指令POP操作示意图(3)后面所跟的操作数只能是直接地址,如)后面所跟的操作数只能是直接地址,如PUSH R0,PUSH A都是错误的,应该为都是错误的,应该为PUSH 00H(设(设RS1=RS0=0),),PUSH ACC。【例例3-9】将片内将片内RAM 30H单元与单元与40H单元中的内容互换。单元中的内容互换。解:解:方法方法1(直接地址传送法):(直接地址传送法):MOV31H,30HMOV30H,40HMOV40H,31HSJM
42、P$方法方法2(间接地址传送法):(间接地址传送法):MOVR0,#40HMOVR1,#30HMOVA,R0MOVB,R1MOVR1,AMOVR0,BSJMP$3.2.2 3.2.2 算术运算类指令算术运算类指令算术运算类指令共算术运算类指令共24条,这类指令基本都会影响标志位条,这类指令基本都会影响标志位Cy、OV、AC、P。1加法指令加法指令(1)不带进位位)不带进位位Cy加法指令(加法指令(4条)条)ADD A,Rn;A+RnA,(,(n=07)有进有进位,位,Cy=1,无进位,无进位,Cy=0ADD A,Ri;A+(Ri)A,(,(i=0、1)有进有进位,位,Cy=1,无进位,无进位,
43、Cy=0ADD A,direct;A+(direct)A有进有进位,位,Cy=1,无进位,无进位,Cy=0ADD A,#data;A+dataA有进有进位,位,Cy=1,无进位,无进位,Cy=0ADD指令是指令是8位数加法指令,其一个加数在累加器位数加法指令,其一个加数在累加器A中,另中,另外一个加数由不同寻址方式得到,相加结果再送回外一个加数由不同寻址方式得到,相加结果再送回A。运算。运算结果会影响标志位。结果会影响标志位。【例例3-10】已知累加器已知累加器A的内容为的内容为E7H,(30H)=97H,则指出执行指,则指出执行指令令ADD A,30H后的结果和各标志位的状态。后的结果和各标
44、志位的状态。解:解:11100111B+10010111B1(Cy)01111110B执行后,执行后,A=7EH,Cy=1,AC=0,P=0,OV=1。(2)带进位位)带进位位Cy加法指令(加法指令(4条)条)ADDC A,Rn;A+Rn+CyA,(,(n=07)有进有进位,位,Cy=1,无进位,无进位,Cy=0ADDC A,Ri;A+(Ri)+CyA,(,(i=0、1)有进位,有进位,Cy=1,无进位,无进位,Cy=0ADDC A,direct;A+(direct)A有进有进位,位,Cy=1,无进位,无进位,Cy=0ADDC A,#data;A+dataCyA有进有进位,位,Cy=1,无进位
45、,无进位,Cy=0ADDC与与ADD指令的区别就是相加时再加上指令的区别就是相加时再加上Cy,其余功能一样。,其余功能一样。【例例3-11】已知累加器已知累加器A的内容为的内容为A7H,R0=30H,(30H)=5BH,Cy=1,则指出执行指令,则指出执行指令ADD A,R0后的结果后的结果和各标志位的状态。和各标志位的状态。解:解:10100111B01011011B+1 Cy1(Cy)0000 0011B执行后,执行后,A=03H,Cy=1,AC=1,P=1,OV=0。2减法指令(减法指令(4条)条)SUBB A,Rn;A-Rn-CyA,(,(n=07)有借位,有借位,Cy=1,无进位,无
46、进位,Cy=0SUBB A,Ri;A-(Ri)-CyA,(,(i=0、1)有借位,有借位,Cy=1,无进位,无进位,Cy=0SUBB A,direct;A-(direct)-CyA有借有借位,位,Cy=1,无进位,无进位,Cy=0SUBB A,#data;A-data-CyA有借位,有借位,Cy=1,无进位,无进位,Cy=0注意:减法指令都是带进位位减法,若要执行不带进位位减注意:减法指令都是带进位位减法,若要执行不带进位位减法,可先将进位位清零,再执行减法操作。法,可先将进位位清零,再执行减法操作。【例例3-12】已知累加器已知累加器A=A7H,R0=58H,Cy=0,则指出执,则指出执行指
47、令行指令SUBB A,R0后的结果和各标志位的状态。后的结果和各标志位的状态。解:解:10100111B01011000B+0 Cy0(Cy)0100 1111B执行后,执行后,A=4FH,Cy=0,AC=1,P=1,OV=1。说明:说明:(1)当加、减法运算结果的最高位有进位或有借位时,)当加、减法运算结果的最高位有进位或有借位时,Cy=1,否则,否则Cy=0。(2)当加、减法运算时,低)当加、减法运算时,低4位向高位向高4位有进位或者借位时,位有进位或者借位时,AC=1,否则,否则AC=0。(3)在加、减法过程中,)在加、减法过程中,D6和和D7未同时产生进位或者借位未同时产生进位或者借位
48、时,时,OV=1,否则,否则OV=0。(4)当运算结果)当运算结果A中中“1”的个数为奇数时,的个数为奇数时,P=1,否则,否则P=0。(5)在加、减法指令中,其目的操作数只能是累加器)在加、减法指令中,其目的操作数只能是累加器A。【例例3-13】编写计算编写计算12A4H+0FE7H的程序,将结果存入内的程序,将结果存入内部部RAM 41H和和40H单元,单元,40H存低存低8位,位,41H存高存高8位。位。解:单片机指令系统中只提供了解:单片机指令系统中只提供了8位的加减法运算指令,两位的加减法运算指令,两个个16位数(双字节)相加可分为两步进行,第一步先对低位数(双字节)相加可分为两步进
49、行,第一步先对低8位相加,第二步再对高位相加,第二步再对高8位相加。位相加。高高8位位 低低8位位 1 2 A 4 H A4H+E7H=8BH 进位进位1 +0 F E 7 H 12H+0FH+1=22H 2 2 8 BH 进位进位 1 1 加法指令加法指令ADDCADD程序如下:程序如下:PLUS:MOVA,#0A4H;被加数低;被加数低8位位AADDA,#0E7H;加数低;加数低8位位E7H与之相与之相加,加,A=8BH,Cy=1MOV40H,A;A(40H),存低),存低8位结果位结果MOVA,#12H;被加数高;被加数高8位位AADDCA,#0FH;加数高;加数高8位位+A+CY,A=
50、22HMOV41H,A;存高;存高8位运算结果位运算结果RET3加加1减减1指令(指令(9条)条)(1)加)加1指令指令INC A;A+1AINC Rn;Rn+1Rn,n=07INC Ri;(Ri)+1(Ri),i=0、1INC direct;(direct)+1directINC DPTR;DPTR+1DPTR(2)减)减1指令指令 DEC A;A-1ADEC Rn;Rn-1Rn,n=07DEC Ri;(Ri)-1(Ri),i=0、1DEC direct;(direct)-1direct说明:说明:加加1、减、减1指令在涉及指令在涉及A时,会影响时,会影响P标志位,其他情况不标志位,其他情况