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

上传人:hloru****lorv6 文档编号:243114099 上传时间:2024-09-16 格式:PPT 页数:123 大小:717.50KB
返回 下载 相关 举报
单片机应用技术C语言版MCS51指令系统及汇编课件_第1页
第1页 / 共123页
单片机应用技术C语言版MCS51指令系统及汇编课件_第2页
第2页 / 共123页
单片机应用技术C语言版MCS51指令系统及汇编课件_第3页
第3页 / 共123页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单片机应用技术,(C语言版),第3章 MCS-51指令系统及汇编程序设计,9/16/2024,1,第3章 MCS-51指令系统及汇编程序设计,目 录,3.1 基本概念,3.2 MCS-51单片机指令系统,3.3 汇编语言程序格式及伪指令,3.4 汇编语言程序设计方法,9/16/2024,2,3.1 基本概念,主要内容,3.1.1 汇编语言格式,3.1.2 指令中常用符号,3.1.3 寻址方式,9/16/2024,3,3.1.1,汇编语言格式,一、指令和指令系统,指令:,是计算机中CPU根据人的意图来执行某种操作的命令。,指令系统:,是一台计算机(CPU)所能执行的全部指令的集合。,9/16/2024,4,二、程序和程序设计语言,程序:,人们编写的、使计算机完成某项工作的,指令序列,,称为程序。,程序设计语言:,编写程序的一整套,规则、方法。,程序设计语言分类:,分为,机器语言,、,汇编语言,和,高级语言,等。,9/16/2024,5,三、机器语言,机器语言:,用二进制编码表示每条指令,,是计算机能够直接识别和执行的语言。,目标程序:,用机器语言编写的程序。,例如“13+25” ,在MCS-51中的,机器码为,0 1 1 1 0 1 0 0 0 0 0 0 1 1 0 1,0 0 1 0 0 1 0 0 0 0 0 1 1 0 0 1,9/16/2024,6,四、汇编语言:,用助记符、符号、数字等表示指令的程序语言,。,例如,上面的“13+25”的例子可写成:,汇编语言程序,机器语言代码,MOV A,,,#0DH74H 0DH,ADD A,,,#19H24H 19H,相对于机器语言来说,汇编语言容易理解和记忆,。,汇编语言和机器语言都属于低级语言,。,9/16/2024,7,五、MCS-51汇编语言指令格式,其一般格式如下:,标号: 操作码 目的操作数 ,源操作数 ;注释,方括号中的内容可以没有,即可以没有标号、操作数和注释,至少要有操作码。,9/16/2024,8,例如,:,START,:,MOVA,,,#23H,;,23H A,“START”,为标号,“,MOV”,为操作码,“,A,,,#23H”,为操作数,“,23H A”,为注释,9/16/2024,9,3.1.2,指令中常用符号,Rn:,n=07,。当前选中的,工作寄存器R0R7,。,Ri:,i=0、1。当前选中的工作寄存器组中可作为,地址指针的R0和R1,。,#data:,8位立即数,。,#data16:,16位立即数,。,direct:,8位片内RAM单元地址,,含SFR。,addr16:,程序存储空间的16位地址,9/16/2024,10,rel:,补码形式的8位地址偏移量,。地址偏移量,在-128+127。,bit:,片内RAM或SFR中的直接寻址位地址,/,bit,指定位求反,再参与逻辑操作,但取反后不影响该位的原值,:,间址寄存器的前缀符号,,表示间接寻址。,9/16/2024,11,():,表示中的内容,():,表示由中指向的地址单元中的内容,、:,指令操作流程,将内容送到箭头指向的地方,当前指令地址,MOVA,,,#23H,;,23H A,9/16/2024,12,3.1.3 寻址方式,主要内容,1 立即数寻址,2 直接寻址,3 寄存器寻址,4 寄存器间接寻址,5 变址寻址,6相对寻址,7 位寻址,9/16/2024,13,寻址方式:,就是指CPU寻找参与运算的,(源),操作数的方式,。,(寻找操作数所在单元地址的方式。),7种寻址方式:,立即数寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址、相对寻址和位寻址。,9/16/2024,14,1,立即数寻址,立即数寻址也叫立即寻址、常数寻址,。,其操作数就在指令中,是指令的一部分,,紧跟在操作码后面,用“#”符号作前缀,以区别地址。例如:,MOV A,#2CH ;2CH A,表示把2CH这个数送给累加器A,9/16/2024,15,立即数也可以是16位的,,如:,MOVDPTR,,,#1234H,立即数的低,8,位送给了,DPL,,高,8,位送给了,DPH,。,9/16/2024,16,2,直接寻址,直接寻址:,是指操作数存放在片内RAM中,指令中给出操作数的地址,。例如,:,MOVA,,,30H,;,(30H),A,说明:,(1),直接寻址方式可以访问片内,RAM,的低,128,字节和所有的特殊功能寄存器,。,低128B,RAM,data区,特殊功能,寄存器,80H,FFH,00H,7FH,9/16/2024,17,对于,特殊功能寄存器,,既可以使用地址,也可以使用,SFR,名,(P21),。例如:,MOVA,,,P1,或,MOVA,,,90H,9/16/2024,18,(,2,)直接寻址不能够访问片内,RAM,的高,128,字节,(,增强型,),,高,128,字节只能够间接访问,。,低128B,RAM,data区,高128B,RAM,idata区,特殊功能,寄存器,00H,7FH,80H,FFH,80H,FFH,增强型单片机片内RAM,9/16/2024,19,3,寄存器寻址,寄存器寻址:,就是由指令指出寄存器组R0R7中某一个或寄存器A、B、DPTR的内容作为操作数,。,9/16/2024,20,7F,30,堆栈和,数据缓存,用户RAM区,2F,20,位地址为,00H7FH,(,128位,),位,寻,址,区,1F,18,R0,、,R1R7,(第,3组),工,17,10,R0,、,R1R7,(第,2组),作,寄,0F,08,R0,、,R1R7,(第,1组),存,器,07,00,R0,、,R1R7,(第,0组),区,9/16/2024,21,例如:,MOV A,R7 ;(R7) A,MOV36H,,,A,;(,A,),36H,ADDA,,,R0,;(,A,),+(R0),A,对于工作寄存器组的操作,必须要考虑,PSW,中,RS1,、,RS0,的值(,P22,),确定当前使用的是哪一组寄存器以及它们的实际地址。,9/16/2024,22,4,寄存器间接寻址,寄存器间接寻址:,由指令指出某一寄存器的内容作为操作数地址的寻址方式。,存放地址的寄存器称为,间址寄存器,,在指令中,在,寄存器前面加前缀“”表示,。,MCS-51,单片机规定,,使用,Ri,(,i=0,、,1,,即指,R0,、,R1,)、,SP,和,DPTR,作间址寄存器,。,寄存器间接寻址有以下几种情况。,9/16/2024,23,一、使用,Ri,间接访问片内,RAM,间接访问的范围:,256,字节,(包括低,128,字节和高,128,字节),,但不包括特殊功能寄存器,。例如:,MOVA,,,Ri,;(Ri),A,MOV,Ri,,,A;(A),(Ri),(,(Ri),),:表示,Ri,中内容为地址的数据。,操作过程如图,3-3,所示。,9/16/2024,24,图3-3 间接寻址(,MOV A,R0),示意图,62H,A,:,:,62H, 98H,98H,R0,:,:,片内RAM,R0的内容为地址,将该地址中的内容传送给累加器A。,9/16/2024,25,二、使用,DPTR,间接访问片外,RAM,间接访问的范围:,片外,RAM,的,64KB,全空间,。其指令也是只有两条:,MOVX A,,,DPTR,;(DPTR),A,MOVX,DPTR,,,A;(A),(DPTR),DPTR,为,16,位地址。,9/16/2024,26,5,变址寻址(访问空间为ROM),变址寻址:,基址,加,变址,的,间接寻址,。指令中给出存放基址和变址的寄存器。,基地址寄存器:,DPTR或PC,;,变址寄存器:,累加器A,。,也在地址寄存器前面加上前缀“,”,。例如,:,MOVC A,,,A+DPTR,;(A)+(DPTR),A,该指令的操作过程如图3-4所示。,DPTR内容与A中内容相加作为地址,将该地址中的内容传送给A。,9/16/2024,27,ROM,:,:,DPTR,03E2H,+ 0414H,38H,A,32H,:,:,A,38H,图3-4 变址寻址示意图,MOVC A,,,A+DPTR;(A)+(DPTR),A,9/16/2024,28,变址寻址的空间为程序存储器,寻址范围:,若,使用DPTR,为基地址寄存器,寻址范围,为64KB,;,若,使用PC,为基地址寄存器,寻址空间在PC之后,256字节范围内,。,9/16/2024,29,例:已知片外ROM中的0302H单元中有一个常数x,现欲把它取到累加器A中,请写出程序。,MOV DPTR , #0300H,MOV A, #02H,MOVC A, A+DPTR,问:MOVC A, 0302H 是否对?,9/16/2024,30,6 相对寻址(,用于跳转指令,),相对寻址:,是以当前程序计数器PC值为,基地址,,加上指令中给出的,偏移量rel,,得到目标位置的地址,。即:,目标地址PCrel,rel目标地址PC,偏移量rel为8位补码,,,其值为,-,128+127,。,rel0程序向回跳转;rel0,程序向前跳转。,9/16/2024,31,例如:,SJMP 54H,说明:,(1),在实际编程中,,,不需要计算,rel,,,rel,由编译器自动计算;,(2),当跳转范围超出了,rel,范围,编译器会提示,对程序做适当调整即可。,9/16/2024,32,7,位寻址,位寻址:,是指操作数是二进制位,、,位地址,位操作数地址范围:,片内RAM中20H2FH,SFR中可以按位寻址的位,。,例如:,SETB,3DH,7F,30,堆栈和,数据缓存,通,用,数,据,区,2F,20,位地址为,00H7FH,(,128位,),位,寻,址,区,1F,18,R0,、,R1R7,(第,3组),工,17,10,R0,、,R1R7,(第,2组),作,寄,0F,08,R0,、,R1R7,(第,1组),存,器,07,00,R0,、,R1R7,(第,0组),区,9/16/2024,33,位地址的3种表示方式:,1)直接位地址,(00H7FH)。如32H,2)字节地址带位号,。如20H.1,表示20H单元的第1位。,3)特殊功能寄存器名带位号,。如P1.7,表示P1口的第7位。,9/16/2024,34,寻址方式、寻址空间及范围,寻址方式,操作数及寻址空间范围,立即数寻址,随指令读入,直接寻址,片内RAM中,,低128字节和SFR,寄存器寻址,使用的寄存器:,R0R7、A、B、DPTR,寄存器,间接寻址,片内RAM:,用Ri,;,范围256B,不含SFR,片外RAM:,用Ri、DPTR,;,范围为64KB,变址寻址,用A+PC、A+DPTR,;在ROM中;,范围分别为PC之后256B之内和64KB全空间,位寻址,在位寻址区域,;,RAM的20,2FH和SFR,相对寻址,操作数是相对地址;在ROM中;,范围-128,127,9/16/2024,35,3.2 MCS-51单片机指令系统,主要内容,3.2.1 数据传送与交换指令,3.2.2 算术操作类指令,3.2.3 逻辑运算指令,3.2.4 控制转移类指令,3.2.5 位操作指令,9/16/2024,36,指令概述(P266 附录C),MCS-51单片机指令系统有111条指令,分类如下。,1、按字节分类,单字节指令:,49条;,双字节指令:,45条,三字节指令:,17条,2、按执行时间分类,单周期指令:,64条;,双周期指令:,45条,四周期指令:,2条(乘、除指令),9/16/2024,37,3、按功能分类,(分为5大类),数据传送指令:29条,算术运算指令:24条,逻辑运算指令:24条,控制程序转移指令:17条,位操作指令:17条,MCS-51指令没有复杂的寻址方式,并且助记符只有42种,。,9/16/2024,38,3.2.1,数据传送指令,数据传送是使用最频繁的一类指令。,所谓传送,,就是把源地址单元的内容传送到目的地址单元中去,而源地址单元中的内容不变,。,数据传送指令可以分为三组:,普通传送指令,、,数据交换指令,、,堆栈操作指令,。,9/16/2024,39,一、普通传送指令,普通传送指令以助记符MOV为基础,,分为:,片内数据存储器传送指令,用MOV,片外数据传送指令,用MOVX,程序存储器传送指令,用MOVC,9/16/2024,40,1、片内数据存储器传送指令MOV,格式:,MOV 目的操作数,源操作数,源操作数:,可以是A、Rn、Ri、 direct、#data,目的操作数:,可以是A、Rn、Ri、direct、DPTR,以目的操作数的不同可以分为五个小组,共16条指令。,9/16/2024,41,(1)以A为目的操作数,MOV A,,,Rn,;,(Rn),A,MOV A,,,direct,;,(direct),A,MOV A,,,Ri,;,(Ri),A,MOV A,,,#data,;,data A,工作寄存器,Rn,:,R0,R7,Ri间接寻址寄存器:R0或R1,本组4条指令都影响PSW中的P标志位,指令字节数:1、2、1、2,9/16/2024,42,(2)以Rn为目的操作数,MOVRn,A,;(A) Rn,MOVRn,direct,;(direct) Rn,MOVRn,#data,;data Rn,注意: MOV Rn, Rn(错误)( P32(2),),本组指令都不影响PSW中的标志位,。,指令字节数:1、2、2,9/16/2024,43,(3)以直接地址direct为目的操作数,MOVdirect,A,;(A) direct,MOVdirect,Rn,;(Rn) direct,MOVdirect2,,,direct1,;(direct1)direct,2,MOVdirect,Ri,;(Ri) direct,MOVdirect,#data,;data direct,本组指令都不影响PSW中的标志位,指令字节数:2、2、3、2、3,9/16/2024,44,(4)以间接地址Ri为目的操作数,MOVRi,A,;(A) (Ri),MOVRi,direct,;(direct) (Ri),MOVRi,#data,;data (Ri),本组指令都不影响PSW中的标志位,。,9/16/2024,45,(5)以DPTR为目的操作数,MOVDPTR,#data16,;dataHDPH,dataLDPL,9/16/2024,46,例,设片内RAM中(30H)=40H,(40H)=10H,分析以下程序执行后各单元及寄存器中的内容。,MOV R0,,,#30H,;,30H R0,MOV A,,,R0,;,(R0),) ,A,MOV R1,,,A,;,(A),R1,MOV B,,,R1,;,(R1),B,MOV 10H,,,#20H,;,20H 10H,执行上述指令后的结果为:,(,R0,),=30H,,(,R1,),=,(,A,),=40H,,,(,B,),=10H,,(,10H,),=20H,9/16/2024,47,2、片外数据存储器传送指令MOVX,(P31),MOVXA,Ri,;(Ri) A,MOVXRi,A,;A (Ri),MOVXA,DPTR,;(DPTR) A,MOVXDPTR,A,;A (DPTR,),第,1,和第,2,条指令用于访问外部,RAM,的低地址区,地址范围:,0000H-00FFH,。,第,3,和第,4,条指令用于访问外部,RAM,的,64K,字节区,地址范围:,0000H-FFFFH,。,9/16/2024,48,注:,(1)四条指令都为寄存器,间接,寻址,(2)四条指令都是通过,累加器A,进行数据传输的,(P32 11 ),9/16/2024,49,例,设片外,RAM,空间(,0203H,),=6FH,,分析执行下面指令后的结果。,MOVDPTR,,,#0203H,MOVXA,,,DPTR,MOV30H,,,A,MOVA,,,#0FH,MOVXDPTR,,,A,执行结果为:(,DPTR,),=0203H,,,(,30H,),=,6FH,,(,0203H,),=,(,A,),=0FH,9/16/2024,50,3、程序存储器传送指令MOVC(属于变址寻址),(P31),该类指令又称为,查表指令,,经常用于查表。这类指令只有以下,2,条,单字节指令。,MOVCA,A+DPTR,;(A)+(DPTR) A,MOVCA,,,A+PC,;(A)+(PC),A,前者叫远程查表指令(,64KB,全空间),后者叫近程查表指令(,PC,处,256B,)。,(P32 11 ),9/16/2024,51,二、数据交换指令,数据交换指令,要求第一个操作数必须为累加器A。,共5条指令,分为字节交换和半字节交换两个类型。,9/16/2024,52,1、字节交换指令,(P31底),XCHA,Rn,;(A)(Rn),XCHA,direct,;(A)(direct),XCHA,Ri,;(A)(Ri),(P32 11,),XCH R1, R2,2、低半字节交换指令(低四位交换),(P32),XCHDA,Ri,;(A,03,)(Ri),03,),3、A自身半字节交换指令(P36),SWAPA,;(A,03,)(A,47,),9/16/2024,53,例,设(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,9/16/2024,54,三、堆栈操作指令(P,30,6,属于直接寻址),堆栈操作有进栈和出栈两条指令,,常用于保存和恢复现场,。,PUSH direct,;先(SP) +1 SP,;后(direct)(SP),POPdirect,;先(SP) direct,;后(SP),-,1 SP,PUSH为进栈操作,,,POP为出栈操作。,设(30H)=x,,将x保存起来,MOV SP #70H,PUSH 30H,POP 30H,9/16/2024,55,注意:,(1)进栈与出栈必须成对使用,;,(2)先进栈的必须后出栈,后进栈的必须先出栈,,否则会出现DPL与DPH内容互换。,PUSHDPH,PUSHDPL,POPDPL,POPDPH,9/16/2024,56,习题( P,32,11.(1) ),1MOV A,#1000H;A1000H,2MOVX A,1000H;A(1000H)片外RAM,3MOVC A,1000H;A(1000H)片外ROM,4MOVX 60H,A;片外RAM(60H)A,5MOV R0,60H;片内RAM:(61H)(60H),MOV 61H,R0,6. XCH R1,R2 ;R1R2,7. MOVX DPTR,#2000H ;DPTR2000H,8. MOVX 60H,DPTR;,片内RAM,片外RAM,下列指令是否错误,9/16/2024,57,9/16/2024,58,3.2.2,算术运算指令,指令内容:,包括加、减、乘、除、BCD码调整等指令,共有24条。,对标志位的影响:,结果会,影响,进位标志,CY,、半进位标志,AC,、溢出标志,OV,、奇偶标志位,P,,但加1和减1指令不影响这些标志位。,9/16/2024,59,PSW寄存器,Cy:进位标志位,(位7有进位),AC:辅助进位标志位,(位3有进位),F0:,供用户使用的标志位,OV:溢出标志位,(位6有进位,位7没进位;或位7有进位,位6没进位),P:奇偶标志位,A中数据的奇偶性。当1的个数为奇数,P=1,否则P=0。,9/16/2024,60,一、加法指令,分为,不带进位加法,、,带进位加法,和,加1指令,1、不带进位加法指令ADD,ADD A,Rn,;(A)+(Rn)A,ADD A,direct,;(A)+(direct)A,ADD A,,,Ri,;(A)+(Ri),A,ADD A,,,#data,;(A)+ dataA,这组指令,影响标志位,CY,、,AC,、,OV,和,P,,溢出标志,OV,只对有符号运算有意义。,9/16/2024,61,例,(A)=53H,(R0)=FCH,执行ADD A, R0,9/16/2024,62,注意:,溢出标志OV只影响有符号数的加法运算,,若OV=0,则A中结果正确;若OV=1,则A中结果不正确,只能看成无符号数。,9/16/2024,63,2、带进位加法指令ADDC,ADDCA,Rn,;(A)+(Rn)+ CYA,ADDCA,direct,;(A)+(direct)+CYA,ADDCA,Ri,;(A)+(Ri)+CYA,ADDCA,,,#data,;(A)+data+CYA,这组指令,影响标志位,CY,、,AC,、,OV,和,P,,溢出标志,OV,只对有符号运算有意义。,注:,Cy伪指令执行前的Cy值,不是指令执行过程中形成的Cy值。,9/16/2024,64,3、,加,1,指令,INC,INCA,;(,A,),+ 1 A,INCRn,;(,Rn,),+ 1 Rn,INCdirect,;(direct)+ 1 direct,INCRi,;(,Ri,),+ 1 ,(,Ri,),INCDPTR,;(,DPTR,),+ 1 DPTR,这组指令除了,第一条影响标志位,P,之外,,其它指令不影响标志位。,(A)=FFH,(Cy)=0,执行,INC A,后,Cy=?,9/16/2024,65,二、减法指令,减法指令分为带借位减法指令和减1指令。,1、带借位减法指令SUBB(自带Cy减法指令),SUBBA,Rn,;(A),-,(Rn),-,CYA,SUBBA,direct,;(A),-,(direct)- CYA,SUBBA,Ri,;(A),-,(Ri),-,CYA,SUBBA,#data,;(A),-,data,-,CYA,9/16/2024,66,2、,减,1指令DEC,DECA,;(A) - 1 A,DECRn,;(Rn) - 1 Rn,DECdirect,;(direct) - 1 direct,DECRi,;,(Ri) - 1 (Ri),这组指令除了,第一条影响标志位,P,之外,其它指令不影响标志位。,9/16/2024,67,三、乘法指令MUL,在MCS-51单片机中,乘法指令只有一条。,MUL AB,;(A)(B) B(,高8位,),、,A(,低8位,),(1),A,B,均为,无符号,整数,(2),对标志位的影响,:若乘积大于,0FFH,,,OV,置,1,,否则,OV,清,0,;影响,P,标志位;对,CY,总是清,0,。,9/16/2024,68,四、除法指令DIV,DIV AB,;(A)/(B),商A、余B,(1),A,B,均为,无符号,整数,(2),对标志位的影响:,如果除数(,B,),=0,,则标志位,OV,置,1,,,否则清,0,;影响,P,标志位;,CY,总是被清,0,。,9/16/2024,69,3.2.3,逻辑操作指令,逻辑操作指令包括与、或、异或、清0、求反、移位等操作指令,共有24条,。,指令中的操作数,:,A、Rn、direct、Ri、#data,为了便于讨论,将其分为5组进行讨论。,9/16/2024,70,1、累加器A清0和求反指令,CLRA;0 A,CPLA;(A) A,前一条指令是对,A,清,0,,该指令影响奇偶标志位,P,。,后一条指令是对,A,求反,不影响任何标志位。,9/16/2024,71,2、循环移位指令,A循环左移:,RL A,;,A循环右移:,RR A,;,A带进位循环左移 :,RLC A,;,A带进位循环右移 :,RRC A,;,说明:,(1)这4条指令,每执行一次只 移动1位;(2)左移一次相当于乘以2,右移一次相当于除以2。,对标志位影响:,仅后两条指令影响CY和P,a7 a0,a7 a0,a7 a0,CY,a7 a0,CY,9/16/2024,72,3、逻辑与指令ANL,ANL A,Rn,;(A)(Rn) A,ANL A,direct,;(A)(direct) A,ANL A,Ri,;(A)(Ri) A,ANL A,#data,;(A) data A,ANL direct,A,;(direct)(A) direct,ANL direct,#data,;(direct)datadirect,作用:,用于使某些位清0,。,9/16/2024,73,4、逻辑或指令ORL,ORL A,Rn,;(A) (Rn) A,ORL A,direct,;(A)(direct) A,ORL A,Ri,;(A)(Ri) A,ORL A,#data,;(A)data A,ORL direct,A,;(direct)(A) direct,ORL direct,#data,;(direct)datadirect,作用:,用于使某些位置1,。,目标地址,9/16/2024,74,5、逻辑异或指令XRL,XRL A,Rn,;(A),(Rn) A,XRL A,direct,;(A),(direct) A,XRL A,Ri,;(A),(Ri) A,XRL A,#data,;(A),data A,XRL direct,A,;(direct),(A) direct,XRL direct,#data,;(direct),datadirect,作用:,用于使某些位取反,其余位不变,。,用,1,异或使对应位,取反,,用,0,异或使对应位保留(,不变,);自身异或,实现清零。,9/16/2024,75,例,写出完成以下各功能的指令:,1)只对累加器A中的1、3、5位清0;,2)只对A中的2、4、6位置1;,3)只对A中的0、1、6、7位取反。,4)使(A)=AAH的高四位不变,低四位取反。,对应指令如下:,ANLA,#11010101B,ORLA,#01010100B,XRLA,#11000011B,XRL,A, #00001111B,9/16/2024,76,3.2.4,控制转移类指令,MCS-51单片机有,17条,转移类指令,包括无条件转移指令、条件转移指令、子程序调用及返回指令等。,对标志位影响:,只有比较转移指令影响进位标志CY,,其它指令不影响标志位。,9/16/2024,77,一、无条件转移指令,无条件转移指令:,当程序执行该指令后,,,程序无条件地转移到指定的地址去执行。,包括,短转移,、,长转移,和,间接转移,3条指令,1、短转移指令SJMP,(相对转移指令,2字节),SJMP rel,;(PC)+ relPC,rel=(Ad-As-Bn):,相对转移偏移量,,有符号数,128127,,负数表示向回跳转,正数表示向前跳转。,指令实际写为:,“,SJMP,目标地址标号”,P47,9/16/2024,78,SJMP $:,停机指令,。,(HERE:SJMP HERE),P39,9/16/2024,79,2、长转移指令LJMP(3字节指令),LJMP addr16,;addr16,PC,程序可以跳转到,64KB,程序存储器空间,的任何地方。,指令的实际编写形式为:“,LJMP,目标地址标号”。,9/16/2024,80,3、间接跳转指令JMP(单字节),也叫,散转指令、多分支转移,指令。,JMP A+DPTR,;(A)+(DPTR),PC,DPTR,为基址,,A,为相对偏移,在,64KB,范围内无条件转移。,说明:,(1)DPTR,一般为确定的值,累加器,A,为变值,根据,A,的值转移到不同的地方,因此该指令,也叫散转指令,。,(2),在使用中,往往与一个转移指令表一起实现多分支转移。,9/16/2024,81,例,3-13,分析下面多分支转移程序段。,MOV B,,,#3,MUL AB;,开始时,(A)=0,、,1,、,2,MOV DPTR,,,#TABLE,;,表首地址送,DPTR,JMP A+DPTR,;,根据,A,值转移,TABLE,:,LJMPTAB0;(A)=0,时转到,TAB0,执行,LJMPTAB1;(A)=3,时转到,TAB1,执行,LJMPTAB2;(A)=6,时转到,TAB2,执行,.,程序中,根据累加器,A,的开始值(,0,、,1,、,2,)转移到相应的,TAB0,TAB2,分支去执行。,9/16/2024,82,二、,条件转移指令,当指令中条件满足时,程序转到指定位置执行,条件不满足时,程序顺序执行,。,条件转移指令有三种:,判断累加器,A,转移指令,、,比较转移指令,、,循环转移指令,,共,8,条。,9/16/2024,83,1,、判断,累加器,A,转移指令,(,条件转移指令,),判断,A,为,0,转移:,JZ rel,;(A),0, (PC)+ relPC;(A),0,顺序执行,判断,A,非,0,转移:,JNZ rel,;(A),0, (PC)+ relPC;(A),0,顺序执行,指令的实际编写形式分别为:“,JZ,目标地址标号,”和,“,JNZ,目标地址标号,”。,9/16/2024,84,例,试编写程序,把,片外RAM,地址从,2000H,开始的数据,传送到,片内RAM,地址从,30H,开始的单元,直到出现00H为止。,程序段如下:,MOVDPTR,#2000H,MOVR0,#30H,LOOP:,MOVX A,DPTR,MOVR0,A,INCR0,INCDPTR,JNZLOOP,;(A)0,跳转,SJMP $,;程序停留到此,9/16/2024,85,2,、比较不相等转移指令,CJNE,比较转移指令功能较强,共有4条指令 ,,一般格式为:,CJNE操作数1,操作数2,rel,(,目标标号,),指令功能:,两个操作数做比较,若不等则转移,否则顺序执行,。,9/16/2024,86,具体形式如下,,第一条:,CJNEA,,,direct,,,rel,第二条:,CJNEA,,,#data,,,rel,第三条:,CJNERn,,,#data,,,rel,第四条:,CJNERi,,,#data,,,rel,9/16/2024,87,注,:,(,1,)编程,时,rel用目标地址标号表示,,CJNE A, #21,LOOP1,(,2,)指令执行过程中的比较操作实际上为减法操作,不保留两数之差,但要形成Cy标志。,9/16/2024,88,3,、减,1,不为,0,(循环转移指令),DJNZ,循环转移指令共有两条指:,DJNZ Rn,rel,;,2,字节指令。,DJNZ direct,rel,;,3,字节指令。,指令的实际编写形式为:,DJNZ Rn,,目标地址标号,DJNZ direct,,目标地址标号,9/16/2024,89,例,3-15,试编写程序,统计片内,RAM,中从,40H,单元开始的,20,个单元中,00H,的个数,结果存于,R2,中。,程序段一(,用,JNZ,判断数据是否为,0,):,MOVR0,,,#40H,;,R0,指向,40H,MOVR7,,,#20,;,R7,控制循环,MOVR2,,,#0,;,R2,存放结果,LOOP:,MOVA,R0,JNZNEXT,;,(A)0,转,INCR2,NEXT,:,INCR0DJNZ R7,,,LOOP,SJMP $,9/16/2024,90,程序段二,(,用,CJNE,判断数据是否为,0,),:,MOVR0,,,#40H,;,R0,指向,40H,MOVR7,,,#20,;,R7,控制循环,MOVR2,,,#0,;,R2,存放结果,LOOP:,CJNE R0,#00H,NEXT,INCR2,NEXT,:,INCR0DJNZ R7,,,LOOP,9/16/2024,91,三、子程序调用和返回指令,这类指令有,3,条,一条调用,两条返回。,1,、子程序调用指令,A,CALLaddr16,( 2字节指令),LCALLaddr16,(3字节指令),9/16/2024,92,2,、子程序返回指令(,只能用在子程序末尾,),RET,;,9/16/2024,93,3,、中断服务程序返回指令,RETI,;,“RETI”只能用在中断服务程序末尾。,四、空操作指令,NOP,;延时一个机器周期,常用于,延时,9/16/2024,94,还有两条指令:,这两条指令是“,AJMP,”和“,ACALL,”,,称为绝对转移,(短转移),指令,和,绝对子程序调用,(短调用),指令,。,初识这两条指令:,这两条指令的转移范围是绝对划定的2KB,用不好会出现错误,,并且其编码也不好理解(见附录B),,所以没有必要使用这两条指令。,9/16/2024,95,3.2.5,位操作指令,说明:在进行位操作时,,位累加器C即为进位标志CY,。,位地址区域:,1)片内RAM字节地址20H2FH单元中连续的128个位,(位地址为00H7FH);,2)部分SFR中的位,。,9/16/2024,96,位地址的表示方式:,1)直接位地址(00HFFH),如18H。,2)字节地址带位号,如20H.0,表示20H单元的第0位。,3)特殊功能寄存器名带位号,如P2.3,表示P2口的第3位。,4)位符号地址。,例如,,用上述4种方式都可以表示PSW(D0H)中的第2位,分别为:,D2H,、,D0H.2,、,PSW.2,、,OV,。,9/16/2024,97,位操作指令共有17条,,可以将其分成:,位数据传送指令,、,位逻辑操作指令,、,位控制转移指令,三组进行讨论。,9/16/2024,98,一、位传送指令,MOVC,bit,;(bit) C,MOVbit,C,;(C) bit,例,编写程序,把片内RAM中07H位的数值,传送到ACC.0位。,程序段如下,:,MOVC,,,07H,MOV,ACC.0,,,C,注意:,位之间不能够直接传送,必须借助于,C,。,9/16/2024,99,二、位逻辑操作指令,位逻辑操作指令包括位清0、位置1、位取反、位与、位或,共10条指令。,1、位清0指令,CLRC,;0 C,CLRbit,;0 bit,2、位置1指令,SETB C,;1 C,SETB bit,;1 bit,9/16/2024,100,3、位取反指令,CPLC,;(C) C,CPLbit,;(bit) bit,4、位与指令,ANLC,bit,; (C) (bit) C,ANLC,bit,; (C)(bit) C,5、位或指令,ORLC,bit,; (C)(bit) C,ORLC,bit,; (C)(bit) C,注,:在MCS-5指令系统中没有位异或指令,必须用位操作指令来实现。(P41 5),9/16/2024,101,三、位条件转移指令(P,41,4),位转移指令是判断C或bit为条件的转移指令,共5条指令。,1、以C为条件的转移指令(2字节指令),JC rel,;若(C)=1, 则(PC)+relPC;否则顺序向下执行,JNC rel,;若(C)=0, 则(PC)+relPC;否则顺序向下执行,9/16/2024,102,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;,否则顺序向下执行,9/16/2024,103,例,编写程序,利用位操作指令,实现下图所示的硬件逻辑电路功能。,+,&,+,&,P1.0,P1.1,P1.2,P1.3,P1.4,P1.5,D,E,F,G,程序段如下:,MOVC,P1.1,ORLC,P1.2,CPLC,ANLC,P1.0,CPLC,9/16/2024,104,MOVF0H,C ;(C) F0H位,MOVC,P1.3 ;(P1.3) C,ANLC,P1.4;(C) P1.4 C,CPLC;,ORLC,F0H ;(C)(0F0H) C,MOVP1.5,C ;(C) P1.5,+,&,+,&,P1.0,P1.1,P1.2,P1.3,P1.4,P1.5,D,E,F,G,9/16/2024,105,3.3 汇编语言程序格式及伪指令,9/16/2024,106,标号 源程序 注释,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,; 结束标记,9/16/2024,107,伪指令的功能:,在汇编程序中,用于,指示,汇编程序如何对源程序进行汇编。,对伪指令的处理:,不同于指令,,在汇编时并不翻译成机器代码,,只是在汇编过程进行相应的,控制和说明,。,伪指令的具体作用:,通常在汇编程序中用于,定义数据、分配存储空间、控制程序的输入/输出,等。,在MCS-51系统中,常用的伪指令有以下7条。,9/16/2024,108,一、ORG伪指令,ORG伪指令称为,起始汇编,伪指令,,常用于汇编语言某程序段的开始或某个数据块的开始。一般格式为:,标号:ORG16位地址,其标号为可选项。例如:,ORG0040H,MAIN:,MOVSP,#0DFH,MOV30H,,,#00H,9/16/2024,109,二、END伪指令,END伪指令称为,结束汇编,伪指令,。一般格式为:,END,注:,一个源程序只能有一个,END,命令。,三、EQU伪指令,EQU伪指令称为,赋值,伪指令,。一般格式为,标号 EQU项,(常数、常数表达式、 字符串或地址标号),EQU的功能是将右边的项赋值给左边。,无冒号,9/16/2024,110,注:,EQU伪指令中的标号必须先赋值后使用。此值可以使8进制数或地址也可以使16进制数或地址。,A EQU 20H,A10 EQU 10H,DELAY EQU 07E6H,9/16/2024,111,四、BIT伪指令,BIT伪指令称为,位地址符号,伪指令。其格式为:,标号 BIT位地址,BIT伪指令的功能是把右边的地址赋给左边的标号,。位地址可以是前面所述的4种形式中的任一种。例如:,FLAGRUNBIT00H,FLAGMUSBIT01H,FLAGALARBITP1.7,9/16/2024,112,五、DB伪指令,BD伪指令称为,定义字节,伪指令。其格式为:,标号:DB项,(字节数据、字节数表或字符、字符串),它的功能是从指定单元开始定义(存储)若干个字节的数据或字符、字符串,。字符用ASCII码表示。,注:,用DB伪指令定义的数据,只占一个字节,9/16/2024,113,例:,ORG 0900H,TAB: DB 45H, 73,A,上述程序汇编后:,(0090H)=45H,(0091H)=49H,(0092H)=41H,9/16/2024,114,六、DW伪指令,D,W伪指令称为,定义字,伪指令。其格式为:,标号:DW字数据或字数据表,D,W伪指令的功能是从指定单元开始定义(存储)若干个字数据,,,每一个数据都占2个字节,。其中标号是可选的。,注意:高字节存放在前,低字节存放在后,9/16/2024,115,例如:,ORG1000H,TABLE2:BW1234H,24H,上述程序汇编后:,(1000H)=12H,(1001H)=34H,(1002H)=00H,(1003H)=24H,9/16/2024,116,本章小结,本章首先认识了汇编语言的概念及其构成,。,然后介绍了MCS-51单片机的寻址方式、指令系统,以及常用的汇编伪指令。,本章是单片机汇编语言程序设计的基础,为了成为单片机程序设计的高手,必须要掌握好本章的内容。,9/16/2024,117,习题,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,9/16/2024,118,2、指出下列程序执行后的操作结果。(1)MOV A,#60H,MOV R0,#40H,MOV R0 ,A,MOV 41H, R0,XCH A, R0,9/16/2024,119,(2) MOV DPTR,#2003H,MOV A,#18H,MOV 20H ,#38H,MOV R0, #20H,XCH A, R0,9/16/2024,120,3、已知(20H)=X,(21H)=Y和(22H)=Z,请用图示说明下列程序执行后堆栈中内容是什么?,(1)MOV SP,#70H,PUSH 20H,PUSH 21H,PUSH 22H,9/16/2024,121,(2)MOV SP,#60H,PUSH 22H,PUSH 21H,PUSH 20H,9/16/2024,122,4、已知(SP)=73H,(71H)=X,(72H)=Y和(73H)=Z,试问执行下列程序后,20H、21H、22H单元中内容是什么?并用图示说明堆栈指针SP的指向和堆栈中数据的变化。,POP 20H,POP 21H,POP 22H,9/16/2024,123,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!