第3章 MCS-51系列单片机指令系统_第1页
第3章 MCS-51系列单片机指令系统_第2页
第3章 MCS-51系列单片机指令系统_第3页
第3章 MCS-51系列单片机指令系统_第4页
第3章 MCS-51系列单片机指令系统_第5页
已阅读5页,还剩118页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第三章第三章 MCS-51系列单片机系列单片机指令系统指令系统lMCS-51MCS-51单片机汇编语言指令格式为:单片机汇编语言指令格式为:指令格式指令格式标号:标号:操作码操作码操作数或操作数地址操作数或操作数地址; ;注释注释MCS-51MCS-51单片机汇编语言指令由以下几个部分组成:单片机汇编语言指令由以下几个部分组成:标号标号操作码操作码操作数或操作数地址操作数或操作数地址注释注释 标号标号标号是程序员根据编程需要,标号是程序员根据编程需要, 给指令设定的符号地址,可给指令设定的符号地址,可有可无;有可无;标号由标号由1818个字符组成,第一个字符必须是英文字母,不能个字符组成,第一

2、个字符必须是英文字母,不能是数字或其它符号;是数字或其它符号;标号后必须用冒号;标号后必须用冒号;在程序中,不可以重复使用。在程序中,不可以重复使用。 操作码操作码 操作码表示指令的操作种类,规定了指令的具体操作。操作码表示指令的操作种类,规定了指令的具体操作。 比如:比如:ADDADD(加操作),(加操作),MOV MOV (数据的传送操作)。(数据的传送操作)。操作数或操作数地址操作数或操作数地址 操作数或操作数地址表示参加运算的数据或数据的地操作数或操作数地址表示参加运算的数据或数据的地址。操作数和操作码之间必须用空格分开,有两个以上操址。操作数和操作码之间必须用空格分开,有两个以上操作

3、数的操作数之间用逗号分隔。操作数一般有以下几种形作数的操作数之间用逗号分隔。操作数一般有以下几种形式:式:没有操作数项,操作数隐含在操作码中,没有操作数项,操作数隐含在操作码中,如如RET指令指令;只有一个操作数,只有一个操作数,如如CPL A指令指令;有两个操作数,有两个操作数,如如MOV A, #00H指令;指令;有三个操作数,有三个操作数,如如CJNE A, #00H, NEXT指令指令。 注释注释注释是对指令的解释说明,用以提高程序的可读性;注释注释是对指令的解释说明,用以提高程序的可读性;注释前必须以前必须以“;”和指令分开,注释在每条指令后都可以设和指令分开,注释在每条指令后都可以

4、设有。有。 3.1 80C51指令系统概述指令系统概述80C51指令系统专用于指令系统专用于80C51系列单片微系列单片微机,是一个具有机,是一个具有255种操作码种操作码 (00H至至FFH,除,除A5H外外) 的集合。的集合。用汇编语言表达操作代码时,用汇编语言表达操作代码时,42种助记符种助记符代表了代表了33种功能,有的功能如数据传送,可以种功能,有的功能如数据传送,可以有几种助记符,如有几种助记符,如MOV、MOVC、MOVX。指令功能助记符与操作数各种寻址方式的指令功能助记符与操作数各种寻址方式的结合,共构造出结合,共构造出111种指令,同一种指令所对应种指令,同一种指令所对应的操

5、作码可以多至的操作码可以多至8种种 (如指令中如指令中Rn对应寄存器对应寄存器R0R7) 。符号指令及其注释中常用的符号符号指令及其注释中常用的符号Rn(n=07)-当前选中的工作寄存器组中的当前选中的工作寄存器组中的寄存器寄存器R0R7之一;之一;Ri(i=0,1)-当前选中的工作寄存器组中的寄当前选中的工作寄存器组中的寄存器存器R0或或R1; -间址寄存器前缀;间址寄存器前缀;#data -8位立即数;位立即数;#data16-16位立即数;位立即数;direct-片内低片内低128个个RAM单元地址及单元地址及SFR地址地址(可用符号名称表示可用符号名称表示);addr11-11位目的地

6、址;位目的地址;addr16-16位目的地址;位目的地址;rel-补码形式表示的补码形式表示的8位地址偏移量,值位地址偏移量,值在在128127范围内;范围内;bit-片内片内RAM位地址、位地址、SFR的位地址的位地址(可用符号名称表示);(可用符号名称表示);/-位操作数的取反操作前缀;位操作数的取反操作前缀;()- 表示表示地址单元或寄存器中的内容;地址单元或寄存器中的内容;()-表示以表示以 单元或寄存器内容为地址单元或寄存器内容为地址间接寻址单元的内容;间接寻址单元的内容; -将箭头右边的内容送入箭头左边的单将箭头右边的内容送入箭头左边的单元中。元中。 寻址寻址:在指令中给出的寻找操

7、作:在指令中给出的寻找操作数或操作数所在地址的方法。数或操作数所在地址的方法。寻址方式寻址方式执行任何一条指令都需要使用操作数。执行任何一条指令都需要使用操作数。80C5l指令系统中共有指令系统中共有7种寻址方式。种寻址方式。 在指令中直接给出操作数,出现在在指令中直接给出操作数,出现在指令中的操作数称为立即数。指令中的操作数称为立即数。 在立即数前面必需加上前缀在立即数前面必需加上前缀“”。1.1.立即寻址立即寻址如:MOV A,50H Al XXMOV A , #50H50H 在直接寻址方式中在直接寻址方式中的的SFRSFR经常采用符号经常采用符号形式表示。形式表示。 寻址空间为寻址空间为

8、:片内:片内RAMRAM低低128128字节(以地字节(以地址形式表示);址形式表示);SFR SFR (以地址或(以地址或SFRSFR的符的符号形式表示号形式表示 )。)。2. 2. 直接寻址直接寻址如:MOV A,50H 直接寻址是访问特殊功能寄存器的唯一方法。直接寻址是访问特殊功能寄存器的唯一方法。 3. 3. 寄存器寻址寄存器寻址如:MOV A,R0 寄存器:寄存器:R0R0R7R7;累加器累加器A A(使用符号(使用符号ACCACC表示累加器时属表示累加器时属于直接寻址);寄存于直接寻址);寄存器器B B(以(以ABAB寄存器对寄存器对形式出现);数据指形式出现);数据指针针DPTR

9、DPTR。4.4.寄存器间接寻址寄存器间接寻址在寄存器间接寻址中,在寄存器间接寻址中,在寄存器的名称前面在寄存器的名称前面加前缀加前缀“”。在指令中给出的寄存器内容是操作数的在指令中给出的寄存器内容是操作数的地址,从该地址中取出的才是操作数。地址,从该地址中取出的才是操作数。寄存器间接寻址也需以寄存器符号名称寄存器间接寻址也需以寄存器符号名称的形式表示。的形式表示。如:MOV A,R0 l 片内片内RAM的数据传送采用的数据传送采用“MOV”类指令,类指令,间接寻址寄存器采用寄存器间接寻址寄存器采用寄存器R0或或R1(堆栈操(堆栈操作时采用作时采用SP)。)。l 片外片外RAM的数据传送采用的

10、数据传送采用“MOVX”类指令,类指令,这时间接寻址寄存器有两种选择,一是采用这时间接寻址寄存器有两种选择,一是采用R0和和R1作间址寄存器,这时作间址寄存器,这时R0或或R1提供低提供低8位位地址(外部地址(外部RAM多于多于256字节采用页面方式访字节采用页面方式访问时,可由问时,可由P2口未使用的口未使用的I/O引脚提供高位地引脚提供高位地址);二是采用址);二是采用DPTR作为间址寄存器。作为间址寄存器。 l堆栈区:堆栈操作指令堆栈区:堆栈操作指令PUSH和和POP,以,以SP作间址寄存器的间接寻址方式。作间址寄存器的间接寻址方式。 相对寻址是以程序计数器相对寻址是以程序计数器PCPC

11、的当前值的当前值(指读出该(指读出该2 2字节或字节或3 3字节的跳转指令后,字节的跳转指令后,PCPC指向的下条指令的地址)指向的下条指令的地址)为基准,加上为基准,加上指令中给出的相对偏移量指令中给出的相对偏移量 rel rel 形成目标地址形成目标地址的寻址方式的寻址方式 。 rel rel 是一个带符号的是一个带符号的8 8位二进制数,取值范围是位二进制数,取值范围是128128127127,以补码形式置于操作码之后存放。,以补码形式置于操作码之后存放。 5. 5. 相对寻址相对寻址如:JC 75H 以以DPTR或或PC为基址寄存器,累加器为基址寄存器,累加器A为为变址寄存器,以两者内

12、容相加后形成的变址寄存器,以两者内容相加后形成的16位程位程序存储器地址作为操作数地址。序存储器地址作为操作数地址。 又称基址寄存器变址寄存器间接寻址。又称基址寄存器变址寄存器间接寻址。6. 6. 变址寻址变址寻址如:MOVC A,A+DPTR 80C51指令系统中的变址寻址指令有如下特点:指令系统中的变址寻址指令有如下特点: 变址寻址方式只能对程序存储器进行寻址变址寻址方式只能对程序存储器进行寻址 。 变址寻址指令只有变址寻址指令只有3条条 MOVC A,ADPTR MOVC A,APC JMP ADPTR 这这3条指令都是单字节指令。条指令都是单字节指令。 变址寻址方式用于查表操作。变址寻

13、址方式用于查表操作。 采用位寻址指令的操作数是采用位寻址指令的操作数是8位二进制数中的位二进制数中的某一位。指令中给出的是位地址。某一位。指令中给出的是位地址。 位寻址方式实质属于位的直接寻址。位寻址方式实质属于位的直接寻址。 寻址空间寻址空间为:片内为:片内RAM的的20H2FH单元中的单元中的128可寻址位;可寻址位;SFR的可寻址位。的可寻址位。 习惯上,特殊功能寄存器的寻址位常用符号位习惯上,特殊功能寄存器的寻址位常用符号位地址表示。地址表示。 如:如: CLR ACC.0 MOV 30H,C7. 7. 位寻址位寻址18序号序号寻址方式寻址方式寻址空间寻址空间1 1寄存器寻址寄存器寻址

14、R0R0R7R7、A A、B B、C(C(位位) )、DPTRDPTR等等2 2直接寻址直接寻址内部内部128128字节字节RAMRAM、特殊功能寄存器、特殊功能寄存器3 3寄存器间接寻址寄存器间接寻址片内数据存储器、片外数据存储器片内数据存储器、片外数据存储器4 4立即数寻址立即数寻址程序存储器中的立即数程序存储器中的立即数5 5基址寄存器加变址寄存器间基址寄存器加变址寄存器间接寻址接寻址读程序存储器固定数据和程序散转读程序存储器固定数据和程序散转6 6相对寻址相对寻址程序存储器相对转移程序存储器相对转移7 7位寻址位寻址内部内部RAMRAM中的可寻址位、中的可寻址位、SFRSFR中的可中的

15、可寻址位寻址位表表3-1 3-1 7 7种寻址方式及其寻址空间种寻址方式及其寻址空间 80C51的指令系统,共有的指令系统,共有111条指令,按其功能可分条指令,按其功能可分为为5大类:大类: 数据传送类指令(数据传送类指令(28条);条); 算术运算类指令(算术运算类指令(24条);条); 逻辑运算类指令(逻辑运算类指令(25条);条); 控制转移类指令(控制转移类指令(17 条);条); 布尔操作(位)类指令(布尔操作(位)类指令(17条)。条)。指令分类指令分类 : 单片微机执行指令的过程,分为取指令单片微机执行指令的过程,分为取指令和执行指令两项基本内容。和执行指令两项基本内容。在取指

16、阶段,单片微机从程序存储器中在取指阶段,单片微机从程序存储器中取出指令操作码,送到指令寄存器取出指令操作码,送到指令寄存器IR中,通过中,通过指令译码器的译码,产生一系列的控制信号。指令译码器的译码,产生一系列的控制信号。在指令执行阶段中,利用指令译码产生在指令执行阶段中,利用指令译码产生的控制信号,进行本指令规定的操作的控制信号,进行本指令规定的操作 。 单片微机执行指令的过程单片微机执行指令的过程: :数据传送类指令数据传送类指令可分为内部可分为内部8位数据传送指令、位数据传送指令、16位数据传送指位数据传送指令、外部数据传送指令、程序存储器数据传送指令、令、外部数据传送指令、程序存储器数

17、据传送指令、交换指令和堆栈操作指令。交换指令和堆栈操作指令。助记符助记符8种:种:MOV、MOVX、MOVC、XCH、XCHD、SWAP、PUSH、POP。格式:格式:MOV ,源操作数可采用寄存器、寄存器间接、直接、立即、源操作数可采用寄存器、寄存器间接、直接、立即、寄存器基址加变址等寄存器基址加变址等5种寻址方式。种寻址方式。目的操作数可以采用寄存器、寄存器间接、直接等目的操作数可以采用寄存器、寄存器间接、直接等3种寻址方式。种寻址方式。指令执行之后,源操作数不改变,目的操作指令执行之后,源操作数不改变,目的操作数修改为源操作数。所以数据传送类操作属数修改为源操作数。所以数据传送类操作属“

18、复制复制”性质,而不是性质,而不是“搬家搬家”。数据传送类指令不影响标志位数据传送类指令不影响标志位C、AC、OV。但不包括奇偶标志位但不包括奇偶标志位P数据传送指令的特点有:数据传送指令的特点有: 可以进行直接地址到直接地址的数据传可以进行直接地址到直接地址的数据传送,能把一个并行送,能把一个并行I/O口中的内容传送到片内口中的内容传送到片内RAM单元中,而不必经过累加器或工作寄存器单元中,而不必经过累加器或工作寄存器Rn。 用用R0和和R1寄存器间址访问片外数据存储寄存器间址访问片外数据存储器器256个字节址及片内个字节址及片内RAM中的任一单元。用中的任一单元。用DPTR间址访问片外全部

19、间址访问片外全部64KB的数据存储器或的数据存储器或I/O。 累加器累加器A能对能对Rn寄存器寻址;能与特殊寄存器寻址;能与特殊功能寄存器之间进行一个字节的数据传送;能功能寄存器之间进行一个字节的数据传送;能对片内对片内RAM直接寻址;能与片内直接寻址;能与片内RAM单元之间单元之间进行低半字节的数据交换。进行低半字节的数据交换。 能用变址寻址方式访问程序存储器中的能用变址寻址方式访问程序存储器中的表格,将程序存储器单元中的固定常数或表格表格,将程序存储器单元中的固定常数或表格字节内容传送到累加器字节内容传送到累加器A中。中。 MOV A,Rn MOV A,Rn ;(Rn)(A) ,n=0;(

20、Rn)(A) ,n=07 7 MOV A,Ri MOV A,Ri ;(Ri)(A),i=0;(Ri)(A),i=0、1 1 MOV A,direct MOV A,direct ;(direct)(A);(direct)(A) MOV A,#data MOV A,#data ; data(A); data(A) 内内RAMRAM数据传送指令数据传送指令 以以累加器累加器A A为目的字节的传送指令为目的字节的传送指令(4 4条条)一、一、数据传送类指令数据传送类指令 这组指令的功能是把这组指令的功能是把源字节送入累加器中源字节送入累加器中。源字节的寻址方式分别为直接寻址、寄存器间源字节的寻址方式分

21、别为直接寻址、寄存器间接寻址、寄存器寻址和立即寻址四种基本寻址接寻址、寄存器寻址和立即寻址四种基本寻址方式。方式。 AXX A33H30H33H结果结果Eg:MOV A,30HEg:MOV A,#10H AXX30H10H结果结果10HAXXA33HR233H55H78H A78HR055H取出取出地址地址Eg. : MOV A,R0Eg.: MOV A,R2注意:在使用注意:在使用Ri进行间址寻址时,只能够使用进行间址寻址时,只能够使用R0和和R1。 MOV Rn,A MOV Rn,A ;(A)(Rn),n=0;(A)(Rn),n=07 7 MOV Rn,direct MOV Rn,dire

22、ct;(direct)(Rn),n=0;(direct)(Rn),n=07 7 MOV Rn,#data MOV Rn,#data ;data(Rn),n=0;data(Rn),n=07 7 以以工作寄存器工作寄存器RnRn为目的字节的传送为目的字节的传送指令指令(3 3条条) 这组指令的功能是把源字节送入寄存器这组指令的功能是把源字节送入寄存器Rn中。源字节的寻址方式分别为立即寻址、中。源字节的寻址方式分别为立即寻址、直接寻址和寄存器寻址(直接寻址和寄存器寻址(由于目的字节为工由于目的字节为工作寄存器,所以源字节不能是工作寄存器及作寄存器,所以源字节不能是工作寄存器及其间址方式寻址其间址方式

23、寻址)。)。R2R2XX33HA33HEg:MOV R2,AEg:MOV R2,30HEg:MOV R2,#30HR2R2XX55H30H55HR2XXR230H30H 以以直接地址直接地址为目的字节的传送指令为目的字节的传送指令(5 5条条) MOV direct,A MOV direct,A ;(A);(A)(directdirect) MOV direct,Rn MOV direct,Rn ;(Rn);(Rn)(directdirect),n=0,n=07 7 MOV direct,Ri MOV direct,Ri ;(Ri);(Ri)(directdirect),i=0,i=0、1 1

24、 MOV direct1,direct2 MOV direct1,direct2;(direct2);(direct2)(direct1direct1) MOV direct,#data MOV direct,#data;data;data(directdirect) 这组指令的功能是把源字节送入这组指令的功能是把源字节送入direct中。中。源字节的寻址方式分别为立即寻址、直接寻址、源字节的寻址方式分别为立即寻址、直接寻址、寄存器间接寻址和寄存器寻址。寄存器间接寻址和寄存器寻址。 例:若(例:若(R1)=50H,(50H)=18H,执行指令执行指令MOV 40H,R1 后后, (40H)=1

25、8H。 以以寄存器间址寄存器间址为目的字节的传送指令为目的字节的传送指令(3 3条条) MOV Ri,A MOV Ri,A ;(A)(Ri),i=0;(A)(Ri),i=0、1 1 MOV Ri,direct MOV Ri,direct ;(direct)(Ri),i=0;(direct)(Ri),i=0、1 1 MOV Ri,#data MOV Ri,#data ;data(Ri),i=0;data(Ri),i=0、1 1 这组指令的功能是把源字节送入这组指令的功能是把源字节送入Ri内容内容为地址的单元,源字节寻址方式为立即寻址、为地址的单元,源字节寻址方式为立即寻址、直接寻址和寄存器寻址(

26、因目的字节采用寄直接寻址和寄存器寻址(因目的字节采用寄存器间接寻址,故源字节不能是寄存器及其存器间接寻址,故源字节不能是寄存器及其间址寻址)。间址寻址)。 Eg. : MOV R1,AEg:MOV R1,30HEg:MOV R1,#30H55HAR1(地址地址)55H78H78H55H30HR1(地址地址)55H78H78H55H30HR1(地址地址)55H30H 1616位数据传送指令位数据传送指令MOV DPTR,#data16 MOV DPTR,#data16 ;data16(DPTR);data16(DPTR)【例】【例】MOV DPTR,#1234H MOV DPTR,#1234H

27、;DPTR=1234H;DPTR=1234H该指令也可以用两条该指令也可以用两条8 8位数据传送指令实现:位数据传送指令实现:MOV DPH,#12H MOV DPH,#12H ;DPH=12H;DPH=12HMOV DPL,#34H MOV DPL,#34H ;DPL=34H,DPTR=1234H;DPL=34H,DPTR=1234H 读片外读片外RAM MOVX A,DPTR ;(A)(DPTR) MOVX A,Ri ;(A)(Ri) 第一条指令以第一条指令以16位位DPTR为间址寄存器读片为间址寄存器读片外外RAM,可以寻址整个,可以寻址整个64K字节的片外字节的片外RAM空间。指令执行

28、时,在空间。指令执行时,在DPH中的高中的高8位地址由位地址由P2口输出,在口输出,在DPL中的低中的低8位地址由位地址由P0口分时口分时输出,并由输出,并由ALE信号锁存在地址锁存器中。信号锁存在地址锁存器中。 外外RAMRAM传送指令传送指令(4 4条条) 第二条指令以第二条指令以R0或或R1为间址寄存器,为间址寄存器,也可以读整个也可以读整个64K字节的片外字节的片外RAM空间。空间。指令执行时,低指令执行时,低8位地址在位地址在R0或或R1中由中由P0口分时输出,口分时输出,ALE信号将地址信息锁信号将地址信息锁存在地址锁存器中(多于存在地址锁存器中(多于256字节的访问,字节的访问,

29、高位地址由高位地址由P2口提供)。口提供)。 读片外读片外RAM的的MOVX操作,使操作,使P3.7引引脚输出的信号选通片外脚输出的信号选通片外RAM单元,相应单元,相应单元的数据从单元的数据从P0口读入累加器中。口读入累加器中。 写片外写片外RAM 第一条指令以第一条指令以16位位DPTR为间址寄存器写外部为间址寄存器写外部RAM,可以寻址整个,可以寻址整个64K字节的片外字节的片外RAM空间。指空间。指令执行时,在令执行时,在DPH中高中高8位地址由位地址由P2口输出,在口输出,在DPL中的低中的低8位地址,由位地址,由P0口分时输出,并由口分时输出,并由ALE信号锁存在地址锁存器中。信号

30、锁存在地址锁存器中。 MOVX DPTR,A ;(DPTR)(A)MOVX Ri,A ;(Ri)(A) 写片外写片外RAM的的“MOVX”操作,使操作,使P3.6引引脚的信号有效,累加器脚的信号有效,累加器A的内容从的内容从P0口输出口输出并写入选通的相应片外并写入选通的相应片外RAM单元。单元。 注:当片外扩展的注:当片外扩展的I/O端口映射为片外端口映射为片外RAM地址时,也要利用这地址时,也要利用这4条指令进行数据条指令进行数据的输入输出。的输入输出。 第二条指令以第二条指令以R0或或R1为间址寄存器,为间址寄存器,也可以写整个也可以写整个64K字节的片外字节的片外RAM空间。空间。指令

31、执行时,低指令执行时,低8位地址在位地址在R0或或R1中由中由P0口分时输出,口分时输出,ALE信号将地址信息锁信号将地址信息锁存在地址锁存器中(多于存在地址锁存器中(多于256字节的访问,字节的访问,高位地址由高位地址由P2口提供)。口提供)。v注意:只有累加器注意:只有累加器A才能把数据传到外部才能把数据传到外部RAM,或接收从外部数据存储器传回的数据。或接收从外部数据存储器传回的数据。v v比如:比如:MOVX 20H, DPTR MOVX DPTR,SBUF MOVX DPTR,R2 MOVX DPTR,R1 都是错误的都是错误的补充:(与补充:(与P2口有关)口有关)1)若外接)若外

32、接ROM,P2的全部口线均不宜再作的全部口线均不宜再作I/O口使用口使用2)若无外)若无外ROM,而有外,而有外RAM, 分两种情况:分两种情况:l外外RAM容量容量256B,P2口不输出地址,口不输出地址,可作可作I/O口口 如:如:MOV R0MOV R0,#38H#38H MOV A MOV A,#56H #56H MOVX R0 MOVX R0,A ACPU执行此执行此程序段不影程序段不影响响P2口状态口状态外外RAM容量容量256B, 若使用指令若使用指令“MOVX A,DPTR”与与“MOVX DPTR,A” ,P2口需输出口需输出高高8位地址。位地址。 若使用指令若使用指令“MO

33、VX A,Ri”与与“MOVX Ri,A” ,高,高8位地址不再位地址不再是自动送出的,而要通过程序设定。是自动送出的,而要通过程序设定。例:将例:将56H写入外写入外RAM的的0438H单元单元 ANL P2,#0F0H ORL P2,#04H MOV R0,#38H MOV A,#56H MOVX R0,A执行不影响P2口高4位状态lDPTR内容为基址内容为基址 MOVC A,A+DPTR ;(A) (A)+(DPTR)该指令首先执行该指令首先执行16位无符号数加法,将获得的基址与变址之位无符号数加法,将获得的基址与变址之和作为和作为16位的程序存储器地址,然后将该地址单元的内容传送到位的

34、程序存储器地址,然后将该地址单元的内容传送到累加器累加器A。指令执行后。指令执行后DPTR的内容不变。的内容不变。lPC内容为基址内容为基址MOVC A,A+PC ;(A)(A)+(PC)取出该单字节指令后取出该单字节指令后PC的内容增的内容增1,以增,以增1后的当前值去执行后的当前值去执行16位无符号数加法,将获得的基址与变址之和作为位无符号数加法,将获得的基址与变址之和作为16位的程序位的程序存储器地址。然后将该地址单元的内容传送到累加器存储器地址。然后将该地址单元的内容传送到累加器A。指令执。指令执行后行后PC的内容不变。的内容不变。 读读ROM指令指令(2条条)例:求平方数例:求平方数

35、(查表法查表法) MOV DPTR, #TABLE ;指向表首址;指向表首址 MOVC A,A+DPTR ;查表得到平方数;查表得到平方数 MOV 20H,A ;存平方数;存平方数 HERE:SJMP HERETABLE DB 00H,01H,04H,09H ;平方表;平方表0292 DB 16H,25H,36H DB 49H,64H,81H 合法指令合法指令or非法指令?非法指令?lMOV R5,R2lMOV R2,#60HlMOV R2,#60HlMOV R7,R1lMOV A,R1lMOV R0,AcclMOV SBUF,R1lMOV R0,60HlMOV 60H,R0lMOV DPTR

36、,#1234HlMOV DPTR,#30HlMOVX DPTR,AlMOVX R0,PSWlMOVX R0,AlMOVX R0,AcclMOVC A,R0lMOVC A,DPTRlMOVC A,A+PC5. 交换指令交换指令(5 5条)条) 交换类指令完成的传送是双向的,是两交换类指令完成的传送是双向的,是两字节间或两半字节间的双向交换字节间或两半字节间的双向交换 。 XCH A,Rn XCH A,Rn ; (A)(Rn); (A)(Rn),n=0n=07 7 XCH A,Ri XCH A,Ri ; (A)(Ri); (A)(Ri),i=0i=0、1 1 XCH A,direct XCH A,

37、direct ; (A)(direct); (A)(direct) 字节交换指令字节交换指令例:设(例:设(R0)30H,(,(A)3FH,片内(,片内(30H)BBH。 执行指令执行指令 XCH A,R0 执行结果执行结果 (A)=BBH,(,(30H)3FH。 半字节交换指令半字节交换指令XCHD A,Ri XCHD A,Ri ; (A); (A)3 30 0(Ri)(Ri)3 30 0 高高4 4位不变。位不变。i=0i=0、1 1 累加器高低四位互换累加器高低四位互换SWAP A SWAP A ; A; A7 74 4AA3 30 0 XCHD指令指令的功能是间址操作数的低半字节的功能

38、是间址操作数的低半字节与与A的低半字节内容互换。的低半字节内容互换。例:若(例:若(R0)30H,(,(30H)67H, (A)20H。执行指令执行指令 XCHD A,R0 指令后,(指令后,(A)27H,(30H)60H。 若(若(A)30H,执行指令,执行指令SWAP A后,(后,(A)03H。PUSH direct PUSH direct ;SP+1SP;SP+1SP,(direct)(SP)(direct)(SP) POP direct POP direct ;(SP)(direct);(SP)(direct),SP-1SPSP-1SP注意:先入后出原则注意:先入后出原则6. 堆栈操作

39、指令堆栈操作指令(2(2条条) ) 在在80C51中,堆栈的生长方向是中,堆栈的生长方向是向上向上的的(地址增大)。(地址增大)。 系统复位时,系统复位时,SP的内容为的内容为07H。通常用。通常用户应在系统初始化时对户应在系统初始化时对SP重新设置。重新设置。SP的的值越小,堆栈的深度越深。值越小,堆栈的深度越深。 PUSHPUSH为入栈指令为入栈指令例例PUSH 30HPUSH 30H;(;(30H30H)=2BH=2BH,具体操作是:具体操作是: POPPOP为出栈指令为出栈指令例例 POP 40H POP 40H ;(40H)=4CH(40H)=4CH,具体操作是:具体操作是:合法指令

40、合法指令or非法指令?非法指令?lPUSH BlPOP R1lPOP AlSWAP AcclSWAP AlPUSH AcclSWAP R0 lXCH 30H,AlXCH A,30HlXCH A,#30HlXCH A,R1lXCH A,R1lXCHD A,R1lXCHD A,R1lXCHD A,30Hl 算术运算指令有加法、减法、乘法和除法四类,算术运算指令有加法、减法、乘法和除法四类,除加除加1和减和减1指令,其他所有的指令都将影响指令,其他所有的指令都将影响PSW的的标志位。标志位。l程序状态字程序状态字PSWD7D6D5D4D3D2D1D0CYACF0RS1RS0OVP进位进位借位借位辅助

41、辅助进位进位自定自定标志标志通用寄存器通用寄存器选择位选择位溢出溢出标志标志奇偶奇偶标志标志二、二、算术运算类指令算术运算类指令 ADD A,Rn ADD A,Rn ;(A)+(Rn)(A)(n=0;(A)+(Rn)(A)(n=07)7) 有进位有进位,Cy=1;,Cy=1;无进位无进位,Cy=0,Cy=0 ADD A,Ri ADD A,Ri ;(A)+(Ri)(A)(i=0;(A)+(Ri)(A)(i=0、1)1) 有进位有进位,Cy=1;,Cy=1;无进位无进位,Cy=0,Cy=0 ADD A,direct ADD A,direct ;(A)+(direct)(A);(A)+(direct

42、)(A) 有进位有进位,Cy=1;,Cy=1;无进位无进位,Cy=0,Cy=0 ADD A,#data ADD A,#data ;(A)+data(A);(A)+data(A) 有进位有进位,Cy=1;,Cy=1;无进位无进位,Cy=0,Cy=0 加法指令加法指令 不带不带CyCy加法指令加法指令(4 4条)条)l例:将内部例:将内部RAM中中40H和和41H单元的数相加,再把单元的数相加,再把和送到和送到42H单元。单元。l MOV A, 40Hl ADD A, 41Hl MOV 42H, Al加法运算对加法运算对PSWPSW标志位的影响标志位的影响l1 1、在上例中,如果运算结果超出、在上

43、例中,如果运算结果超出FFHFFH(255255),将产生),将产生进位进位PSWPSW的的CYCY位将被置位将被置1 1。l2 2、若预先说明、若预先说明40H40H和和41H41H中放置的是有符号数,则在运中放置的是有符号数,则在运算指令算指令“ADD AADD A,41H”41H”执行后,还要检查执行后,还要检查PSWPSW中溢出位中溢出位OVOV的状态,如果的状态,如果OVOV位为位为1 1,则运算结果错误。,则运算结果错误。l溢出产生的条件:溢出产生的条件:l在运算时,如果在运算时,如果D6D6位和位和D7D7位中一个有进位而另一个无位中一个有进位而另一个无进位,则进位,则OV=1O

44、V=1,溢出。即:,溢出。即:OverFlow=C6C7OverFlow=C6C7 OverFlow=1,OverFlow=1,溢出溢出OverFlow=0:OverFlow=0:无溢出。无溢出。l溢出发生在有符号数的运算中溢出发生在有符号数的运算中, ,同符号数相加或异符号同符号数相加或异符号数相减,则可能发生溢出。异号数相加一定不会产生溢出!数相减,则可能发生溢出。异号数相加一定不会产生溢出!例:例:3AH3AH + + 7CH7CH?无符号数运算:无符号数运算: 58 58124124182182,范围内,无进位;,范围内,无进位; 有符号数运算:有符号数运算: 58 581241241

45、82 182 ,范围外,有溢出。,范围外,有溢出。CPU对两个操作数进行运算时,按照无符号数求得结对两个操作数进行运算时,按照无符号数求得结果,并相应设置进位标志果,并相应设置进位标志CYCY;同时,根据是否超出有;同时,根据是否超出有符号数的范围设置溢出标志符号数的范围设置溢出标志OVOV。那么到底应该利用哪个标志呢?那么到底应该利用哪个标志呢?由程序员来决定。也就是说,如果将参加运算的操作由程序员来决定。也就是说,如果将参加运算的操作数认为是无符号数,就应该关心进位;认为是有符号数认为是无符号数,就应该关心进位;认为是有符号数,则要注意是否溢出。数,则要注意是否溢出。B6HB6H 带带Cy

46、Cy加法指令加法指令(4 4条)条) ADDC A,Rn ; ADDC A,Rn ; ( (A)+(Rn)+(Cy)(A)(n=0A)+(Rn)+(Cy)(A)(n=07)7) 有进位有进位,Cy=1;,Cy=1;无进位无进位,Cy=0,Cy=0 ADDC A,Ri ; ADDC A,Ri ; ( (A)+(Ri)+(Cy)(A)(i=0A)+(Ri)+(Cy)(A)(i=0、1)1) 有进位有进位,Cy=1;,Cy=1;无进位无进位,Cy=0,Cy=0 ADDC A,direct ; ADDC A,direct ; ( (A)+(direct)+(Cy)(A)A)+(direct)+(Cy)

47、(A) 有进位有进位,Cy=1;,Cy=1;无进位无进位,Cy=0,Cy=0 ADDC A,#data ; ADDC A,#data ; ( (A)+data+(Cy)(A)A)+data+(Cy)(A) 有进位有进位,Cy=1;,Cy=1;无进位无进位,Cy=0 ,Cy=0 加的进位标志加的进位标志CyCy的值的值是在该指令执行之前是在该指令执行之前已经存在已经存在的的进位标志的值,而不是执行该指令过程中产生的进位。进位标志的值,而不是执行该指令过程中产生的进位。l例:加数存放在内部例:加数存放在内部RAMRAM的的41H41H(高位)和(高位)和40H40H(低(低位),被加数存放在位),

48、被加数存放在43H43H(高位)和(高位)和42H42H(低位),将(低位),将它们相加,和存放在它们相加,和存放在46H44H46H44H中。中。l程序:程序:l CLR Cl MOV A, 40Hl ADD A, 42Hl MOV 44H,Al MOV A, 41Hl ADDC A, 43Hl MOV 45H,Al CLR Al ADDC A, #00Hl MOV 46H,A 减法指令减法指令(4 4条)条) SUBB A,Rn SUBB A,Rn ; (A)-(Rn)-(Cy)(A); (A)-(Rn)-(Cy)(A), 有借位有借位,Cy=1;,Cy=1;无借位无借位,Cy=0,Cy=

49、0 SUBB A,Ri SUBB A,Ri ; (A)-(Ri)-(Cy)(A); (A)-(Ri)-(Cy)(A), 有借位有借位,Cy=1;,Cy=1;无借位无借位,Cy=0,Cy=0 SUBB A,direct SUBB A,direct; (A)-(direct)-(Cy)(A), ; (A)-(direct)-(Cy)(A), 有借位有借位,Cy=1;,Cy=1;无借位无借位,Cy=0,Cy=0 SUBB A,#data SUBB A,#data ; (A)-data-(Cy)(A), ; (A)-data-(Cy)(A), 有借位有借位,Cy=1;,Cy=1;无借位无借位,Cy=0

50、,Cy=0 如要用此组指令完成不带借位减法,如要用此组指令完成不带借位减法,只需先清只需先清CyCy为为 0 0。 INC A INC A ;(A)+1(A);(A)+1(A) INC Rn INC Rn ;(Rn)+1(Rn),n=0;(Rn)+1(Rn),n=07 7 INC Ri INC Ri ;(Ri)+1(Ri), i=0;(Ri)+1(Ri), i=0、1 1 INC direct INC direct ;(direct)+1(direct);(direct)+1(direct) INC DPTR INC DPTR;(DPTR)+1(DPTR);(DPTR)+1(DPTR) 加加1

51、减减1指令指令 加加1指令指令(5 5条)条) DEC A ;(A)-1(A) DEC A ;(A)-1(A) DEC Rn ;(Rn)-1(Rn), n=0 DEC Rn ;(Rn)-1(Rn), n=07 7 DEC Ri ;(Ri)-1(Ri), i=0 DEC Ri ;(Ri)-1(Ri), i=0、1 1 DEC direct ;(direct)-1(direct) DEC direct ;(direct)-1(direct) 加加1 1减减1 1指令涉及指令涉及 A A时,会影响时,会影响P P,但不,但不影响其他标志位。影响其他标志位。 (2) 减减1指令指令(4 4条)条)l思

52、考:设思考:设(A)=FFH,(R0)=27H,(26H)=3AH 执行程序:执行程序:DEC A DEC R0 DEC R0 l结果结果(A)=_ ,(R0)=_ ,(26H)=_ 。l若若(A) = 0, DEC A后后 (A) = ? BCDBCD码调整指令码调整指令DA ADA A功能:功能:对累加器对累加器A中刚进行的两个中刚进行的两个BCD码的加法码的加法的结果进行十进制调整。的结果进行十进制调整。l 指令的功能是指令的功能是两个压缩的两个压缩的BCD码码按二进制相加后,必按二进制相加后,必须经过调整方能得到正确的压缩须经过调整方能得到正确的压缩BCD码的和。码的和。 调整要完成的

53、任务是:调整要完成的任务是:(1)当累加器)当累加器A中的中的低低4位数出现了非位数出现了非BCD码码(10101111)或低)或低4位产生进位(位产生进位(AC=1),则应),则应在低在低4位加位加6调整,以产生低调整,以产生低4位正确的位正确的BCD结果。结果。(2)当累加器)当累加器A中的中的高高4位数位数出现了非出现了非BCD码码(10101111)或高)或高4位产生进位(位产生进位(CY=1),则应),则应在高在高4位加位加6调整,以产生高调整,以产生高4位正确的位正确的BCD结果。结果。 例:设(例:设(A)0101 011056 BCD, (R3) 0110 011167 BCD

54、,(,(CY)1。执行指令:执行指令: ADDC A,R3 DA A执行执行 ADDC A,R3 (A) 0 1 0 1 0 1 1 0 (56 BCD) (R3) 0 1 1 0 0 1 1 1 (67 BCD) 十十 (CY) 1 . 1 0 1 1 1 1 1 0 (高、低高、低4位均大于位均大于9)再执行再执行DA A 0 1 1 0 0 1 1 0 (加加66H操作操作) Cy=1 0 0 1 0 0 1 0 0 (124 BCD)即即BCD码数码数56671124。例:两个多字节无符号例:两个多字节无符号BCD码数相加码数相加设有两个设有两个4位位BCD码分别存在内部码分别存在内部

55、RAM的的50H、51H和和60H、61H单元中,试编写程序,求两个单元中,试编写程序,求两个BCD码数之和,码数之和,结果存入内部结果存入内部40H、41H单元。单元。MOV R0,#50H;被加数首址;被加数首址MOV R1,#60H ;加数首址;加数首址MOV A,R0 ;取被加数;取被加数ADD A,R1 ;与加数相加;与加数相加DA A ;二十进制调整;二十进制调整MOV 40H,A ;存和;存和INC R0 ;高位相加;高位相加INC R1MOV A,R0ADDC A,R1DA AMOV 41H,A 例:对累加器例:对累加器A中压缩中压缩BCD码数减码数减1 ADD A,#99H

56、DA A SJMP $说明:累加器说明:累加器A允许的最大允许的最大BCD码数为码数为99BCD,当对,当对A实行加实行加99BCD码数时,必然形成对码数时,必然形成对BCD码百位数的进码百位数的进位,而位,而剩在剩在A中的内容正是压缩中的内容正是压缩BCD码数减码数减1。如如BCD的的60H,经加,经加99H和和DA A的调整后,为的调整后,为59H且且CY=1,不考虑进位,不考虑进位CY,则,则BCD码码60159。想一想:用想一想:用DEC指令行不行?指令行不行? 乘除法指令乘除法指令 乘法指令乘法指令(1 1条)条) 功能:功能:是将累加器是将累加器A与寄存器与寄存器B中的中的无符号无

57、符号8位二位二进制数相乘进制数相乘 ,乘积的,乘积的低低8位位留在累加器留在累加器A中,中,高高8位位存存放在寄存器放在寄存器B中。中。l当乘积大于当乘积大于FFH时,溢出标志位(时,溢出标志位(OV)=1。而标。而标志志CY总是被清总是被清0。MUL AB ;累加器;累加器A与与B寄存器相乘寄存器相乘 除法指令除法指令(1 1条)条) DIV ABDIV AB 功能:功能:是将累加器是将累加器A中的无符号中的无符号8位二进制数位二进制数除以寄存器除以寄存器B中的无符号中的无符号8位二进制数位二进制数 ,商的整数商的整数部分存放在累加器部分存放在累加器A中,余数部分存放在寄存器中,余数部分存放

58、在寄存器B中。中。 当除数为当除数为0时,则结果的时,则结果的A和和B的内容不定,的内容不定,且溢出标志位(且溢出标志位(OV)=1。而标志。而标志CY总是被清总是被清0。例:例: 数的码制转换数的码制转换。把累加器。把累加器A中无符号二进制中无符号二进制整数整数 (00FFH) 转换为转换为3位压缩位压缩BCD码码 (0255) ,并存入内存并存入内存30H和和31H单元。单元。BINBCD:MOV B,#100 DIV AB ;A100 百位数在百位数在A,余数在,余数在B MOV 30H,A ;百位数送;百位数送30H MOV A,B MOV B,#10 DIV AB ;余数;余数10

59、,十位数在,十位数在A低低4位位, ;个位数在;个位数在B SWAP A ;十位数放;十位数放A的高的高4位位 ADD A,B ;十位数和个位数组合后送;十位数和个位数组合后送31H MOV 31H,A RET算术运算类指令(算术运算类指令(24条)条) 算术运算指令可以完成加、减、乘、除及加加算术运算指令可以完成加、减、乘、除及加加1和减和减1等运算。这类指令多数以等运算。这类指令多数以A为源操作数之一,为源操作数之一,同时又使同时又使A为目的操作数。为目的操作数。 合法指令合法指令or非法指令?非法指令?lADD A,BlADD Rn,#datalADD B,AlADDC A,30HlAD

60、DC Acc,#30HlSUBB A,PSWlSUBB A,R1lSUBB A,R2lSUBB B,AlADD A,AcclINC BlINC DPTRlDEC R2lDEC R2lDEC DPTRlMUL A,BlMUL BAlDIV AB三、三、逻辑运算及移位指令逻辑运算及移位指令 ANL A,Rn ANL A,Rn ;(A)(Rn)(A);(A)(Rn)(A) ANL A,Ri ANL A,Ri ;(A)(Ri)(A);(A)(Ri)(A) ANL A,#data ANL A,#data ;(A)data(A);(A)data(A) ANL A,direct ANL A,direct ;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论