单片机应用技术C语言版MCS51指令系统及汇编课件.ppt

上传人:牧羊曲112 文档编号:3998199 上传时间:2023-03-30 格式:PPT 页数:123 大小:717.50KB
返回 下载 相关 举报
单片机应用技术C语言版MCS51指令系统及汇编课件.ppt_第1页
第1页 / 共123页
单片机应用技术C语言版MCS51指令系统及汇编课件.ppt_第2页
第2页 / 共123页
单片机应用技术C语言版MCS51指令系统及汇编课件.ppt_第3页
第3页 / 共123页
单片机应用技术C语言版MCS51指令系统及汇编课件.ppt_第4页
第4页 / 共123页
单片机应用技术C语言版MCS51指令系统及汇编课件.ppt_第5页
第5页 / 共123页
点击查看更多>>
资源描述

《单片机应用技术C语言版MCS51指令系统及汇编课件.ppt》由会员分享,可在线阅读,更多相关《单片机应用技术C语言版MCS51指令系统及汇编课件.ppt(123页珍藏版)》请在三一办公上搜索。

1、2023/3/30,1,单片机应用技术(C语言版)第3章 MCS-51指令系统及汇编程序设计,2023/3/30,2,第3章 MCS-51指令系统及汇编程序设计,目 录3.1 基本概念 3.2 MCS-51单片机指令系统3.3 汇编语言程序格式及伪指令3.4 汇编语言程序设计方法,2023/3/30,3,3.1 基本概念,主要内容3.1.1 汇编语言格式3.1.2 指令中常用符号3.1.3 寻址方式,2023/3/30,4,3.1.1 汇编语言格式,一、指令和指令系统指令:是计算机中CPU根据人的意图来执行某种操作的命令。指令系统:是一台计算机(CPU)所能执行的全部指令的集合。,2023/3

2、/30,5,二、程序和程序设计语言程序:人们编写的、使计算机完成某项工作的指令序列,称为程序。程序设计语言:编写程序的一整套规则、方法。程序设计语言分类:分为机器语言、汇编语言和高级语言等。,2023/3/30,6,三、机器语言机器语言:用二进制编码表示每条指令,是计算机能够直接识别和执行的语言。目标程序:用机器语言编写的程序。例如“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,2023/3/30,7,四、汇编语言:用助记符、符号、数字等表示指令的程序语言。例如,上面的“13

3、+25”的例子可写成:汇编语言程序机器语言代码MOV A,#0DH74H 0DHADD A,#19H24H 19H相对于机器语言来说,汇编语言容易理解和记忆。汇编语言和机器语言都属于低级语言。,2023/3/30,8,五、MCS-51汇编语言指令格式 其一般格式如下:标号:操作码 目的操作数,源操作数;注释方括号中的内容可以没有,即可以没有标号、操作数和注释,至少要有操作码。,2023/3/30,9,例如:START:MOVA,#23H;23H A“START”为标号“MOV”为操作码“A,#23H”为操作数“23H A”为注释,2023/3/30,10,3.1.2 指令中常用符号Rn:n=0

4、7。当前选中的工作寄存器R0R7。Ri:i=0、1。当前选中的工作寄存器组中可作为地址指针的R0和R1。#data:8位立即数。#data16:16位立即数。direct:8位片内RAM单元地址,含SFR。addr16:程序存储空间的16位地址,2023/3/30,11,rel:补码形式的8位地址偏移量。地址偏移量,在-128+127。bit:片内RAM或SFR中的直接寻址位地址/bit 指定位求反,再参与逻辑操作,但取反后不影响该位的原值:间址寄存器的前缀符号,表示间接寻址。,2023/3/30,12,():表示中的内容():表示由中指向的地址单元中的内容、:指令操作流程,将内容送到箭头指向

5、的地方 当前指令地址 MOVA,#23H;23H A,2023/3/30,13,3.1.3 寻址方式,主要内容1 立即数寻址2 直接寻址3 寄存器寻址4 寄存器间接寻址5 变址寻址6相对寻址7 位寻址,2023/3/30,14,寻址方式:就是指CPU寻找参与运算的(源)操作数的方式。(寻找操作数所在单元地址的方式。)7种寻址方式:立即数寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址、相对寻址和位寻址。,2023/3/30,15,1 立即数寻址,立即数寻址也叫立即寻址、常数寻址。其操作数就在指令中,是指令的一部分,紧跟在操作码后面,用“#”符号作前缀,以区别地址。例如:MOV A,#2CH

6、;2CH A 表示把2CH这个数送给累加器A,2023/3/30,16,立即数也可以是16位的,如:MOVDPTR,#1234H立即数的低8位送给了DPL,高8位送给了DPH。,2023/3/30,17,2 直接寻址,直接寻址:是指操作数存放在片内RAM中,指令中给出操作数的地址。例如:MOVA,30H;(30H)A说明:(1)直接寻址方式可以访问片内RAM的低128字节和所有的特殊功能寄存器。,低128B RAMdata区,特殊功能寄存器,80H,FFH,00H,7FH,2023/3/30,18,对于特殊功能寄存器,既可以使用地址,也可以使用SFR名(P21)。例如:MOVA,P1 或 MO

7、VA,90H,2023/3/30,19,(2)直接寻址不能够访问片内RAM的高128字节(增强型),高128字节只能够间接访问。,低128BRAMdata区,高128BRAMidata区,特殊功能寄存器,00H,7FH,80H,FFH,80H,FFH,增强型单片机片内RAM,2023/3/30,20,3 寄存器寻址,寄存器寻址:就是由指令指出寄存器组R0R7中某一个或寄存器A、B、DPTR的内容作为操作数。,2023/3/30,21,2023/3/30,22,例如:MOV A,R7;(R7)AMOV36H,A;(A)36HADDA,R0;(A)+(R0)A对于工作寄存器组的操作,必须要考虑PS

8、W中RS1、RS0的值(P22),确定当前使用的是哪一组寄存器以及它们的实际地址。,2023/3/30,23,4 寄存器间接寻址,寄存器间接寻址:由指令指出某一寄存器的内容作为操作数地址的寻址方式。存放地址的寄存器称为间址寄存器,在指令中,在寄存器前面加前缀“”表示。MCS-51单片机规定,使用Ri(i=0、1,即指R0、R1)、SP和DPTR作间址寄存器。寄存器间接寻址有以下几种情况。,2023/3/30,24,一、使用Ri间接访问片内RAM间接访问的范围:256字节(包括低128字节和高128字节),但不包括特殊功能寄存器。例如:MOVA,Ri;(Ri)AMOVRi,A;(A)(Ri)((

9、Ri)):表示Ri中内容为地址的数据。操作过程如图3-3所示。,2023/3/30,25,R0的内容为地址,将该地址中的内容传送给累加器A。,2023/3/30,26,二、使用DPTR间接访问片外RAM间接访问的范围:片外RAM的64KB全空间。其指令也是只有两条:MOVX A,DPTR;(DPTR)AMOVX DPTR,A;(A)(DPTR)DPTR为16位地址。,2023/3/30,27,5 变址寻址(访问空间为ROM),变址寻址:基址加变址的间接寻址。指令中给出存放基址和变址的寄存器。基地址寄存器:DPTR或PC;变址寄存器:累加器A。也在地址寄存器前面加上前缀“”。例如:MOVC A,

10、A+DPTR;(A)+(DPTR)A该指令的操作过程如图3-4所示。DPTR内容与A中内容相加作为地址,将该地址中的内容传送给A。,2023/3/30,28,MOVC A,A+DPTR;(A)+(DPTR)A,2023/3/30,29,变址寻址的空间为程序存储器寻址范围:若使用DPTR为基地址寄存器,寻址范围为64KB;若使用PC为基地址寄存器,寻址空间在PC之后256字节范围内。,2023/3/30,30,例:已知片外ROM中的0302H单元中有一个常数x,现欲把它取到累加器A中,请写出程序。MOV DPTR,#0300HMOV A,#02HMOVC A,A+DPTR 问:MOVC A,03

11、02H 是否对?,2023/3/30,31,6 相对寻址(用于跳转指令)相对寻址:是以当前程序计数器PC值为基地址,加上指令中给出的偏移量rel,得到目标位置的地址。即:目标地址PCrelrel目标地址PC偏移量rel为8位补码,其值为-128+127。rel0程序向回跳转;rel0,程序向前跳转。,2023/3/30,32,例如:SJMP 54H说明:(1)在实际编程中,不需要计算rel,rel由编译器自动计算;(2)当跳转范围超出了rel范围,编译器会提示,对程序做适当调整即可。,2023/3/30,33,7 位寻址,位寻址:是指操作数是二进制位、位地址位操作数地址范围:片内RAM中20H

12、2FH,SFR中可以按位寻址的位。例如:SETB3DH,2023/3/30,34,位地址的3种表示方式:1)直接位地址(00H7FH)。如32H2)字节地址带位号。如20H.1,表示20H单元的第1位。3)特殊功能寄存器名带位号。如P1.7,表示P1口的第7位。,2023/3/30,35,2023/3/30,36,3.2 MCS-51单片机指令系统,主要内容3.2.1 数据传送与交换指令3.2.2 算术操作类指令3.2.3 逻辑运算指令3.2.4 控制转移类指令3.2.5 位操作指令,2023/3/30,37,指令概述(P266 附录C)MCS-51单片机指令系统有111条指令,分类如下。1、

13、按字节分类单字节指令:49条;双字节指令:45条三字节指令:17条2、按执行时间分类单周期指令:64条;双周期指令:45条四周期指令:2条(乘、除指令),2023/3/30,38,3、按功能分类(分为5大类)数据传送指令:29条算术运算指令:24条逻辑运算指令:24条控制程序转移指令:17条位操作指令:17条MCS-51指令没有复杂的寻址方式,并且助记符只有42种。,2023/3/30,39,3.2.1 数据传送指令,数据传送是使用最频繁的一类指令。所谓传送,就是把源地址单元的内容传送到目的地址单元中去,而源地址单元中的内容不变。数据传送指令可以分为三组:普通传送指令、数据交换指令、堆栈操作指

14、令。,2023/3/30,40,一、普通传送指令普通传送指令以助记符MOV为基础,分为:片内数据存储器传送指令,用MOV片外数据传送指令,用MOVX程序存储器传送指令,用MOVC,2023/3/30,41,1、片内数据存储器传送指令MOV 格式:MOV 目的操作数,源操作数源操作数:可以是A、Rn、Ri、direct、#data目的操作数:可以是A、Rn、Ri、direct、DPTR以目的操作数的不同可以分为五个小组,共16条指令。,2023/3/30,42,(1)以A为目的操作数 MOV A,Rn;(Rn)A MOV A,direct;(direct)A MOV A,Ri;(Ri)A MOV

15、 A,#data;data A 工作寄存器Rn:R0R7Ri间接寻址寄存器:R0或R1本组4条指令都影响PSW中的P标志位指令字节数:1、2、1、2,2023/3/30,43,(2)以Rn为目的操作数MOVRn,A;(A)Rn MOVRn,direct;(direct)RnMOVRn,#data;data Rn注意:MOV Rn,Rn(错误)(P32(2)本组指令都不影响PSW中的标志位。指令字节数:1、2、2,2023/3/30,44,(3)以直接地址direct为目的操作数MOVdirect,A;(A)directMOVdirect,Rn;(Rn)directMOVdirect2,dire

16、ct1;(direct1)direct2MOVdirect,Ri;(Ri)directMOVdirect,#data;data direct本组指令都不影响PSW中的标志位指令字节数:2、2、3、2、3,2023/3/30,45,(4)以间接地址Ri为目的操作数MOVRi,A;(A)(Ri)MOVRi,direct;(direct)(Ri)MOVRi,#data;data(Ri)本组指令都不影响PSW中的标志位。,2023/3/30,46,(5)以DPTR为目的操作数MOVDPTR,#data16;dataHDPH,dataLDPL,2023/3/30,47,例 设片内RAM中(30H)=40

17、H,(40H)=10H,分析以下程序执行后各单元及寄存器中的内容。MOV R0,#30H;30H R0MOV A,R0;(R0))AMOV R1,A;(A)R1MOV B,R1;(R1)BMOV 10H,#20H;20H 10H执行上述指令后的结果为:(R0)=30H,(R1)=(A)=40H,(B)=10H,(10H)=20H,2023/3/30,48,2、片外数据存储器传送指令MOVX(P31)MOVXA,Ri;(Ri)AMOVXRi,A;A(Ri)MOVXA,DPTR;(DPTR)AMOVXDPTR,A;A(DPTR)第1和第2条指令用于访问外部RAM的低地址区,地址范围:0000H-0

18、0FFH。第3和第4条指令用于访问外部RAM的64K字节区,地址范围:0000H-FFFFH。,2023/3/30,49,注:(1)四条指令都为寄存器间接寻址(2)四条指令都是通过累加器A进行数据传输的(P32 11),2023/3/30,50,例 设片外RAM空间(0203H)=6FH,分析执行下面指令后的结果。MOVDPTR,#0203H MOVXA,DPTR MOV30H,A MOVA,#0FH MOVXDPTR,A 执行结果为:(DPTR)=0203H,(30H)=6FH,(0203H)=(A)=0FH,2023/3/30,51,3、程序存储器传送指令MOVC(属于变址寻址)(P31)

19、该类指令又称为查表指令,经常用于查表。这类指令只有以下2条单字节指令。MOVCA,A+DPTR;(A)+(DPTR)AMOVCA,A+PC;(A)+(PC)A前者叫远程查表指令(64KB全空间),后者叫近程查表指令(PC处256B)。(P32 11),2023/3/30,52,二、数据交换指令数据交换指令要求第一个操作数必须为累加器A。共5条指令,分为字节交换和半字节交换两个类型。,2023/3/30,53,1、字节交换指令(P31底)XCHA,Rn;(A)(Rn)XCHA,direct;(A)(direct)XCHA,Ri;(A)(Ri)(P32 11)XCH R1,R2 2、低半字节交换指

20、令(低四位交换)(P32)XCHDA,Ri;(A03)(Ri)03)3、A自身半字节交换指令(P36)SWAPA;(A 03)(A47),2023/3/30,54,例 设(R0)=30H,(30H)=4AH,(A)=28H,则分别执行“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 A,R0;后(A)=2AH,(30H)=48H执行:SWAP A;后(A)=82H,2023/3/30,55,三、堆栈操作指令(P30

21、 6,属于直接寻址)堆栈操作有进栈和出栈两条指令,常用于保存和恢复现场。PUSH direct;先(SP)+1 SP,;后(direct)(SP)POPdirect;先(SP)direct,;后(SP)-1 SP PUSH为进栈操作,POP为出栈操作。,设(30H)=x,将x保存起来MOV SP#70HPUSH 30HPOP 30H,2023/3/30,56,注意:(1)进栈与出栈必须成对使用;(2)先进栈的必须后出栈,后进栈的必须先出栈,否则会出现DPL与DPH内容互换。,PUSHDPHPUSHDPLPOPDPLPOPDPH,2023/3/30,57,习题(P32 11.(1),1MOV A

22、,#1000H;A1000H2MOVX A,1000H;A(1000H)片外RAM3MOVC A,1000H;A(1000H)片外ROM4MOVX 60H,A;片外RAM(60H)A5MOV R0,60H;片内RAM:(61H)(60H)MOV 61H,R06.XCH R1,R2;R1R27.MOVX DPTR,#2000H;DPTR2000H8.MOVX 60H,DPTR;片内RAM片外RAM,下列指令是否错误,2023/3/30,58,2023/3/30,59,3.2.2 算术运算指令,指令内容:包括加、减、乘、除、BCD码调整等指令,共有24条。对标志位的影响:结果会影响进位标志CY、半

23、进位标志AC、溢出标志OV、奇偶标志位P,但加1和减1指令不影响这些标志位。,2023/3/30,60,PSW寄存器,Cy:进位标志位(位7有进位)AC:辅助进位标志位(位3有进位)F0:供用户使用的标志位OV:溢出标志位(位6有进位,位7没进位;或位7有进位,位6没进位)P:奇偶标志位 A中数据的奇偶性。当1的个数为奇数,P=1,否则P=0。,2023/3/30,61,一、加法指令分为不带进位加法、带进位加法和加1指令1、不带进位加法指令ADDADD A,Rn;(A)+(Rn)AADD A,direct;(A)+(direct)AADD A,Ri;(A)+(Ri)AADD A,#data;(

24、A)+dataA 这组指令影响标志位CY、AC、OV和P,溢出标志OV只对有符号运算有意义。,2023/3/30,62,例(A)=53H,(R0)=FCH,执行ADD A,R0,2023/3/30,63,注意:溢出标志OV只影响有符号数的加法运算,若OV=0,则A中结果正确;若OV=1,则A中结果不正确,只能看成无符号数。,2023/3/30,64,2、带进位加法指令ADDCADDCA,Rn;(A)+(Rn)+CYAADDCA,direct;(A)+(direct)+CYAADDCA,Ri;(A)+(Ri)+CYAADDCA,#data;(A)+data+CYA 这组指令影响标志位CY、AC、

25、OV和P,溢出标志OV只对有符号运算有意义。注:Cy伪指令执行前的Cy值,不是指令执行过程中形成的Cy值。,2023/3/30,65,3、加1指令INCINCA;(A)+1 AINCRn;(Rn)+1 RnINCdirect;(direct)+1 directINCRi;(Ri)+1(Ri)INCDPTR;(DPTR)+1 DPTR这组指令除了第一条影响标志位P之外,其它指令不影响标志位。(A)=FFH,(Cy)=0,执行INC A 后,Cy=?,2023/3/30,66,二、减法指令减法指令分为带借位减法指令和减1指令。1、带借位减法指令SUBB(自带Cy减法指令)SUBBA,Rn;(A)-

26、(Rn)-CYASUBBA,direct;(A)-(direct)-CYASUBBA,Ri;(A)-(Ri)-CYASUBBA,#data;(A)-data-CYA,2023/3/30,67,2、减1指令DECDECA;(A)-1 ADECRn;(Rn)-1 RnDECdirect;(direct)-1 directDECRi;(Ri)-1(Ri)这组指令除了第一条影响标志位P之外,其它指令不影响标志位。,2023/3/30,68,三、乘法指令MUL在MCS-51单片机中,乘法指令只有一条。MUL AB;(A)(B)B(高8位)、A(低8位)(1)A,B均为无符号整数(2)对标志位的影响:若乘

27、积大于0FFH,OV置1,否则OV清0;影响P标志位;对CY总是清0。,2023/3/30,69,四、除法指令DIVDIV AB;(A)/(B),商A、余B(1)A,B均为无符号整数(2)对标志位的影响:如果除数(B)=0,则标志位OV置1,否则清0;影响P标志位;CY总是被清0。,2023/3/30,70,3.2.3 逻辑操作指令,逻辑操作指令包括与、或、异或、清0、求反、移位等操作指令,共有24条。指令中的操作数:A、Rn、direct、Ri、#data为了便于讨论,将其分为5组进行讨论。,2023/3/30,71,1、累加器A清0和求反指令CLRA;0 ACPLA;(A)A 前一条指令是

28、对A清0,该指令影响奇偶标志位P。后一条指令是对A求反,不影响任何标志位。,2023/3/30,72,2、循环移位指令A循环左移:RL A;A循环右移:RR A;A带进位循环左移:RLC A;A带进位循环右移:RRC A;说明:(1)这4条指令,每执行一次只 移动1位;(2)左移一次相当于乘以2,右移一次相当于除以2。对标志位影响:仅后两条指令影响CY和P,2023/3/30,73,3、逻辑与指令ANLANL A,Rn;(A)(Rn)AANL A,direct;(A)(direct)AANL A,Ri;(A)(Ri)AANL A,#data;(A)data AANL direct,A;(dir

29、ect)(A)directANL direct,#data;(direct)datadirect作用:用于使某些位清0。,2023/3/30,74,4、逻辑或指令ORL ORL A,Rn;(A)(Rn)AORL A,direct;(A)(direct)AORL A,Ri;(A)(Ri)AORL A,#data;(A)data AORL direct,A;(direct)(A)directORL direct,#data;(direct)datadirect作用:用于使某些位置1。,目标地址,2023/3/30,75,5、逻辑异或指令XRLXRL A,Rn;(A)(Rn)AXRL A,direc

30、t;(A)(direct)AXRL A,Ri;(A)(Ri)AXRL A,#data;(A)data AXRL direct,A;(direct)(A)directXRL direct,#data;(direct)datadirect作用:用于使某些位取反,其余位不变。用1异或使对应位取反,用0异或使对应位保留(不变);自身异或,实现清零。,2023/3/30,76,例 写出完成以下各功能的指令:1)只对累加器A中的1、3、5位清0;2)只对A中的2、4、6位置1;3)只对A中的0、1、6、7位取反。4)使(A)=AAH的高四位不变,低四位取反。对应指令如下:ANLA,#11010101BOR

31、LA,#01010100B XRLA,#11000011B XRL A,#00001111B,2023/3/30,77,3.2.4 控制转移类指令,MCS-51单片机有17条转移类指令,包括无条件转移指令、条件转移指令、子程序调用及返回指令等。对标志位影响:只有比较转移指令影响进位标志CY,其它指令不影响标志位。,2023/3/30,78,一、无条件转移指令无条件转移指令:当程序执行该指令后,程序无条件地转移到指定的地址去执行。包括短转移、长转移和间接转移3条指令1、短转移指令SJMP(相对转移指令,2字节)SJMP rel;(PC)+relPCrel=(Ad-As-Bn):相对转移偏移量,有

32、符号数,128127,负数表示向回跳转,正数表示向前跳转。指令实际写为:“SJMP 目标地址标号”P47,2023/3/30,79,SJMP$:停机指令。(HERE:SJMP HERE)P39,2023/3/30,80,2、长转移指令LJMP(3字节指令)LJMP addr16;addr16 PC程序可以跳转到64KB程序存储器空间的任何地方。指令的实际编写形式为:“LJMP 目标地址标号”。,2023/3/30,81,3、间接跳转指令JMP(单字节)也叫散转指令、多分支转移指令。JMP A+DPTR;(A)+(DPTR)PCDPTR为基址,A为相对偏移,在64KB范围内无条件转移。说明:(1

33、)DPTR一般为确定的值,累加器A为变值,根据A的值转移到不同的地方,因此该指令也叫散转指令。(2)在使用中,往往与一个转移指令表一起实现多分支转移。,2023/3/30,82,例3-13 分析下面多分支转移程序段。MOV B,#3MUL AB;开始时(A)=0、1、2MOV DPTR,#TABLE;表首地址送DPTRJMP A+DPTR;根据A值转移TABLE:LJMPTAB0;(A)=0时转到TAB0执行LJMPTAB1;(A)=3时转到TAB1执行LJMPTAB2;(A)=6时转到TAB2执行.程序中,根据累加器A的开始值(0、1、2)转移到相应的TAB0TAB2分支去执行。,2023/

34、3/30,83,二、条件转移指令当指令中条件满足时,程序转到指定位置执行,条件不满足时,程序顺序执行。条件转移指令有三种:判断累加器A转移指令、比较转移指令、循环转移指令,共8条。,2023/3/30,84,1、判断累加器A转移指令(条件转移指令)判断A为0转移:JZ rel;(A)0,(PC)+relPC;(A)0,顺序执行判断A非0转移:JNZ rel;(A)0,(PC)+relPC;(A)0,顺序执行指令的实际编写形式分别为:“JZ 目标地址标号”和“JNZ 目标地址标号”。,2023/3/30,85,例 试编写程序,把片外RAM地址从2000H开始的数据,传送到片内RAM地址从30H开

35、始的单元,直到出现00H为止。程序段如下:MOVDPTR,#2000HMOVR0,#30HLOOP:MOVX A,DPTRMOVR0,AINCR0INCDPTRJNZLOOP;(A)0跳转SJMP$;程序停留到此,2023/3/30,86,2、比较不相等转移指令CJNE比较转移指令功能较强,共有4条指令,一般格式为:CJNE操作数1,操作数2,rel(目标标号)指令功能:两个操作数做比较,若不等则转移,否则顺序执行。,2023/3/30,87,具体形式如下,第一条:CJNEA,direct,rel第二条:CJNEA,#data,rel第三条:CJNERn,#data,rel第四条:CJNERi

36、,#data,rel,2023/3/30,88,注:(1)编程时rel用目标地址标号表示,CJNE A,#21,LOOP1(2)指令执行过程中的比较操作实际上为减法操作,不保留两数之差,但要形成Cy标志。,2023/3/30,89,3、减1不为0(循环转移指令)DJNZ循环转移指令共有两条指:DJNZ Rn,rel;2字节指令。DJNZ direct,rel;3字节指令。指令的实际编写形式为:DJNZ Rn,目标地址标号DJNZ direct,目标地址标号,2023/3/30,90,例3-15 试编写程序,统计片内RAM中从40H单元开始的20个单元中00H的个数,结果存于R2中。程序段一(用

37、JNZ判断数据是否为0):MOVR0,#40H;R0指向40HMOVR7,#20;R7控制循环MOVR2,#0;R2存放结果LOOP:MOVA,R0JNZNEXT;(A)0转INCR2NEXT:INCR0DJNZ R7,LOOPSJMP$,2023/3/30,91,程序段二(用CJNE判断数据是否为0):MOVR0,#40H;R0指向40HMOVR7,#20;R7控制循环MOVR2,#0;R2存放结果LOOP:CJNE R0,#00H,NEXTINCR2NEXT:INCR0DJNZ R7,LOOP,2023/3/30,92,三、子程序调用和返回指令这类指令有3条,一条调用,两条返回。1、子程序

38、调用指令 ACALLaddr16(2字节指令)LCALLaddr16(3字节指令),2023/3/30,93,2、子程序返回指令(只能用在子程序末尾)RET;,2023/3/30,94,3、中断服务程序返回指令RETI;“RETI”只能用在中断服务程序末尾。四、空操作指令NOP;延时一个机器周期常用于延时,2023/3/30,95,还有两条指令:这两条指令是“AJMP”和“ACALL”,称为绝对转移(短转移)指令和绝对子程序调用(短调用)指令。初识这两条指令:这两条指令的转移范围是绝对划定的2KB,用不好会出现错误,并且其编码也不好理解(见附录B),所以没有必要使用这两条指令。,2023/3/

39、30,96,3.2.5 位操作指令,说明:在进行位操作时,位累加器C即为进位标志CY。位地址区域:1)片内RAM字节地址20H2FH单元中连续的128个位(位地址为00H7FH);2)部分SFR中的位。,2023/3/30,97,位地址的表示方式:1)直接位地址(00HFFH),如18H。2)字节地址带位号,如20H.0,表示20H单元的第0位。3)特殊功能寄存器名带位号,如P2.3,表示P2口的第3位。4)位符号地址。例如,用上述4种方式都可以表示PSW(D0H)中的第2位,分别为:D2H、D0H.2、PSW.2、OV。,2023/3/30,98,位操作指令共有17条,可以将其分成:位数据传

40、送指令、位逻辑操作指令、位控制转移指令三组进行讨论。,2023/3/30,99,一、位传送指令MOVC,bit;(bit)CMOVbit,C;(C)bit例 编写程序,把片内RAM中07H位的数值,传送到ACC.0位。程序段如下:MOVC,07HMOVACC.0,C注意:位之间不能够直接传送,必须借助于C。,2023/3/30,100,二、位逻辑操作指令位逻辑操作指令包括位清0、位置1、位取反、位与、位或,共10条指令。1、位清0指令CLRC;0 CCLRbit;0 bit2、位置1指令SETB C;1 CSETB bit;1 bit,2023/3/30,101,3、位取反指令CPLC;(C)

41、CCPLbit;(bit)bit4、位与指令ANLC,bit;(C)(bit)CANLC,bit;(C)(bit)C5、位或指令ORLC,bit;(C)(bit)CORLC,bit;(C)(bit)C注:在MCS-5指令系统中没有位异或指令,必须用位操作指令来实现。(P41 5),2023/3/30,102,三、位条件转移指令(P41 4)位转移指令是判断C或bit为条件的转移指令,共5条指令。1、以C为条件的转移指令(2字节指令)JC rel;若(C)=1,则(PC)+relPC;否则顺序向下执行JNC rel;若(C)=0,则(PC)+relPC;否则顺序向下执行,2023/3/30,10

42、3,2、以bit为条件的转移指令(3字节指令)JB bit,rel;若(bit)=1,则(PC)+rel PC;否则顺序向下执行JNB bit,rel;若(bit)=0,则(PC)+rel PC;否则顺序向下执行JBC bit,rel;若(bit)=1,则(PC)+rel PC,且0 bit;否则顺序向下执行,2023/3/30,104,例 编写程序,利用位操作指令,实现下图所示的硬件逻辑电路功能。,程序段如下:MOVC,P1.1ORLC,P1.2 CPLCANLC,P1.0CPLC,2023/3/30,105,MOVF0H,C;(C)F0H位MOVC,P1.3;(P1.3)CANLC,P1.

43、4;(C)P1.4 CCPLC;ORLC,F0H;(C)(0F0H)CMOVP1.5,C;(C)P1.5,2023/3/30,106,3.3 汇编语言程序格式及伪指令,2023/3/30,107,标号 源程序 注释 ORG 0000H;整个程序起始地址 LJMP MAIN;跳向主程序 ORG 0030H;主程序起始地址 MAIN:CLR C;MAIN为程序标号 LOOP:MOV A,R0 ADDC A,R1 INC R0 DJNZ R1,LOOP;相对转移 SJMP NEXT MOV R1,#03H NEXT:DEC R0 SJMP$;相当于 LOOP1:SJMP LOOP1 END;结束标记

44、,2023/3/30,108,伪指令的功能:在汇编程序中,用于指示汇编程序如何对源程序进行汇编。对伪指令的处理:不同于指令,在汇编时并不翻译成机器代码,只是在汇编过程进行相应的控制和说明。伪指令的具体作用:通常在汇编程序中用于定义数据、分配存储空间、控制程序的输入/输出等。在MCS-51系统中,常用的伪指令有以下7条。,2023/3/30,109,一、ORG伪指令ORG伪指令称为起始汇编伪指令,常用于汇编语言某程序段的开始或某个数据块的开始。一般格式为:标号:ORG16位地址其标号为可选项。例如:ORG0040H MAIN:MOVSP,#0DFHMOV30H,#00H,2023/3/30,11

45、0,二、END伪指令END伪指令称为结束汇编伪指令。一般格式为:END 注:一个源程序只能有一个END命令。三、EQU伪指令EQU伪指令称为赋值伪指令。一般格式为标号 EQU项(常数、常数表达式、字符串或地址标号)EQU的功能是将右边的项赋值给左边。,无冒号,2023/3/30,111,注:EQU伪指令中的标号必须先赋值后使用。此值可以使8进制数或地址也可以使16进制数或地址。A EQU 20HA10 EQU 10H DELAY EQU 07E6H,2023/3/30,112,四、BIT伪指令BIT伪指令称为位地址符号伪指令。其格式为:标号 BIT位地址BIT伪指令的功能是把右边的地址赋给左边

46、的标号。位地址可以是前面所述的4种形式中的任一种。例如:FLAGRUNBIT00HFLAGMUSBIT01HFLAGALARBITP1.7,2023/3/30,113,五、DB伪指令BD伪指令称为定义字节伪指令。其格式为:标号:DB项(字节数据、字节数表或字符、字符串)它的功能是从指定单元开始定义(存储)若干个字节的数据或字符、字符串。字符用ASCII码表示。注:用DB伪指令定义的数据只占一个字节,2023/3/30,114,例:ORG 0900HTAB:DB 45H,73,A上述程序汇编后:(0090H)=45H(0091H)=49H(0092H)=41H,2023/3/30,115,六、D

47、W伪指令DW伪指令称为定义字伪指令。其格式为:标号:DW字数据或字数据表DW伪指令的功能是从指定单元开始定义(存储)若干个字数据,每一个数据都占2个字节。其中标号是可选的。注意:高字节存放在前,低字节存放在后,2023/3/30,116,例如:ORG1000HTABLE2:BW1234H,24H上述程序汇编后:(1000H)=12H(1001H)=34H(1002H)=00H(1003H)=24H,2023/3/30,117,本章小结,本章首先认识了汇编语言的概念及其构成。然后介绍了MCS-51单片机的寻址方式、指令系统,以及常用的汇编伪指令。本章是单片机汇编语言程序设计的基础,为了成为单片机

48、程序设计的高手,必须要掌握好本章的内容。,2023/3/30,118,习题,1、指出下列每条指令的寻址方式和功能。(1)MOV A,#40H(2)MOV A,40H(3)MOV A,R1(4)MOV A,R3(5)MOVC A,A+PC(6)SJMP LOOP,2023/3/30,119,2、指出下列程序执行后的操作结果。(1)MOV A,#60H MOV R0,#40H MOV R0,A MOV 41H,R0 XCH A,R0,2023/3/30,120,(2)MOV DPTR,#2003H MOV A,#18H MOV 20H,#38H MOV R0,#20H XCH A,R0,2023/3/30,121,3、已知(20H)=X,(21H)=Y和(22H)=Z,请用图示说明下列程序执行后堆栈中内容是什么?(1)MOV SP,#70H PUSH 20H PUSH 21H PUSH 22H,2023/3/30,122,(2)MOV SP,#60H PUSH 22H PUSH 21H PUSH 20H,2023/3/30,123,4、已知(SP)=73H,(71H)=X,(72H)=Y和(73H)=Z,试问执行下列程序后,20H、21H、22H单元中内容是什么?并用图示说明堆栈指针SP的指向和堆栈中数据的变化。POP 20H POP 21H POP 22H,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号