80C51指令系统ppt课件.ppt_第1页
80C51指令系统ppt课件.ppt_第2页
80C51指令系统ppt课件.ppt_第3页
80C51指令系统ppt课件.ppt_第4页
80C51指令系统ppt课件.ppt_第5页
已阅读5页,还剩85页未读 继续免费阅读

下载本文档

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

文档简介

本章学习目标:了解指令及指令系统常识熟悉指令中常用符号在理解的基础上牢记7种寻址方式熟悉各类指令的功能及应用范围能使用指令完成各种常规任务,第2章单片机的指令系统,第二章80C51系列单片机指令系统,1,2.1指令系统概述,1指令分类一台计算机的CPU所能执行的全部指令的集合称为这个CPU的指令系统。指令系统是开发和生产厂商定义的,如要使用其单片机,用户就必须了解和遵循这些指令标准,要掌握某种(类)单片机,指令系统的学习是必须的。80C51共有111条指令:按照字节分:单字节指令49条,双字节指令45条,三字节指令17条;按照指令执行时间分类:单机器周期指令64条,双机器周期指令45条,4机器周期指令2条,80C51指令系统还有极为丰富的位操作指令,充分体现了单片机面向控制的特点。,2,2指令格式标号:操作码操作数1,操作数2,操作数3;注释NEXT:MOVA,R0;A(R0)标号是一个名字,用来标明指令的地址,由16个字符组成MOV是操作码,它表示指令的性质和功能,此处其功能是将R0中的内容送到累加器A中A是数据传送的目的地,称为目的操作数R0是数据的来源,称为源操作数,2.1指令系统概述,3,3指令系统中常用符号说明,2.1指令系统概述,4,执行指令需要操作数,寻址方式即指找到操作数的方法;寻址空间即指操作数所在的存储空间。80C51系列单片机合计七种寻址方式,分别为:立即寻址寄存器寻址直接寻址寄存器间接寻址变址寻址相对寻址位寻址对于双字节指令,两个操作数均有寻址方式。下面要介绍的均是源操作数寻址方式。,2.寻址方式和寻址空间,5,1立即数寻址在指令中直接给出参与操作的数据,这种寻址方式称为立即数寻址。这一直接给出的数据称为立即数,立即数前要加上“#”符号,例如:MOVA,#0EH;A0EHMOVDPTR,#2100H;DPTR2100H,2.寻址方式和寻址空间,6,2寄存器寻址参与操作的数据由寄存器给出,这种寻址方式称为寄存器寻址。由于寄存器在CPU的内部,所以采用该寻址方式可以获得较高的运算速度,可用于该寻址方式的寄存器有R0R7、DPTR、A、B。如:MOVA,R1;A(R1)该指令将R1内的数据传送到累加器A中,源操作数R1和目的操作数均采用了寄存器寻址。再比如:INCDPTR;DPTR(DPTR)+1,2.寻址方式和寻址空间,7,3直接寻址在指令中直接给出操作数的地址的寻址方式称为直接寻址。在该寻址方式中,操作数存放在片内数据存储器中,地址长度为8位。这种寻址方式可以访问:内部数据RAM低128B(该空间还可以采用寄存器间接寻址)和特殊功能寄存器SFR(该空间只能采用直接寻址)。,例如:在片内RAM60H单元存放一个8位二进制数3CH,执行指令MOVA,60H后,结果为(A)=3CH。如图2-1所示。,2.寻址方式和寻址空间,8,4寄存器间接寻址在指令中以指定寄存器的内容作为操作数地址的寻址方式称为寄存器间接寻址。这种方式可用于访问内部RAM和外部数据存储器。能够用于寄存器间接寻址方式的寄存器有:R0、R1、DPTR和SP。在间接寻址寄存器前加“”表示间接寻址。例如:MOVA,R0;A(R0),假定R0中的内容为50H,50H单元内容为45H,图2-2给出了寄存器间接寻址方式的执行过程。,2.寻址方式和寻址空间,9,寄存器间接寻址的寻址范围:(1)片内128B的RAM,用R0,R1作间址寄存器,如MOVA,R0;(2)片外64KB的数据存储器,用DPTR作间址寄存器,如MOVXA,DPTR;(3)堆栈区域,用SP作间址寄存器,如PUSHACC;(4)片外256B数据存储器,用R0,R1作间址寄存器,如MOVXA,R0;,2.寻址方式和寻址空间,10,5变址寻址基址寄存器(DPTR或PC)的内容与变址寄存器(累加器A)的内容相加,其和形成16位地址作为操作数的地址的寻址方式称为变址寻址。该类寻址方式用于程序存储器的访问,多用于查表程序。例如:MOVCA,A+DPTR;A(A)+(DPTR)设(A)=12H,(DPTR)=02E3H,(02F5H)=1EH,则结果为(A)=1EH,执行情况见图2-3所示。,变址寻址指令只有3条,另外两条是:MOVCA,A+PCJMPA+DPTR,2.寻址方式和寻址空间,11,6相对寻址相对寻址是以程序计数器PC的当前值(是指当前跳转指令的下一条指令的地址)为基准,加上指令中给出的相对偏移量rel以得到程序执行地址的寻址方式。这种寻址方式的目的是修改PC的值,从而实现程序的转移。转移的目的地址可参见如下表达式:目的地址=转移指令地址+转移指令字节数+rel值得注意的是,偏移量rel有正负之分,其取值范围是-128+127。,2.寻址方式和寻址空间,12,其中,操作码80H存放在3000H单元中,54H是设定的相对偏移量rel,存放在3001H单元。指令的执行过程如图2-4所示。,例如:有双字节相对转移指令,指令地址操作码操作数指令注释3000H8054HSJMPrel;PC(PC)+2+rel,2.寻址方式和寻址空间,13,7位寻址位寻址是将8位二进制数中的某一位作为操作数,在指令中给出的是位地址,一般用bit表示。例如:CLRP0;将P口的第位清零位寻址的范围为:,片内RAM区的HF的个单元中的位,如MOVC,30H字节地址能被整除的SFR,如SETBP1.0,2.寻址方式和寻址空间,14,表寻址方式及寻址空间,2.寻址方式和寻址空间,15,2.3指令系统,2.3.1数据传送指令(通用传送类),通用传送指令的助记符为MOV(Move),格式如下:MOV,此类指令的功能是把源操作数指定的数据传送到目的操作数(目的地址)所指定的存储单元中。MOV指令的传送关系如图2-5所示。,图2-5,Movdirect,directMovdirect,RiMovdirect,RnMovdirect,AMovdirect,#data,16,2.3指令系统,2.3.1数据传送指令(通用传送类),例1设内部RAM中(50H)=40H,(40H)=10H,P1口作输入口,(P1)=0ABH,问程序执行后各存储器中的数据是什么?MOVR0,#50H;立即数50H送R0中,(R0)=50HMOVA,R0;R0间接寻址,将50H单元内容送A,(A)=40HMOVR1,A;A送R1,(R1)=40HMOVB,R1;R1间接寻址,将40H单元内容送B,(B)=10HMOVR1,P1;将P1内容送40H单元,(40H)=0ABHMOVP2,P1;将P1内容送P2,(P2)=0ABH执行结果:(R0)=50H,(A)=40H,(R1)=40H(B)=10H,(P1)=0ABH,(40H)=0ABH(P2)=0ABH任何不符合格式要求的“指令”都是不合法的。,17,2.3指令系统,2.3.1数据传送指令(特殊传送类),这类指令用于访问片外RAM或扩展的I/O口。1读写片外RAM指令MOVX(1)用DPTR进行间接寻址的指令读:MOVXA,DPTR;A(DPTR)写:MOVXDPTR,A;(DPTR)A(2)用Ri进行间接寻址的指令读:MOVXA,Ri;(A)(Ri)写:MOVXRi,A;(Ri)A,18,2.3指令系统,2.3.1数据传送指令(特殊传送类),例2把片外RAM的36H单元中的数据送到片外RAM的1200H单元。分析(36H)(1200H)程序如下:MOVR1,#36HMOVXA,R1MOVDPTR,#1200HMOVXDPTR,A下面的程序可以实现吗?MOVDPTR,#1200HMOVR1,#36HMOVDPTR,R1注意:片外RAM之间不能直接传送数据,必须经过累加器A,19,2.3指令系统,2.3.1数据传送指令(特殊传送类),2.查表指令MOVCMOVCA,A+DPTR;A(A)+(DPTR)MOVCA,A+PC;A(A)+(PC)这两条指令主要用于查表,可以完成从程序存储器中取得数据并送入累加器A的功能。(1)第一条指令以DPTR为基址寄存器,查表时DPTR用于存放表格的起始地址。表格起始地址可以设置在64KB程序存储器中的任何位置。(2)第二条指令以PC为基址寄存器,因A为8位无符号数,故该指令的查找范围是从PC当前值开始的255个地址单元内。若(DPTR)=3000H,(A)=60H,执行指令“MOVCA,A+DPTR”后,将程序存储器3060H单元的内容送A。,20,2.3指令系统,2.3.1数据传送指令(特殊传送类),例3已知累加器A中有一个09范围内的数,请用查表法编程求出该数的平方值。设平方表表头地址为1000H。方法1以DPTR为基址寄存器MOVDPTR,#1000H;表头地址MOVCA,A+DPTR;查表求出平方值送A若原(A)=3,查表后(A)=9。方法2以PC为基址寄存器ORG0FFBH0FFBHADDA,#data;加修正量,此例data=02H0FFDHMOVCA,A+PC;查表0FFEHSJMP$;暂停1000HDB01001HDB11002HDB41009HDB81END修正量=表头地址PC当前值=1000H0FFEH=02H所以data=02H(SJMP指令2字节)。查表指令和被查表格通常在同一页内(页内地址00H0FFH即0255),21,2.3指令系统,2.3.1数据传送指令(特殊传送类),3.数据交换指令交换类指令完成的传送是双向的,是两个字节间或两个半字节间的双向交换。特点是只能与累加器A进行交换。字节交换XCHA,Rn;(A)(Rn)XCHA,direct;(A)(direct)XCHA,Ri;(A)(Ri)功能:字节数据交换,实现3种寻址操作数内容与A中内容的互换。例如:若(R1)=16H,(A)=28H,执行“XCHA,R1”后,(A)=16H,(R1)=28H,22,2.3指令系统,2.3.1数据传送指令(特殊传送类),半字节交换XCHDA,Ri;(A30)(Ri)30)SWAPA;(A30)(A74)例如:若(R1)=50H,(50H)=74H,(A)=26H,执行指令“XCHDA,R1”后,(A)=24H,(50)=76H。再如:若(A)=38H,执行指令“SWAPA”后,(A)=83H。,23,2.3指令系统,2.3.1数据传送指令(特殊传送类),4.堆栈操作指令(PUSH、POP)堆栈操作指令只有两条:入栈指令用于保护片内某个单元的内容,出栈指令用于恢复片内某个单元的内容。通常入栈指令和出栈指令是成对出现的。入栈:PUSHdirect;SPSP+1,(SP)(direct)出栈:POPdirect;direct(SP),SP(SP)1入栈操作:首先SP+1,然后写入数据;出栈操作:首先读出数据,然后SP1。单片机复位操作后,SP的值被初始化为07H。,24,2.3指令系统,2.3.1数据传送指令(特殊传送类),如图2-6所示,在堆栈的原始状态下执行一条“PUSHACC”后,堆栈的变化过程如图2-6(b);在堆栈的原始状态下执行一条“POPACC”后,堆栈的变化过程如图2-6(c),图2-6堆栈存入/取出数据的操作,25,2.3指令系统,2.3.1数据传送指令(特殊传送类),例4设(60H)=X,(70H)=Y,试用堆栈指令实现60H和70H单元内容的互换。MOVSP,#50H;设栈底PUSH60H;51H(60H),X压入51H单元PUSH70H;52H(70H),Y压入52H单元POP60H;60H(52H),Y弹出进入60H单元POP70H;70H(51H),X弹出进入70H单元想一想用数据交换指令如何实现60H和70H单元内容的互换?,26,2.3指令系统,2.3.2算术运算指令,算术运算指令可以完成加、减、乘、除四则运算以及加1、减1和二-十进制调整操作。这类指令多与累加器A有关,A常作为目的操作数,即指令运算结果存放在A中。同时它也能充当源操作数。这类指令大多影响标志位,因而分析指令运算结果和对标志位的影响是本小节的重点。具体影响见表2-3,27,2.3指令系统,2.3.2算术运算指令,表2-3算术运算指令对标志位的影响,说明:1.“”表示对应的指令操作影响该标志位;“0”表示相应的指令操作对该标志位清0;“”表示相应的指令操作不影响该标志。2.累加器加1(INCA)和减1(DECA)指令仅影响P标志。,28,2.3指令系统,2.3.2算术运算指令,1.不带CY位的加法指令格式:ADDA,Rn;A(A)+(Rn)ADDA,direct;A(A)+(direct)ADDA,Ri;A(A)+((Ri))ADDA,#data;A(A)+data功能:把源操作数与A中内容相加后再送入A中。在上述4条指令中,参与运算的操作数都是8位二进制数,且其中一个操作数必须是累加器A。编程人员可以将参与运算的两个操作数视为无符号数(0255),也可以把它们看作是有符号数。若看作是有符号数,则通常采用补码形式(-128+127)。,加法指令,29,2.3指令系统,2.3.2算术运算指令,计算机总是把操作数当作有符号数(补码形式)看待并影响PSW的相关标志位。影响情况如下:进位/借位标志CY:两数和的D7位有进位时,(CY)=1,否则,(CY)=0。半进位/借位标志AC:两数和的D3位有进位时,(AC)=1,否则,(AC)=0。溢出标志OV:两数和的D7,D6位只有一位有进位时,(OV)=1;否则,(OV)=0,即OV=C6C7。奇偶标志P:当累加器A中“1”的个数为奇数时,(P)=1;为偶数时(P)=0。,加法指令,30,2.3指令系统,2.3.2算术运算指令,例5试分析80C51单片机执行下述指令后,累加器A和PSW各标志位的变化。MOVA,#0A5HADDA,#0CFH解:(A)=10100101B+Data=11001111BCY01110100BC7C6AC(CY)=C7=1;(AC)=1;溢出标志(OV)=C7C6=10=1,有溢出;(P)=0。执行结果:(A)=74H。若为无符号数运算,(CY)=1,表示结果超出(0255)范围。若为带符号数运算,因(-49)+(-91)=-140,超出了(-128+127)的范围,所以OV=1溢出。,加法指令,31,2.3指令系统,2.3.2算术运算指令,2.带CY位加法指令带CY位加法指令常用于多字节加法运算,格式如下:ADDCA,Rn;A(A)+(Rn)+(CY)ADDCA,direct;A(A)+(direct)+(CY)ADDCA,Ri;A(A)+((Ri))+(CY)ADDCA,#data;A(A)+data+(CY)功能:把源操作数与A中内容相加后再加上标志位CY的当前值,将和送入A中。这组指令的操作影响PSW的CY、AC、OV和P标志。假设当前(CY)=1,(A)=85H,(R0)=97H,执行指令“ADDCA,R0”后,则使(A)=1DH,(CY)=1,(AC)=0,(OV)=1,(P)=0。,加法指令,32,2.3指令系统,2.3.2算术运算指令,3.加1指令格式:INCA;A(A)+1INCdirect;direct(direct)+1INCRn;Rn(Rn)+1INCRi;(Ri)((Ri))+1功能:把源操作数的内容加1,结果再送回原来的单元。这些指令仅“INCA”影响奇偶标志P,其余指令都不影响标志位的状态。,加法指令,33,2.3指令系统,2.3.2算术运算指令,4.十进制调整指令格式:DAA;若AC=1或A3A09,则A(A)+06H;若CY=1或A7A49,则A(A)+60H功能:通常跟在BCD码加法运算之后,用来对累加器A中刚刚进行的两个BCD码的相加结果进行十进制调整。,加法指令,34,2.3指令系统,2.3.2算术运算指令,1.带CY位减法指令与加法指令不同,减法运算中只有带CY位的减法指令,其格式如下:SUBBA,Rn;A(A)-(Rn)-(CY)SUBBA,direct;A(A)-(direct)-(CY)SUBBA,Ri;A(A)-((Ri))-(CY)SUBBA,#data;A(A)-data-(CY)功能:把累加器A中内容减去指令指定的单元的内容,再减去标志位CY的值,将结果再送回累加器A中。SUBB指令对PSW中标志位的影响类似于ADDC加法指令。,减法指令,35,2.3指令系统,2.3.2算术运算指令,例7已知(A)=78H,(CY)=1,问执行完“SUBBA,#0C5H”后A和各标志位的状态。解:列竖式为:(A)=01111000Bdata=11000101B110110011B1减CY110110010B则(A)=0B2H,(OV)=C7C6=10=1,有溢出,(P)=0,(AC)=0。,减法指令,36,2.3指令系统,2.3.2算术运算指令,2减1指令格式:DECA;A(A)-1DECdirect;direct(direct)-1DECRn;Rn(Rn)-1DECRi;(Ri)((Ri))-1DECDPTR;DPTR(DPTR)-1功能:把源操作数的内容减1,结果再送回原来的单元。这组指令仅“DECA”影响奇偶标志P,其余指令都不影响标志位的状态。,减法指令,37,2.3指令系统,2.3.2算术运算指令,格式:MULAB;累加器A与B寄存器相乘功能:将累加器A与寄存器B中的2个无符号8位二进制数相乘,乘积的低8位留在累加器A中,高8位存放在寄存器B中。运算结果将对OV、CY、P标志位产生影响:当乘积大于0FFH,即255(B中内容不为0)时,溢出标志位(OV)=1;否则(OV)=0;标志位CY总是被清0;P的状态由A中的内容决定。例如:(A)=36H,(B)=03H,执行指令“MULAB”之后,(A)=0A2H,(B)=00H,(CY)=0,(OV)=0,(P)=1。,乘法指令,38,2.3指令系统,2.3.2算术运算指令,格式:DIVAB;累加器A除以寄存器B功能:累加器A中的位无符号数除以寄存器B中的位无符号数,所得的商存在A中,余数存在B中。对标志位的影响:对CY和P标志位的影响与乘法相同;当除数为0时,除法没有意义,(OV)=1,否则(OV)=0。例如:(A)=0FBH(十进制是251),(B)=12H(十进制是18),执行指令“DIVAB”之后,(A)=0DH,(B)=11H,(OV)=0,(CY)=0。,除法指令,39,2.3指令系统,2.3.3逻辑运算与循环指令,逻辑运算指令可以完成与、或、异或、取反、清0操作;循环指令是对累加器A进行循环移位操作,包括向左、向右以及带CY位的移位操作。,40,2.3指令系统,2.3.3逻辑运算与循环指令,格式1:ANLdirect,A;direct(direct)AANLdirect,#data;direct(direct)data功能:源操作数与直接地址指示的单元内容相与,结果送入直接地址指示的单元。格式2:ANLA,#data;A(A)dataANLA,direct;A(A)(direct)ANLA,Rn;A(A)(Rn)ANLA,Ri;A(A)(Ri)功能:源操作数与A相与,结果送入A中。例如:(A)=8CH,(R1)=0ABH,执行指令“ANLA,R1”后,(A)=88H,(R1)=0ABH。,逻辑“与运算”指令,41,2.3指令系统,2.3.3逻辑运算与循环指令,格式1:ORLdirect,A;direct(direct)AORLdirect,#data;direct(direct)data功能:源操作数与直接地址指示的单元内容相或,结果送入直接地址指示的单元。格式2:ORLA,#data;A(A)dataORLA,direct;A(A)(direct)ORLA,Rn;A(A)(Rn)ORLA,Ri;A(A)(Ri)功能:源操作数与A相或,结果送入A中。例如:(A)=0C5H,(R2)=67H,执行指令“ORLA,R2”后,(A)=0E7H。,逻辑“或运算”指令,42,2.3指令系统,2.3.3逻辑运算与循环指令,格式1:XRLdirect,A;direct(direct)AXRLdirect,#data;direct(direct)data功能:源操作数与直接地址指示的单元内容相异或,结果送入直接地址指示的单元。格式2:XRLA,#data;A(A)dataXRLA,direct;A(A)(direct)XRLA,Rn;A(A)(Rn)XRLA,Ri;A(A)(Ri)功能:源操作数与A相异或,结果送入A中。,逻辑“异或运算”指令,43,2.3指令系统,2.3.3逻辑运算与循环指令,格式:CLRA;A0CPLA;A功能:分别对A中内容清0和取反,结果仍存入A中。例如:(A)=7FH,执行指令“CLRA”和“CPLA”后,A中内容分别为00H和80H。,累加器清零和取反指令,44,2.3指令系统,2.3.3逻辑运算与循环指令,逻辑运算指令除了可以进行逻辑运算外,还能完成一些特殊的操作。例如:1清0“CLRA”只能对A清0,若要对某一单元如60H单元清0可以有以下几种方法:方法1MOV60H,#00H方法2MOVA,60HXRLA,AMOV60H,A方法3ANL60H,#00H,逻辑运算指令的典型应用,45,2.3指令系统,2.3.3逻辑运算与循环指令,2.屏蔽将某一存储单元的某几位清0,其它位保持不变,称为屏蔽。被屏蔽的位,原来的数值将被取消,被0取代。屏蔽通常用ANL操作实现。例8编程实现将P1口低4位的值存入30H单元,屏蔽高4位。MOVA,P1ANLA,#0FHMOV30H,A3.置1将某一存储单元的某几位变为高电平1,其它位保持不变。通常用ORL操作实现。,逻辑运算指令的典型应用,46,2.3指令系统,2.3.3逻辑运算与循环指令,例9编程实现将P1口低4位的值保持不变,而高4位置1。结果存入30H单元。MOVA,P1ORLA,#0F0HMOV30H,A4.求反CPLA只能对A的所有位取反,如果需要对某一寄存器的某些位取反,则通常是利用异或指令来实现。例10编程实现将P1口的高4位取反,而低4位保持不变,结果存入40H单元。MOVA,P1XRLA,#0F0HMOV40H,A,逻辑运算指令的典型应用,47,2.3指令系统,2.3.3逻辑运算与循环指令,累加器循环移位指令,格式:RLA;累加器左环移RLCA;带CY的累加器左环移RRA;累加器右环移RRCA;带CY的累加器右环移每条指令的操作过程如图2-7所示。,图2-7移位操作示意图,48,2.3指令系统,2.3.3逻辑运算与循环指令,累加器每左移一位相当于乘以2。同理,累加器右移一位相当于除以2,大家可以自己验证。例11已知(A)=0ACH=10101100B,(CY)=0,问执行以下程序后(A)=?,(CY)=?。RLA;左移A01011001BRRCA;带CY右移A00101100B,CY=1则(A)=2CH,(CY)=1说明:1.所有对A操作的指令都对标志位P有影响。2.逻辑运算指令不影响CY、OV、AC。3“RLCA”和“RRCA”指令对CY和A都有影响。,累加器循环移位指令,49,2.3指令系统,2.3.4控制转移指令,程序的顺序执行是由PC自动加1实现的,要改变程序的执行顺序,实现分支转向,应通过强迫改变PC值的方法来实现,这就是控制转移类指令的基本功能。80C51的控制转移指令有无条件转移、条件转移及子程序调用与返回等。,50,2.3指令系统,2.3.4控制转移指令,不规定条件的程序转移称之为无条件转移。这类指令共4条:1.长转移LJMPaddr16;PCaddr16这是一条3字节指令,指令执行后能把16位地址(addr16)送PC,从而实现程序转移。因转移范围大,可达64KB,因此称之为“长转移”。例如“LJMP2600H”就表示程序要转移到2600H单元去。在修改或调试程序时,常常要插入或删除部分指令或对当前指令所处的位置进行调整,因此,在实际编写程序时通常采用符号地址。如“LJMPNEXT”。,无条件转移指令,51,2.3指令系统,2.3.4控制转移指令,2.短转移AJMPaddr11;PC(PC)+2,PC100addr11这是一条2字节指令,指令执行时,先将PC的内容加2(这时PC指向的是AJMP的下一条指令),然后把指令中的11位地址码传送到PC100,保持PC1511原来的内容不变。由于转移的地址是11位(211=2K),故AJMP指令的转移范围是包含AJMP下一条指令在内的2K空间。与LJMP指令类似,AJMP指令后面最好也用符号地址,但必须保证该符号所处的地址在2KB的寻址范围内。,无条件转移指令,52,2.3指令系统,2.3.4控制转移指令,3.相对转移SJMPrel;PC(PC)+2,PC(PC)+rel这是一条2字节指令,其功能是先计算目的地址,并按计算得到的目的地址实现程序的相对转移。计算公式为:目的地址=(PC)+2+rel其中rel为相对偏移量,它本身是一个带符号的8位二进制数的补码形式,取值范围为-128+127(00H7FH对应0+127,80HFFH对应表示-128-1)。因此所能实现的转移是双向的:如果rel为正数表示正向转移;如果rel为负数则表示反向转移。例如:LOOP:MOVR1,60HSJMPNEXT;rel0NEXT:MOVA,#30HSJMPLOOP;rel0,无条件转移指令,53,2.3指令系统,2.3.4控制转移指令,4.散转移JMPA+DPTR;PC(A)+(DPTR)这是一条1字节转移指令,指令的目的地址由A的内容和DPTR内容之和来确定,即目的地址=(A)+(DPTR)。例如:有一段程序如下:MOVDPTR,#TABLEJMPA+DPTRTABLE:AJMPNEXT0AJMPNEXT1AJMPNEXT2AJMPNEXT3当(A)=00H时,程序将转到NEXT0处执行;当(A)=02H时,程序将转到NEXT1处执行;其余类推。,无条件转移指令,54,2.3指令系统,2.3.4控制转移指令,条件转移就是说程序的转移是有条件的。执行条件转移指令时,如果指令中规定的条件满足,则进行程序转移,否则程序顺序执行。条件转移有如下形式:1.累加器判0转移JZrel;若(A)=0,则PC(PC+2)+relJNZrel;若(A)0,则PC(PC+2)+rel功能:对累加器A的内容是否为0进行判断并转移。如图2-9所示。,条件转移指令,55,2.3指令系统,2.3.4控制转移指令,指令中目标地址的计算与SJMP指令相同,且最好以地址符号形式出现,指令执行时对标志位无影响。例如:若累加器的原始内容为00H,则:JNZLOOP1;由于(A)=0,所以程序往下执行INCA;(A)=1JNZLOOP2;由于(A)0,所以程序转向LOOP2处执行,条件转移指令,图2-9累加器判0转移流程图,56,2.3指令系统,2.3.4控制转移指令,2.数值比较转移数值比较转移指令把两个操作数进行比较,比较结果作为条件来控制程序是否转移。共有4种形式:CJNEA,direct,rel;若(A)(direct),则PC(PC)+3+relCJNEA,#data,rel;若(A)data,则PC(PC)+3+relCJNERn,#data,rel;若(Rn)data,则PC(PC)+3+relCJNERi,#data,rel;若((Ri))data,则PC(PC)+3+rel数值比较指令是3字节指令,这是80C51指令系统中仅有的4条3个操作数的指令,在程序设计中非常有用。,条件转移指令,57,2.3指令系统,2.3.4控制转移指令,(1)指令功能程序转移若左操作数=右操作数,则程序顺序执行PC(PC)+3进位标志清0CY0若左操作数右操作数,则程序转移PC(PC)+3+rel进位标志清0CY0若左操作数右操作数,则程序转移PC(PC)+3+rel进位标志置1CY1,条件转移指令,58,2.3指令系统,2.3.4控制转移指令,(2)指令应用数值比较在80C51中没有专门的数值比较指令,两个数的数值比较可以利用这4条指令来实现,如:程序顺序执行,则左操作数=右操作数程序转移且(CY)=0,则左操作数右操作数程序转移且(CY)=1,则左操作数右操作数例如:若(R5)=68H,执行指令“CJNER5,#60H,L1”后,程序将转移到标号L1处。,条件转移指令,59,2.3指令系统,2.3.4控制转移指令,3.减1不为0转移这是一组把减1与条件转移两种功能结合在一起的指令,共2条:(1)寄存器减1不为0转移DJNZRn,rel这是一条2字节指令,非常有用。其功能如下:寄存器内容先减1,如所得结果为0,则程序顺序执行;如减1结果不为0,则程序转移。具体表示如下:Rn(Rn)-1;若(Rn)0,则PC(PC)+2+rel;若(Rn)=0,则PC(PC)+2,条件转移指令,60,2.3指令系统,2.3.4控制转移指令,(2)直接寻址单元减1条件转移DJNZdirect,rel这是一条3字节指令,其功能为:直接寻址单元内容减1,如所得结果为0,则程序顺序执行;如减1结果不为0,则程序转移。具体表示如下:Direct(Direct)-1;若(Direct)0,则PC(PC)+3+rel;若(Direct)=0,则PC(PC)+3这两条指令主要用于控制程序循环。如预先把寄存器或内部RAM单元赋值循环次数,利用减1条件转移指令,以减1后结果是否为0作为转移条件,即可实现按次数控制循环。,条件转移指令,61,2.3指令系统,2.3.4控制转移指令,例分析以下程序的功能MOV50H,#10CLRALOOP:ADDA,50HDJNZ50H,LOOPSJMP$解:该程序执行结果为(A)=10+9+8+7+6+5+4+3+2+1=37H,条件转移指令,62,2.3指令系统,2.3.4控制转移指令,1.调用(1)长调用LCALLaddr16这是一条3字节指令,调用地址在指令中直接给出,通常以标号形式出现。指令执行后,断点进栈保存,以addr16作地址调用子程序。因此本指令的操作内容可表示为:PC(PC)+3SP(SP)+1,(SP)(PC)70SP(SP)+1,(SP)(PC)158PCaddr16,调用与返回指令,63,2.3指令系统,2.3.4控制转移指令,LCALL指令的子程序调用范围是64KB。addr16就是被调用子程序的入口地址,使用比较方便,但3字节指令较长,占用存储空间较多。例如:(SP)=50H,标号地址START为0203H,标号MM为6000H,执行指令“START:LCALLMM”后(SP)=52H,(51H)=03H,(52H)=02H,(PC)=6000H(2)短调用ACALLaddr11这是一条2字节指令,被调用子程序的首地址必须设在包含ACALL下一条指令的第一个字节在内的2KB范围内的片内ROM中。,调用与返回指令,64,2.3指令系统,2.3.4控制转移指令,2.返回RET;子程序返回RETI;中断服务子程序返回(1)RETRET指令与调用指令成对出现,只是调用指令出现在主程序中,而RET指令则出现在子程序的最后一行。RET指令执行子程序返回功能,从堆栈中自动取出断点地址送给程序计数器PC,使程序在主程序断点处继续向下执行,可表示为:PC158(SP),SP(SP)-1PC70(SP),SP(SP)-1例如:(SP)=57H,(57H)=12H,(56H)=50H,执行指令“RET”后,(SP)=55H,(PC)=1250H,CPU从1250H单元开始执行程序。,调用与返回指令,65,2.3指令系统,2.3.4控制转移指令,(2)RETIRETI指令除具有与RET指令相同的功能外,还有清除中断响应时被置位的优先级状态,开放较低级中断和恢复中断逻辑等功能。3.空操作NOP;PC(PC)+1这条指令不产生任何控制操作,只是将程序计数器PC的内容加1。该指令在执行时间上要消耗1个机器周期,在存储空间上占用1个字节。因此常用来实现较短的延时。,调用与返回指令,66,2.3指令系统,2.3.5位操作指令,位操作指令的操作数是字节中的某一位,每位取值只能是0或1,故又称之为布尔操作指令。进行位操作时,以进位标志CY作为位累加器。与字节操作指令中累加器ACC用字符“A”表示相类似,在位操作指令中,位累加器CY要用字符“C”表示。2.6.1位传送指令MOVC,bit;CY(bit)MOVbit,C;bit(CY)这两条指令可以实现指定位地址的内容与位累加器CY内容的相互传送。执行结果不影响其它标志位。例如:MOVC,07H;CY(20H.7),67,2.3指令系统,2.3.5位操作指令,2.6.2位变量修改指令1清零:CLRC;CY0CLRbit;bit02置位:SETBC;CY1SETBbit;bit13取反:CPLC;CY()CPLbit;bit()这组指令分别完成位清“0”、置“1”及取反操作,执行结果不影响其它标志位。例如:CLR06H;20H.60SETBP1.0;P1.01CPL36H;,68,2.3指令系统,2.3.5位操作指令,2.6.3位逻辑运算指令1逻辑“与”ANLC,bit;CY(CY)(bit)ANLC,/bit;CY(CY)()2逻辑“或”ORLC,bit;CY(CY)(bit)ORLC,/bit;CY(CY)()这组指令将位累加器CY与直接位地址进行逻辑与、逻辑或,操作结果再送回CY。斜杠“/”表示该位取反后再参与运算,但不改变其原值,也不影响其它标志位。,69,2.3指令系统,2.3.5位操作指令,2.6.4位条件转移指令1判CY转移JCrel;若CY=1,则转移(PCPC+2+rel),否则程序顺序执行JNCrel;若CY=0,则转移(PCPC+2+rel),否则程序顺序执行上述2条指令分别检测进位/借位标志位CY是1还是0,若条件符合,则CPU转向指定的目标地址去执行程序;否则,顺序执行下条指令。2判位变量转移JBbit,rel;若(bit)=1,则转移(PCPC+3+rel),否则程序顺序执行JNBbit,rel;若(bit)=0,则转移(PCPC+3+rel),否则程序顺序执行,70,2.3指令系统,2.3.5位操作指令,2.6.4位条件转移指令上述两条指令分别检测指定位是1还是0,若条件符合,则CPU转向指定的目标地址去执行程序;否则,顺序执行下条指令。对该位进行检测时,不影响原变量值,也不影响标志位。3判位变量并清0转移JBCbit,rel;若(bit)=1,则PCPC+3+rel,(bit)0;否则程序顺序执行该指令对指定位进行检测,若该位是“1”,将其清0,同时CPU转向指定的目标地址去执行程序;否则,顺序执行下条指令。该指令常用于对定时/计数器查询方式的操作。,71,本章学习目标:了解汇编语言的特点,明确程序设计的基本思路熟悉汇编语言的语句结构,能正确书写汇编语言程序理解伪指令的功能,能正确使用80C51常用伪指令熟悉几种基本的程序结构能读懂教材中的程序实例,学会编写同等难度的应用程序,第2章单片机的指令系统,第三章80C51系列单片机汇编语言,72,3.1汇编语言程序设计基础,单片机与一般集成电路的区别在于可编程应用,程序是单片机应用系统的灵魂。汇编语言是面向机器的语言,因此对单片机系统进行程序设计时必须考虑硬件资源的配置。当硬件系统(原理图设计到PCB版实现)设计完成后,可从以下几方面进行程序设计:1.分析问题针对现有条件,明确在程序设计时应该“做什么”2.确定算法解决“怎样做”的问题3.绘制程序流程图用图形的方法描绘解决问题的思路4.分配内存单元确定程序和数据区的起始地址5.编写源程序用指令的形式将程序流程图实现出来6.汇编用开发机或仿真器将源程序转换成机器码,便于单片机识别7.在线仿真调试查错、改错,对程序进行优化。,73,3.1汇编语言程序设计基础,80C51单片机汇编语言的语句行由4个字段组成,汇编程序能对这种格式正确地进行识别。这4个字段的格式为:标号:操作码操作数;注释括号内的部分可根据实际情况取舍,各字段之间要用分隔符分隔。可用作分隔符的符号有冒号、空格、逗号、分号等。如:MAIN:MOVA,#68H;A68H1.标号标号是指令的符号地址。有了标号,程序中的其它语句才能很方便地访问该语句。有关标号的规定为:标号要由18个ASCII码字符组成,但必须以字母开头,其余字符可以是字母、数字或其它特定字符。不能使用汇编语言已经定义了的符号作为标号,如指令助记符MOV、伪指令记忆符END以及寄存器的符号名称R1等。标号后边必须跟冒号。同一标号在一个程序中只能定义一次,不能重复定义。,74,3.1汇编语言程序设计基础,2.操作码操作码用于规定语句执行的操作。它用指令助记符或伪指令助记符表示,是汇编语句中唯一不能空缺的部分。3操作数操作数用于给指令的操作提供数据或地址。在一条语句中,可能没有操作数,也可能只有1个操作数,还可能同时包含23个操作数。各操作数之间要以逗号分隔。操作数一般以下面几种形式出现:1)常数2)工作寄存器名3)特殊功能寄存器名4)标号名5)符号“$”,表示程序计数器PC的当前值。如:SJMP$6)表达式,75,3.1汇编语言程序设计基础,4注释注释不属于语句的功能部分,它只是对语句的解释说明,只要用“;”开头,就表明以下为注释内容。使用注释可使程序文件的编制显得更加清楚,便于编程人员的阅读和维护。注释的长度不限,一行不够可以换行接着书写,但换行后仍要以“;”开头。,76,3.2伪指令,典型的伪指令,为下一步的汇编工作提供起始地址和结束地址。我们知道,汇编语言程序的机器汇编是由计算机自动完成的,因此在源程序中应该有向汇编程序发出的命令。这种在源程序中出现,通知汇编程序应该如何完成汇编工作的指令,就是伪指令。下面介绍80C51单片机常用的伪指令。,77,3.2伪指令,1.ORG汇编起始命令格式为:ORG16位地址或标号该命令总是出现在源程序的开始位置。用来规定目标程序(即此命令后面的程序或数据块)的起始地址。ORG后面通常是16位地址,也可以是已定义的标号地址或表达式。如ORG1000H。在程序中如果不用ORG规定起始地址,则汇编得到的目标程序将从0000H开始存放。在一个源程序中,ORG指令可以多次使用,但要求地址值要由小到大依序排列,且不能出现空间上的重叠。2.END汇编结束命令格式为:END该命令用于中止源程序的汇编工作。END是汇编语言源程序的结束标志,因此在整个源程序中只能有一条END指令,且位于程序的最后。如果END命令出现在源程序中间,对其后面的源程序,计算机将不予汇编。,78,3.2伪指令,3.EQU(Equate)等值命令格式为:标号名EQU表达式该命令用来给标号赋值。赋值以后,其标号值在整个程序中有效。例如:DATEQU30H4.DB(DefineByte)定义字节命令格式为:标号:DB字节数据表该命令用于从标号指定的地址开始,连续存放字节数据表,常与查表指令MOVC配合使用。其中字节数据表可以是一个或多个字节数据、字符串或表达式。例如:DB“hello”,79,3.2伪指令,5.DW(DefineWord)定义字命令格式为:标号:DW字数据表该命令用于从标号指定的地址开始,连续存放16位字数据表。该数据表在程序存储器中存放的格式为:高8位存放在低地址单元,低8位存放在高地址单元。例如:ORG1000HTABLE:DW1234H,66H汇编后,(1000H)=12H,(1001H)=34H,(1002H)=00H,(1003H)=66H。6.BIT定义位命令格式为:标号名BIT位地址该命令用来将位地址赋值给指定的标号名。例如:KAIGUANBITP1.0将P1.0的位地址赋值给标号KAIGUAN,在后面编程时就可以用KAIGUAN来代替P1.0。,80,3.2伪指令,7.DS(DefineStorage)定义空间命令格式为:标号:DS表达式该命令用于从指定单元开始,预留一定数目的字节单元作存储区,供程序运行使

温馨提示

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

评论

0/150

提交评论