单片机原理及应用教程(C语言版)-第3章 MCS-51指令系统及汇编程序设计_第1页
单片机原理及应用教程(C语言版)-第3章 MCS-51指令系统及汇编程序设计_第2页
单片机原理及应用教程(C语言版)-第3章 MCS-51指令系统及汇编程序设计_第3页
单片机原理及应用教程(C语言版)-第3章 MCS-51指令系统及汇编程序设计_第4页
单片机原理及应用教程(C语言版)-第3章 MCS-51指令系统及汇编程序设计_第5页
已阅读5页,还剩139页未读 继续免费阅读

下载本文档

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

文档简介

1、单片机原理及应用教程 (C语言版)第3章 MCS-51指令系统(zh ln x tn)及汇编程序设计主 编:周国运(u yn)中国水利水电出版社共一百四十四页第3章 MCS-51指令系统(zh ln x tn)及汇编程序设计目 录3.1 汇编语言概述 3.2 MCS-51单片机寻址方式(fngsh)3.3 MCS-51单片机指令系统3.4 MCS-51单片机伪指令3.5 汇编语言程序设计共一百四十四页 本章讨论MCS-51单片机的指令系统及汇编语言程序设计。内容主要包括:汇编语言基本概念、寻址方式、指令系统、伪指令、汇编语言程序举例。本章是单片机程序设计的基础(jch),即便是主要用C语言做设

2、计程序,但对某些要求较高的部分,还是需要用汇编语言来写程序。 共一百四十四页3.1 汇编语言(hu bin y yn)概述 主要(zhyo)内容3.1.1 指令和机器语言3.1.2 汇编语言3.1.3 汇编语言指令格式共一百四十四页3.1.1 指令(zhlng)和机器语言一、指令和指令系统指令:是计算机中CPU根据人的意图来执行某种操作的命令(mng lng)。指令系统:是一台计算机(CPU)所能执行的全部指令的集合。指令系统的强弱,决定了计算机智能的高低。共一百四十四页3.1.1 指令(zhlng)和机器语言二、程序和程序设计语言程序:人们编写的、使计算机完成(wn chng)某项工作的指令

3、序列,称为程序。程序设计:编写程序的过程叫程序设计程序设计语言:编写程序的一整套规则、方法程序设计语言分类:分为机器语言、汇编语言和高级语言等。共一百四十四页3.1.1 指令(zhlng)和机器语言三、机器语言机器语言:用二进制编码表示每条指令,是计算机能够直接识别和执行的语言。目标程序:用机器语言编写(binxi)的程序。例如“13+25” ,在MCS-51中的机器码为0 1 1 1 0 1 0 0 0 0 0 0 1 1 0 10 0 1 0 0 1 0 0 0 0 0 1 1 0 0 1用十六进制表示指令码为:74H 0DH把13放到累加器A中24H 19H A加25,结果仍放回A中共一

4、百四十四页3.1.2 汇编语言(hu bin y yn)汇编语言:用助记符、符号、数字等表示指令的程序语言。例如,上面的“13+25”的例子可写成:汇编语言程序机器语言代码MOV A,#0DH74H 0DHADD A,#19H24H 19H相对于机器语言来说,汇编语言容易理解(lji)和记忆。 汇编语言和机器语言都属于低级语言。 共一百四十四页3.1.3 汇编语言(hu bin y yn)指令格式一、MCS-51汇编语言指令格式由四部分组成,其一般格式如下:标号(bioho): 操作码 操作数 ;注释方括号中的内容可以没有,即可以没有标号、操作数和注释,至少要有操作码。其操作数部分最多可以是三

5、项:第1个操作数 , 第2个操作数 , 第3个操作数对MOV指令,有两项,第1操作数常称为目的操作数,第2操作数称为源操作数。共一百四十四页3.1.3 汇编语言(hu bin y yn)指令格式例如(lr):START:MOV A,#23H ;23H A“START”为标号“MOV”为操作码“ A,#23H”为操作数“23H A”为注释 共一百四十四页3.1.3 汇编语言(hu bin y yn)指令格式二、MCS-51汇编指令构成1、单字节指令指令中或者(huzh)没有操作码,或者(huzh)既包含有操作码,也包含有操作数,有两种情况。1)指令中没有操作码:如 RET、RETI2)指令码中包

6、含着对某个寄存器的操作如:“INC A”、“MUL AB”、“RL A”、“CLR C”、“INC DPTR”等指令。3)由指令码中的r r r或i指定操作数 共一百四十四页3.1.3 汇编语言指令(zhlng)格式这种情况是指令中使用(shyng)了Rn或Ri如“MOVRn,A”编码格式为:1 1 1 1 1 r r rrrr的取值为:07,表示R0R7又如“MOV A,Ri”编码格式为:1 1 1 0 0 1 1 ii取值为:0、1,表示R0、R12、双字节指令一个字节表示操作码,另一个字节表示操作数或操作数的地址。3、三字节指令一个字节表示操作码,另两个字节表示操作数或操作数的地址。共一

7、百四十四页3.2 MCS-51单片机寻址方式(fngsh) 主要内容(nirng)3.2.1 立即寻址3.2.2 寄存器寻址3.2.3 直接寻址3.2.4 寄存器间接寻址3.2.5 变址寻址3.2.6 位寻址3.2.7 指令寻址3.2.8 寻址空间及指令中的符号共一百四十四页 寻址方式:就是指CPU寻找参与运算的操作数的方式,或者寻找数据保存位置的方式。7种寻址方式:立即数寻址、寄存器寻址、直接寻址、寄存器间接寻址、变址寻址、位寻址和指令寻址。寻址方式分两类:操作数寻址和指令寻址,在7种寻址方式中,除了指令寻址之外,其余6种都属于操作数寻址。 寻址方式是汇编语言(hu bin y yn)程序设

8、计中最基本的内容之一,必须要十分熟悉。3.2 MCS-51单片机寻址方式(fngsh) 共一百四十四页3.2.1 立即(lj)数寻址立即数寻址也叫立即寻址、常数寻址。其操作数就在指令中,是指令的一部分,紧跟在操作码后面,用“#”符号(fho)作前缀,以区别地址。例如:MOV A,#2CH;2CH A MOV A,2CH;(2CH) A前者表示把2CH这个数送给累加器A,后者表示把片内RAM中地址为2CH单元的内容送给累加器A。 共一百四十四页3.2.1 立即(lj)数寻址立即数也可以是16位的,如:MOVDPTR,#1234HMOVTL2,#2345HMOVRCAP2L,#3456H对于第2条

9、指令(zhlng),立即数的低8位送给了TL2,高8位送给了TH2;对于第3条指令,立即数的低8位送给了RCAP2L,高8位送给了RCAP2H。 共一百四十四页3.2.2 寄存器寻址寄存器寻址:操作数在指令的寄存器中。指令中的寄存器包括:R0R7、A、B、DPTR。例如:MOVA,R7;(R7) AMOV36H,A;(A) 36HADDA,R0;(A)+(R0) A对于工作寄存器组的操作,必须要考虑PSW中RS1、RS0的值,确定当前使用(shyng)的是哪一组寄存器以及它们的实际地址。下面指令中的目的操作数不是寄存器寻址:MOVPCON, #05H 共一百四十四页3.2.2 寄存器寻址图3-

10、1 寄存器寻址方式(fngsh)(INC R3)程序存储器片内RAM:+1PC00011011操作码工作寄存器地址13H(R3)24H:00010r r r:PSWRS1RS0共一百四十四页3.2.3 直接(zhji)寻址直接寻址:是指操作(cozu)存放在片内RAM中,指令中给出操作数的地址。例如:MOVA,38H;(38H) A说明: (1)直接寻址方式可以访问片内RAM的低128字节和所有的特殊功能寄存器。(2)直接寻址不能够访问片内RAM的高128字节,高128字节只能够间接访问。对于特殊功能寄存器,既可以使用地址,也可以使用SFR名。例如:MOVA,P1 或 MOVA,90H 共一百

11、四十四页3.2.4 寄存器间接(jin ji)寻址寄存器间接(jin ji)寻址:是指操作数存放在RAM中,指令中给出存放操作数地址的寄存器,通过寄存器内的地址,CPU间接地访问操作数。存放地址的寄存器称为间址寄存器,在指令中,在寄存器前面加前缀“”表示。使用的间址寄存器:Ri(i=0、1,即指R0、R1)、SP、DPTR。寄存器间接寻址有以下几种情况。 共一百四十四页3.2.4 寄存器间接(jin ji)寻址一、使用Ri间接访问片内RAM间接访问的范围:256字节(包括(boku)低128字节和高128字节),但不包括特殊功能寄存器。例如:MOVA,Ri;(Ri) AMOVR0,A;(A)(

12、Ri)(Ri):表示Ri指向的单元,即单元的地址 (Ri):表示Ri指向单元中的数据操作过程如下页图3-3所示。共一百四十四页3.2.4 寄存器间接(jin ji)寻址对使用SP间接访问片内RAM (在C语言中也可以访问片外RAM) ,仅用在堆栈操作(cozu)中,见后面指令系统。 间接寻址(MOV A,R0)示意图 62HA:62H98H 98HR0:片内RAM共一百四十四页3.2.4 寄存器间接(jin ji)寻址二、使用Ri间接访问片外RAM间接访问的范围:片外RAM的64KB全空间。其指令只有两条:MOVXA,Ri ;(P2) (Ri) AMOVXRi,A ;(A)(P2 Ri)注意:

13、 (1)P2中的值作为高8位地址,Ri中的值作为低8位地址; (2)如果P2不改变(gibin),则范围为256B;(3)这两条指令均为总线操作,相应总线信号有效(高低8位地址、ALE、RD或WR)。共一百四十四页3.2.4 寄存器间接(jin ji)寻址三、使用DPTR间接(jin ji)访问片外RAM间接访问的范围:片外RAM的64KB全空间。其指令也是只有两条:MOVXA,DPTR;(DPTR) AMOVXDPTR,A;(A)(DPTR)DPTR为16位地址。 共一百四十四页3.2.5 变址寻址变址寻址:实为基址加偏移的间接寻址。指令中给出存放基址和偏移的寄存器。基地址寄存器:DPTR或

14、PC;偏移寄存器:累加器A。也在地址寄存器前面(qin mian)加上前缀“”。仅两条指令:MOVC A,A+DPTR ;(A)+(DPTR) AMOVC A,A+PC ;(A)+(PC) A该指令是在程序存储空间读取数据。该指令的操作过程如图3-4所示。 共一百四十四页3.2.5 变址寻址图3-4 变址寻址(MOVC A,A+DPTR)示意图ROM:DPTR03E2H+ 0414H 38HA32H:A38H共一百四十四页3.2.5 变址寻址变址寻址的空间:为程序(chngx)存储器寻址范围:若使用DPTR为基地址寄存器,寻址范围为64KB;若使用PC为基地址寄存器,寻址空间在PC之后256字

15、节范围内。变址寻址主要用于查表操作 共一百四十四页3.2.6 位寻址位寻址:是指操作数是二进制位数据、位地址(dzh)位操作数地址范围:片内RAM中20H2FH,SFR中可以按位寻址的位。位地址在指令中用bit表示。例如:SETBbitMOVC,bit 共一百四十四页3.2.6 位寻址位地址的4种表示方式:1)直接位地址(00HFFH)。如32H2)字节地址带位号。如20H.1,表示20H单元(dnyun)的第1位。3)特殊功能寄存器名带位号。如P1.7,表示P1口的第7位。4)位符号地址。具体的:特殊功能寄存器SFR位名,如TR0等用伪指令 “BIT”定义的位符号,如: flag BIT 0

16、1H ;flag表示01H位共一百四十四页3.2.7 指令(zhlng)寻址指令寻址:指令中的操作数给出转移的目标地址或目标地址的一部分。指令寻址分为(fn wi)绝对寻址和相对寻址两种方式。指令寻址用于控制转移指令中。共一百四十四页3.2.7 指令(zhlng)寻址一、绝对寻址绝对寻址:指令中的操作数给出转移的16位目标(mbio)地址。寻址范围:64KB全空间。绝对寻址用在长转移和长调用指令中,例如:LJMPSER_INT_T1;无条件转移到T1中断服务程序LCALLSUB_SORT;SUB_SORT调用排序子程序SUB_SORT为16位目标地址标号共一百四十四页3.2.7 指令(zhln

17、g)寻址二、相对寻址相对寻址:是以当前程序计数器PC值为基地址,加上指令中给出的偏移量rel,得到目标位置的地址。即:目标地址PCrelrel目标地址PC偏移量rel为8位补码,其值为-128+127。rel0表明(biomng)目标地址小、源地址大,程序向回跳转;rel0,程序向前跳转。共一百四十四页3.2.7 指令(zhlng)寻址例如:JZFIRST;(A)0,跳转到FIRSTDJNZR7,LOOP;(R7)-10,跳转到LOOP说明:(1)在实际编程中,不需要计算(j sun)rel,rel由编译器自动计算;(2)当跳转范围超出了rel范围,编译器会提示,对程序做适当调整即可。 共一百

18、四十四页3.2.8 寻址空间(kngjin)及指令中的符号注释一、寻址方式、寻址空间及范围寻址方式操作数及寻址空间范围立即数寻址在ROM中,随指令读入直接寻址片内RAM中,低128字节和SFR寄存器寻址使用的寄存器:R0R7、A、B、C、DPTR 寄存器间接寻址片内RAM:用Ri、SP;范围256B,不含SFR片外RAM:用Ri、DPTR;范围为64KB变址寻址用A+PC、A+DPTR;在ROM中;范围分别为PC之后256B之内和64KB全空间位寻址在位寻址区域;RAM的202FH和SFR中的位指令绝对寻址操作数是目标地址;在ROM中; 64KB全空间指令相对寻址操作数是相对地址;在ROM中;

19、范围-128127共一百四十四页3.2.8 寻址空间及指令(zhlng)中的符号注释二、指令中常用符号Rn:n=07。当前选中的工作寄存器R0R7。Ri: i=0、1。当前选中的工作寄存器组中可作为地址指针的R0和R1。#data:8位立即数。#data16:16位立即数。direct:8位片内RAM单元地址,包括低128B和SFR,但不包括高128B。addr16:程序存储空间的16位地址rel:补码形式(xngsh)的8位地址偏移量。以下面指令的第一个字节为基地址,地址偏移量在 -128+127。 共一百四十四页3.2.8 寻址空间(kngjin)及指令中的符号注释bit:片内RAM或SF

20、R中的直接位地址:间址寄存器的前缀符号,表示间接寻址。():表示中的内容 (): 中的内容是地址, ()表示由中指向的地址单元(dnyun)中的内容如 (SP) : (SP)是寄存器中的内容,是地址; (SP)是SP内容所指向单元的数据。:逻辑与:逻辑或:逻辑异或、:指令操作流程,将内容送到箭头指向的地方 共一百四十四页3.3 MCS-51单片机指令系统(zh ln x tn) 主要内容3.3.1 数据传送指令3.3.2 算术运算(yn sun)指令3.3.3 逻辑运算指令3.3.4 控制程序转移指令3.3.5 位操作指令共一百四十四页3.3 MCS-51单片机指令系统(zh ln x tn)

21、 指令概述MCS-51单片机指令系统有111条指令,分类如下。1、按字节分类单字节指令:49条;双字节指令:45条三字节指令:17条2、按执行(zhxng)时间分类单周期指令:64条;双周期指令:45条四周期指令:2条(乘、除指令)共一百四十四页3.3 MCS-51单片机指令系统(zh ln x tn) 3、按功能(gngnng)分类(分为5大类)数据传送指令:29条算术运算指令:24条逻辑运算指令:24条控制程序转移指令:17条位操作指令:17条MCS-51指令没有复杂的寻址方式,并且助记符只有42种,所以单片机指令容易理解、容易记忆、容易掌握。 共一百四十四页3.3.1 数据(shj)传送

22、指令数据(shj)传送是使用最频繁的一类指令。所谓传送,就是把源地址单元的内容传送到目的地址单元中去,而源地址单元中的内容不变。数据传送指令可以分为三组:普通传送指令数据交换指令堆栈操作指令对程序状态字的影响:这类指令一般不影响程序状态字,只有目的操作数是累加器A时,影响标志位P。共一百四十四页3.3.1 数据(shj)传送指令一、普通传送指令普通传送指令以助记符MOV为基础,分为:片内数据(shj)存储器传送指令,用MOV片外数据传送指令,用MOVX程序存储器传送指令,用MOVC共一百四十四页3.3.1 数据传送(chun sn)指令1、片内数据存储器传送指令MOV 格式: MOV 目的操作

23、数,源操作数源操作数:可以是A、Rn、Ri、 direct、#data目的操作数:可以是A、Rn、Ri、direct、DPTR以目的操作数的不同可以分为(fn wi)五个小组,共16条指令。 共一百四十四页3.3.1 数据(shj)传送指令(1)以A为目的操作数机器码MOVA,Rn ;(Rn)A E8EFMOVA,direct ;(direct)A E5 directMOVA,Ri ;(Ri)A E6 E7 MOVA,#data ;data A 74 data工作寄存器Rn:R0R7Ri间接寻址寄存器:R0或R1本组4条指令都影响(yngxing)PSW中的P标志位指令字节数:1、2、1、2

24、共一百四十四页3.3.1 数据传送(chun sn)指令(2)以Rn为目的操作数MOVRn,A;(A) Rn MOVRn,direct;(direct) RnMOVRn,#data;data Rn本组指令(zhlng)都不影响PSW中的标志位。指令字节数:1、2、2 共一百四十四页3.3.1 数据传送(chun sn)指令(3)以直接地址(dzh)direct为目的操作数MOVdirect,A;(A) directMOVdirect,Rn;(Rn) directMOVdirect2,direct1;(direct1)direct2MOVdirect,Ri;(Ri) directMOVdirec

25、t,#data;data direct本组指令都不影响PSW中的标志位指令字节数:2、2、3、2、3 共一百四十四页3.3.1 数据传送(chun sn)指令(4)以间接地址Ri为目的(md)操作数MOVRi,A;(A) Rn MOVRi,direct;(direct) RnMOVRi,#data;data Rn本组指令都不影响PSW中的标志位。 (5)以DPTR为目的操作数MOVDPTR,#data16;dataHDPH,dataLDPL该指令不影响PSW中的标志位。共一百四十四页3.3.1 数据传送(chun sn)指令例3-1 设片内RAM中(30H)=40H,(40H)=10H,分析以

26、下程序执行后各单元及寄存器中的内容。MOVR0,#30H;30H R0MOVA,R0;(R0) AMOVR1,A;(A) R1MOVB,R1;(R1) BMOV10H,#20H;20H 10H执行上述指令(zhlng)后的结果为:(R0)=30H,(R1)=(A)=40H,(B)=10H,(10H)=20H共一百四十四页3.3.1 数据(shj)传送指令2、片外数据存储器传送指令MOVXMOVXA,Ri;(P2),(Ri) AMOVXRi,A;A (P2, Ri)MOVXA,DPTR;(DPTR) AMOVXDPTR,A;A (DPTR)第1和第3条指令是执行总线读操作(cozu),读控制信号

27、RD有效;第2和第4条指令是执行总线写操作,写控制信号WR有效。这组指令中第1、3两条指令影响P标志位,其它2条指令不影响任何标志位。 共一百四十四页3.3.1 数据(shj)传送指令例3-2 设片外RAM空间(0203H)=6FH,分析(fnx)执行下面指令后的结果。MOVDPTR,#0203H;0203H DPTRMOVXA,DPTR;(DPTR) AMOV30H,A;(A) 30HMOVA,#0FH;0FH AMOVXDPTR,A;(A) (DPTR)执行结果为:(DPTR)=0203H,(30H)=6FH,(0203H)=(A)=0FH共一百四十四页3.3.1 数据传送(chun sn

28、)指令3、程序(chngx)存储器传送指令MOVC该类指令又称为查表指令,经常用于查表。这类指令只有以下2条单字节指令。MOVCA,A+DPTR ;(A)+(DPTR) AMOVCA,A+PC ;(A)+(PC) A前者叫远程查表指令(64KB全空间),后者叫近程查表指令(PC处256B)。这两条指令都影响P标志位。共一百四十四页3.3.1 数据(shj)传送指令地址偏移量的计算方法使用第2条指令的关键,是准确计算从本指令到数据所在处的地址偏移量。将分为(fn wi)两段:表首偏移和表内偏移地址偏移量表首偏移量表内偏移量表首偏移量为:表首偏移量表首地址PC共一百四十四页3.3.1 数据(shj

29、)传送指令例3-3 从程序存储器2000H单元开始存放09的平方值,编写程序,以DPTR或PC作为基址寄存器,执行查表指令得到(d do)6的平方值,并且送到片内RAM中的30H单元。用以DPTR为基址寄存器的查表指令,其程序如下:MOVDPTR,#2000HMOVA,#6;表内偏移MOVCA,A+DPTR MOV30H,A通过本例对两条查表指令比较可以看出,以DPTR为基址寄存器的查表指令使用简单、方便。共一百四十四页3.3.1 数据(shj)传送指令下面用以PC为基址寄存器,实现查表功能(gngnng)。设MOVC指令所在的地址为1FA0H,则表首偏移量2000HPC 2000H(1FA0

30、H1)5FH表内偏移量为6,总偏移量为5FH6。其程序为:MOVA,#5FH;表首偏移送AADDA,#06H;计算总偏移MOVCA,A+PC;读表中数据MOV30H,A 共一百四十四页3.3.1 数据(shj)传送指令二、数据交换指令数据交换指令则数据作双向传送,传送后,前一个操作数传送到了后一个操作数所保存的地方,后一个操作数传送到了前一个操作数所保存的地方。数据交换指令要求第一个操作数必须为累加器A。共5条指令,分为(fn wi)字节交换和半字节交换两个类型。 共一百四十四页3.3.1 数据传送(chun sn)指令1、字节交换指令(zhlng)XCHA,Rn;ARnXCHA,direct

31、;A(direct)XCHA,Ri;A(Ri)这3条指令都影响P标志位2、低半字节交换指令XCHDA,Ri ;A03(Ri) 0 3这条指令影响P标志位3、A自身半字节交换指令SWAPA ;A 03A47这条指令不影响任何标志位共一百四十四页3.3.1 数据传送(chun sn)指令例3-4 设R0=30H,(30H)=4AH,A=28H,分别(fnbi)执行“XCH A,R0”、 “XCH A,R0” “XCHD A,R0”、“SWAP A”后各单元的内容。执行:XCH A,R0 ;后(A)=30H,(R0)=28H执行:XCH A,R0 ;后(A)=4AH,(30H)=28H执行:XCHD

32、 A,R0 ;后(A)=2AH,(30H)=48H执行:SWAP A;后(A)=82H,(30H)=4AH共一百四十四页3.3.1 数据(shj)传送指令三、堆栈操作指令堆栈操作有进栈和出栈两条指令,常用于保存(bocn)和恢复现场。PUSHdirect;先(SP) +1 SP, ;后(direct)(SP)POPdirect;先(SP) direct, ;后(SP) -1 SPPUSH为进栈操作, POP为出栈操作。当操作数是累加器A时,影响P标志位。 共一百四十四页3.3.1 数据(shj)传送指令例3-5 若在程序存储器中2000H单元开始的区域依次存放着09的平方值,编写程序,用查表指

33、令读取3的平方值,并存于片内RAM中30H单元,要求操作(cozu)后保持DPTR中原来的内容不变。为了使用DPTR,并且保持原来的内容不变,应该在使用DPTR前使其进栈,使用后再出栈恢复其原来内容。程序如下: 共一百四十四页3.3.1 数据传送(chun sn)指令注意:(1)进栈与出栈必须成对使用(shyng);(2)先进栈的必须后出栈,后进栈的必须先出栈,否则会出现DPL与DPH内容互换。 PUSHDPHPUSHDPLMOVDPTR,#2000HMOVA,#3MOVCA,A+DPTRMOV30H,APOPDPLPOPDPH共一百四十四页3.3.2 算术运算(yn sun)指令指令内容:包

34、括(boku)加、减、乘、除、BCD码调整等指令,共有24条。CPU的运算能力:只能执行无符号二进制整数运算。但借助于溢出标志位,实现有符号数的补码运算;借助于进位标志,可以实现多精度加、减运算。对标志位的影响:结果会影响进位标志CY、半进位标志AC、溢出标志OV、奇偶标志位P,但加1和减1指令不影响这些标志位。共一百四十四页3.3.2 算术(sunsh)运算指令指令中的操作数:第一个操作数:多数为累加器A,第二个操作数:可以是工作寄存器Rn、直接地址数据、间接地址数据和立即数。即:第一个操作数:多为A第二个操作数:Rn、direct、Ri、#data为了便于(biny)讨论,将其分为5组。

35、共一百四十四页3.3.2 算术(sunsh)运算指令一、加法指令分为不带进位加法、带进位加法和加1指令1、不带进位加法指令ADDADD A,Rn;(A)+(Rn)AADD A,direct;(A)+(direct)AADD A,Ri;(A)+(Ri)AADD A,#data;(A)+ dataA 这组指令影响标志位CY、AC、OV和P,溢出标志OV只对有符号运算(yn sun)有意义。 共一百四十四页3.3.2 算术(sunsh)运算指令2、带进位加法指令ADDCADDCA,Rn;(A)+(Rn)+ CYAADDCA,direct ;(A)+(direct)+CYAADDCA,Ri;(A)+(

36、Ri)+CYAADDCA,#data;(A)+data+CYA 这组指令影响标志位CY、AC、OV和P,溢出(y ch)标志OV只对有符号运算有意义。 共一百四十四页3.3.2 算术运算(yn sun)指令例3-7 试编写程序,把R1R2和R3R4中的两个(lin )16位数相加,结果存放在R5R6中。思路:先对两个低字节相加,再对两个高字节相加。 (1)低字节R2和R4相加:使用ADD,其和存放于R6中; (2)高字节R1和R3相加:使用ADDC,其和存放于R5中。程序段如下页。 共一百四十四页3.3.2 算术运算(yn sun)指令程序段如下(rxi):MOVA,R2;(R2) AADDA

37、,R4;(A)+(R4) AMOVR6,A;(A) R6MOVA,R1;(R1) AADDCA,R3;(A)+(R3)+CYAMOVR5,A;(A) R5 共一百四十四页3.3.2 算术运算(yn sun)指令3、加1指令INCINCA;(A)+ 1 AINCRn;(Rn)+ 1 RnINCdirect;(direct)+ 1 directINCRi;(Ri)+ 1 (Ri)INCDPTR;(DPTR)+ 1 DPTR这组指令除了第一条影响(yngxing)标志位P之外,其它指令不影响标志位。 共一百四十四页3.3.2 算术(sunsh)运算指令二、减法指令减法指令分为(fn wi)带借位减法

38、指令和减1指令。1、带借位减法指令SUBBSUBBA,Rn;(A)-(Rn)-CYASUBBA,direct;(A)-(direct)- CYASUBBA,Ri;(A)-(Ri)-CYASUBBA,#data;(A)-data-CYA这组指令影响标志位CY、AC、OV和P,溢出标志OV只对有符号数运算有意义。 共一百四十四页3.3.2 算术运算(yn sun)指令由于(yuy)MCS-51单片机没有不带借位的减法指令,对于不带借位的减法运算,可以先对CY清0,然后再用SUBB命令操作。例3-8 试编写实现“R2R1 R3”功能的程序。程序段如下:MOVA,R2CLRC;对CY清0SUBBA,R

39、1MOVR3,A 共一百四十四页3.3.2 算术运算(yn sun)指令1、减1指令(zhlng)DECDECA;(A) - 1 ADECRn;(Rn) - 1 RnDECdirect;(direct) - 1 directDECRi;(Ri) - 1 (Ri)这组指令除了第一条影响标志位P之外,其它指令不影响标志位。 共一百四十四页3.3.2 算术运算(yn sun)指令三、乘法指令(zhlng)MUL multiplication在MCS-51单片机中,乘法指令只有一条。MUL AB ;(A)(B) B(高字节)、A(低字节)操作:把累加器A和寄存器B中两个8位无符号数相乘,所得的16位积

40、的高字节存放在B中,低字节存放在A中。对标志位的影响:影响P、OV若乘积大于0FFH,OV置1,说明高字节B中不为0,否则OV清0;影响P标志位;对CY总是清0;不影响AC。 共一百四十四页3.3.2 算术(sunsh)运算指令例 设(A)50H,(B)0A0H,分析执行(zhxng)指令“MULAB”后的结果。 指令执行后的结果为:(B)32H,(A)00H即乘积为3200H标志位: Cy0、OV1、P=0、AC不变。共一百四十四页3.3.2 算术运算(yn sun)指令四、除法指令DIV division在MCS-51单片机中,除法指令只有一条。DIV AB;(A)/(B),商A、余B操作

41、:A的内容除以B的内容(均为无符号整数),所得(su d)结果的整数商存放在A中,余数存放在B中。对标志位的影响:如果除数(B)=0,则标志位OV置1,否则清0;影响P标志位;CY总是被清0;不影响AC。共一百四十四页3.3.2 算术运算(yn sun)指令五、十进制调整指令DA十进制调整指令只有一条。DAA;调整A内容为BCD码调整方法:若1)A的低(高)4位为十六进制(sh li jn zh)的AF2)或者标志位AC(CY)为1则A的内容加06H(60H)调整。 适用场合:用于ADD或ADDC指令后,且只能用于压缩的BCD码相加结果的调整。对标志位的影响:影响CY、AC和P,但不影响OV。

42、共一百四十四页3.3.2 算术(sunsh)运算指令例3-9 试编写程序,对两个十进制数76、58相加,并且保持其结果为十进制数,把结果存于R3中。程序段如下:MOVA,#76H;76=4CHADDA,#58H;58=3AHDAA;调整(tiozhng)前为CEHMOVR3,A;调整后为134H程序执行后,R3中的内容为34H,进位标志CY为1,则最后结果为134。编程时,注意对BCD码的写法:要按十进制数格式写,然后在其后面加上H。 共一百四十四页3.3.3 逻辑操作(cozu)指令逻辑操作指令包括与、或、异或、清0、求反、移位等操作指令,共有24条。指令中的操作数:A、Rn、direct、

43、Ri、#data对标志位的影响:一般(ybn)不影响标志位。但是:(1)若累加器A为目的操作数,会影响P;(2)如果带进位位作移位操作,会影响奇偶标志位P、进位标志CY。下面将其分为:与、或、异或、清0与求反、移位,5组进行讨论。共一百四十四页3.3.3 逻辑操作(cozu)指令一、逻辑与指令ANLANLA,Rn ;(A)(Rn) AANLA,direct ;(A)(direct) AANLA,Ri ;(A)(Ri) AANLA,#data ;(A) data AANLdirect,A ;(direct)(A) directANLdirect,#data ;(direct)datadirect

44、逻辑与操作往往用于使某些位清0。这组指令的仅前4条只影响(yngxing)奇偶标志位P。 共一百四十四页3.3.3 逻辑操作(cozu)指令二、逻辑或指令ORLORLA,Rn ;(A)(Rn) AORLA,direct ;(A)(direct) AORLA,Ri ;(A)(Ri) AORLA,#data ;(A)data AORLdirect,A ;(direct)(A) directORLdirect,#data ;(direct)datadirect逻辑或操作往往用于使某些(mu xi)位置1。这组指令的仅前4条只影响奇偶标志位P。 共一百四十四页3.3.3 逻辑操作(cozu)指令三、逻

45、辑异或指令XRL exclusive or XRLA,Rn ;(A) (Rn) AXRLA,direct ;(A) (direct) AXRLA,Ri ;(A) (Ri) AXRLA,#data ;(A) data AXRLdirect,A ;(direct) (A) directXRLdirect,#data ;(direct) datadirect逻辑异或操作往往用于使某些(mu xi)位取反。用1异或使对应位取反这组指令的仅前4条只影响奇偶标志位P。 共一百四十四页3.3.3 逻辑操作(cozu)指令例3-10 写出实现以下(yxi)各功能的指令:1)只对累加器A中的1、3、5位清0;2

46、)只对A中的2、4、6位置1;3)只对A中的0、1、6、7位取反。对应指令如下:ANLA,#11010101BORLA,#01010100B XRLA,#11000011B 共一百四十四页3.3.3 逻辑(lu j)操作指令四、累加器A清0和求反指令CLRA;0 ACPLA;(A) A前一条指令是对A清0,该指令影响奇偶(q u)标志位P。后一条指令是对A求反,不影响任何标志位。CPL(Converse Position Logical) 共一百四十四页3.3.3 逻辑操作(cozu)指令四、循环移位指令 repetition A循环左移: RL A ;A循环右移: RR A ;A带进位(jn

47、wi)循环左移 :RLC A ;A带进位循环右移 :RRC A ;说明:(1)这4条指令,每执行一次只 移动1位;(2)左移一次相当于乘以2,右移一次相当于除以2。对标志位影响:仅后两条指令影响CY和Pa7 a0a7 a0a7 a0CYa7 a0CY共一百四十四页3.3.4 控制程序转移(zhuny)指令计算机功能(gngnng)的强弱,主要取决于转移类指令的多少与功能(gngnng),特别是条件转移指令。MCS-51单片机有17条转移类指令,包括:无条件转移指令条件转移指令子程序调用返回指令等对标志位影响:只有比较转移指令影响进位标志CY,其它指令不影响标志位。下面将其分为4组进行讨论。 共

48、一百四十四页3.3.4 控制程序转移(zhuny)指令一、无条件转移指令无条件转移指令:当程序执行该指令后,程序无条件地转移到指定的地址(dzh)去执行。为指令寻址包括短转移、长转移和间接转移3条指令1、短转移指令SJMP(相对转移指令)SJMPrel;(PC)+ relPCrel:相对转移偏移量,有符号数,128127,负数表示向回跳转,正数表示向前跳转。指令实际写为:“SJMP 目标地址标号”共一百四十四页3.3.4 控制程序转移(zhuny)指令2、长转移指令LJMPLJMPaddr16 ;addr16 PC由于程序的目标地址是16位,因此程序可以跳转到64KB程序存储器空间的任何地方。

49、为指令绝对寻址指令的实际(shj)编写形式为:LJMP 目标地址标号共一百四十四页3.3.4 控制程序转移(zhuny)指令3、间接转移指令JMP也叫散转指令、多分支转移指令。JMP A+DPTR ;(A)+(DPTR)PCDPTR为基址,A为相对偏移(pin y),在64KB范围内无条件转移。说明:(1)DPTR一般为确定的值,累加器A为变值,根据A的值转移到不同的地方,因此该指令也叫散转指令。(2)在使用中,往往与一个转移指令表一起实现多分支转移。 共一百四十四页3.3.4 控制程序转移(zhuny)指令例3-13 分析下面多分支转移程序段。MOVB,#3MULAB;开始时(A)=0、1、

50、2MOVDPTR,#TABLE;表首地址(dzh)送DPTRJMPA+DPTR;根据A值转移TABLE:LJMPTAB0;(A)=0时转到TAB0执行LJMPTAB1;(A)=3时转到TAB1执行LJMPTAB2;(A)=6时转到TAB2执行.程序中,根据累加器A的开始值(0、1、2)转移到相应的TAB0TAB2分支去执行。共一百四十四页3.3.4 控制程序转移(zhuny)指令一、条件转移指令当指令中条件满足时,程序转到指定位置执行,条件不满足时,程序顺序(shnx)执行。条件转移指令有三种:判断累加器A转移指令2条比较转移指令4条循环转移指令2条这类指令都属于相对转移,转移范围均为1281

51、27。需要注意的是:注释中的PC值,均为下一条指令的地址值。 共一百四十四页3.3.4 控制程序转移(zhuny)指令1、判断转移指令判断A为0转移:JZ rel;(A)0, (PC)+ relPC;(A)0, 顺序执行判断A非0转移:JNZ rel;(A)0, (PC)+ relPC;(A)0, 顺序执行指令的实际编写形式分别为:JZ 目标(mbio)地址标号和JNZ 目标地址标号 共一百四十四页3.3.4 控制程序转移(zhuny)指令例3-14 试编写程序,把片外RAM地址从2000H开始的数据,传送到片内RAM地址从30H开始的单元,直到出现(chxin)0为止。程序段如下:MOVDP

52、TR,#2000HMOVR0,#30HLOOP:MOVXA,DPTR;读取数据MOVR0,A;保存INCR0INCDPTRJNZLOOP;(A)0跳转SJMP$;程序停留到此 共一百四十四页3.3.4 控制程序转移(zhuny)指令2、比较转移指令CJNE比较转移指令功能较强,共有4条指令 ,一般格式为:CJNE操作数1,操作数2,rel (目标标号)指令功能:两个操作数做比较,若不等则转移,否则顺序执行(zhxng)。具体形式如下,第一条:CJNEA,direct,rel;若(A)(direct),则(PC) +relPC, 即转移;否则顺序执行且(A)(direct),0CY;(A)(di

53、rect),1CY共一百四十四页3.3.4 控制程序转移(zhuny)指令CJNEA,#data,rel ;若(A) data,则(PC) +relPC, 即转移;否则(fuz)顺序执行且(A)data, 0CY;(A) data, 1CYCJNERn,#data,rel ;若(Rn) data,则(PC) +relPC, 即转移;否则顺序执行且(Rn)data, 0CY;(Rn)data, 1CYCJNERi,#data,rel ;若(Ri) data则(PC) +relPC, 即转移;否则顺序执行且(Ri)data,0CY;(Ri)data, 1CY可见这4条指令会影响进位标志CY共一百四

54、十四页3.3.4 控制程序转移(zhuny)指令3、循环转移指令DJNZ循环转移指令共有两条指:DJNZRn,rel ;(Rn) -1Rn;若(Rn)0,则(PC)+ relPC ,否则(fuz)顺序执行DJNZ direct,rel;(Rn) -1direct;若(direct)0,则(PC)+relPC ,否则顺序执行指令的实际编写形式为:DJNZRn,标地址标号DJNZdirect,目标地址标号控制循环变量控制循环变量共一百四十四页3.3.4 控制程序转移(zhuny)指令例3-15 试编写程序,统计片内RAM中从40H单元开始的20个单元中0的个数,结果存于R2中。用R0作间址寄存器读

55、取数据用JNZ或CJNE,判断数据是否(sh fu)为0用R2记录0的个数用DJNZ、R7控制循环共一百四十四页3.3.4 控制程序转移(zhuny)指令程序段一(用JNZ判断数据是否为0):MOVR0,#40H;R0指向40HMOVR7,#20;R7控制循环MOVR2,#0;R2存放结果(ji gu)LOOP:MOVA,R0JNZNEXT;(A)0转INCR2NEXT:INCR0;修改指针R0DJNZR7,LOOP共一百四十四页3.3.4 控制程序转移(zhuny)指令程序段二 (用CJNE判断数据是否为0):MOVR0,#40H;R0指向40HMOVR7,#20;R7控制循环MOVR2,#

56、0;R2存放(cnfng)结果LOOP:CJNER0,#0,NEXTINCR2NEXT:INCR0DJNZR7,LOOP共一百四十四页3.3.4 控制程序转移(zhuny)指令三、子程序调用和返回(fnhu)指令这类指令有3条,一条调用,两条返回。1、子程序调用指令(也叫长调用指令)LCALLaddr16;(SP)+1SP、(PC70)(SP),;(SP)+1SP、(PC158)(SP),;addr16PC2、子程序返回指令RET ;(SP)PC158 、(SP)-1SP, (SP)PC70、(SP)-1SP 共一百四十四页3.3.4 控制程序转移(zhuny)指令3、中断(zhngdun)服

57、务程序返回指令RETI;(SP)PC158 、(SP)-1SP, ;(SP)PC70、(SP)-1SP “RETI”除了具有“RET”的功能外,还将开放中断逻辑。四、空操作指令NOP;延时一个机器周期常用于延时共一百四十四页3.3.4 控制程序转移(zhuny)指令还有两条指令:以上只有15条指令,剩余的两条指令是:AJMPACALL称为绝对转移(短转移)指令和绝对子程序调用(短调用)指令。初识这两条指令:这两条指令的转移范围是绝对划定的2KB,用不好会出现错误,并且其编码也不好理解(见附录B)。唯一的优点只是比“LJMP”和“LCALL” 少一个字节,在存储器容量大、价格低的今天,其唯一的优

58、点也没有意义,所以没有必要(byo)使用这两条指令。 共一百四十四页3.3.5 位操作指令(zhlng)在进行位操作时,位累加器C即为进位标志CY。位地址区域:(1)片内RAM字节地址20H2FH单元中连续的128个位(位地址为00H7FH);(2)部分SFR中的位,特别是累加器A和寄存器B中的位,与00H7FH位一样,都可以作软件(run jin)标志或位变量。共一百四十四页3.3.5 位操作指令(zhlng)位地址的4种表示方式(fngsh):1)直接位地址(00HFFH),如18H。2)字节地址带位号,如20H.0,表示20H单元的第0位。3)特殊功能寄存器名带位号,如P2.3,表示P2

59、口的第3位。4)位符号地址,具体的:特殊功能寄存器SFR位名,如TR0等用伪指令 “BIT”定义的位符号,如: flag BIT 05H ;flag表示05H位共一百四十四页3.3.5 位操作指令(zhlng)例如,用上述4种方式表示PSW(D0H)中的第2位,分别为:D2H、D0H.2、PSW.2、OV。 位操作指令共有17条,可以将其分成(fn chn)三组:位数据传送指令2条位逻辑操作指令10条位控制转移指令5条位操作的操作数: C、bit共一百四十四页3.3.5 位操作指令(zhlng)一、位传送指令(zhlng)MOVC,bit;(bit) CMOVbit,C;(C) bit例3-1

60、6 编写程序,把片内RAM中07H位的数值,传送到ACC.0位。程序段如下:MOVC,07HMOVACC.0,C注意:位之间不能够直接传送,必须借助于C共一百四十四页3.3.5 位操作指令(zhlng)二、位逻辑操作指令位逻辑操作指令包括(boku)位清0、位置1、位取反、位与、位或,共10条指令。1、位清0指令CLRC;0 CCLRbit;0 bit2、位置1指令SETBC;1 CSETBbit;1 bit 共一百四十四页3.3.5 位操作指令(zhlng)3、位取反指令(zhlng)(Converse Position Logical)CPLC;(C) CCPLbit;(bit) bit4

温馨提示

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

评论

0/150

提交评论