已阅读5页,还剩175页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
,第3章MCS-51单片机指令系统,教学目标3.1MCS-51单片机指令系统概述3.2寻址方式3.3数据传送类指令3.4算术与逻辑运算指令3.5控制转移类指令与位操作类指令本章小结思考题与习题,教学目标,1.理解MCS-51指令的基本格式和各组成部分的功能。2.了解MCS-51指令分类情况。3.熟悉和理解指令系统中常用符号的书写形式及含义。4.理解MCS-51的7种寻址方式的形式、寻址范围和特点。5.熟悉和掌握MCS-51的111条指令的形式、功能和简单应用。,1、指令:,2、指令系统:,一种确定的CPU,它可以执行什么操作/可执行多少种操作,完全由CPU设计师确定,用户只能了解、应用这些操作以完成自己的工作。,规定CPU执行何种操作的命令,由二进码组成,称为机器码。指令由操作码和操作数两部分组成。,规定CPU执行操作的全部命令的集合。,3、程序:,指令按照要求有序排列。,3.1MCS-51单片机指令系统概述,3.1.1指令、指令系统的概念,7407H;240AH;,编程举例:设计实现Y=7+10,指令=操作码操作数,MOVA,#07H;ADDA,#0AH;,用助记符号写出的二进制代码(机器语言),称为CPU的汇编语言。汇编语言与二进码指令一一对应。,0111010000000111B;0010010000001010B;,3.1.2符号指令的格式,一般格式:标号:操作助记符目的操作数,源操作数;注释,每条指令通常由操作码和操作数两部分组成操作码表示计算机执行该指令将进行何种操作操作数表示参加操作的数的本身或操作数所在的地址带方括号【】部分不是每条指令都必须有的,例:MAIN:MOVA,32H;将数32H送到ACC中,指令=操作码操作数,3.1.2符号指令的格式,注:在两个操作数的指令中,通常目的操作数写在左边,源操作数写在右边。,操作数个数,无操作数,单操作数,两操作数,三操作数,一般格式:标号:操作助记符目的操作数,源操作数;注释,指令一般有功能、时间和空间三种属性:功能属性:时间属性:空间属性:,是指每条指令都对应一个特定的操作功能;,是指一条指令执行所用的时间,一般用机器周期来表示;,是指一条指令在程序存储器中存储所占用的字节数。,8,3.1.3指令的字节数,指令长度:1字节(49),2字节(46),3字节(16)。,MOVA,Rn,1.一字节指令:,9,2.二字节指令:,第一字节:操作码第二字节:操作数MOVA,#data,10,3.三字节指令:,第一字节:操作码第二、三字节:操作数(数据、地址)MOVdirect,#data,11,指令字节数总结,1、操作码占一个或者不到一个字节。,2、一个操作数占一个或者两个字节。,3、一个地址占一个或者两个字节,或者一个半。,4、A、B、DPTR、Rn不单独占一个字节,隐藏在操作码中。,12,13,3.1.4指令的分类,MCS-51单片机指令系统具有功能强、指令短、执行快等特点,共有111条指令。,数据传送(29条)算术操作(24条)逻辑操作(4条)程序转移(17条)位操作(17条),功能属性,单字节指令(49条)双字节指令(46条)三字节指令(16条),空间属性,单机器周期指令(64条)双机器周期指令(45条)4个机器周期的指令(2条)(乘法、除法),时间属性,3.1.5符号指令及其注释中常用的符号,(1)Ri和Rn:(2)#data:(3)#data16:(4)rel:(5)addr16和addr11:,表示当前工作寄存器区中的工作寄存器。i取0或1,表示R0或R1。n取07,表示R0R7。,表示包含在指令中的8位立即数。,表示包含在指令中的16位立即数。,以补码形式表示的8位相对偏移量,范围为128127,主要用在相对寻址的指令中。,分别表示16位直接地址和11位直接地址。,3.1.5符号指令及其注释中常用的符号,(6)direct:(7)bit:(8)(X):(9)(X):(10)/:(11):,表示直接寻址的8位直接地址。,表示可位寻址的直接位地址。,表示X单元中的内容。,表示以X单元的内容为地址的存储器单元内容,即(X)作地址,该地址单元的内容用(X)表示。,“/”表示对该位操作数取反。,“”表示操作流程,将箭尾一方的内容送入箭头所指另一方的单元中去。,3.2MCS-51的寻址方式,1.寻址方式,共有7种,即:寄存器寻址、直接寻址、寄存器间接寻址、立即寻址、变址寻址、相对寻址和位寻址,如表3.1所示。,2.寻址方式的种类,寻找操作数的方法定义为指令寻址方式。,若不特别声明,我们后面提到的寻址方式均指源操作数的寻址方式。,表3.1寻址方式及对应的存储器空间,1.操作数在寄存器中,指令中直接给出该寄存器名称。具有较高的传送和运算速度。,3.2.1寄存器寻址,例3.1MOVA,R0;A(R0),2.寻址空间,R0R7,A,B,DPTR,例3.2MOVA,R0;设(R0)=30H,PSW=00H,求程序执行后A、R0内容。,00H,7FH,30H,30H,80H,FFH,A,E8H,FFFFH,MOVA,R0,0000H,ROM,SFR,RAM,结果:(A)=30H,PC,(R0)=30H,20,采用寄存器寻址的指令如下:MOVP1,A;将累加器A的内容送到P1口MOVP1,R4;将寄存器R4的内容送到P1口CLRA;将累加器A清0CPLA;将累加器A中的内容取反RLA;将累加器A的内容循环左移,1.操作数放在地址指示的存储单元中,操作码后的字节是操作数的直接地址。,3.2.2直接寻址,2.寻址空间,片内RAM低128字节,SFR(常采用符号形式),如:MOVA,50H,如:MOVA,SP,例3.3MOVA,60H;设(60H)=2EH,求程序执行后A、60H内容。,60H,7FH,2EH,2EH,80H,FFH,A,FFFFH,MOVA,60H,0000H,ROM,SFR,RAM,结果:(A)=2EH,00H,23,注意:1、若直接寻址的地址是SFR中的某一个时,可用其物理地址,也可用名称符号MOVA,SP;使用堆栈指针的名称符号MOVA,81H;使用堆栈指针的物理地址,24,注意:2、累加器有A、ACC和E0H三种表示形式,寻址方式不一样,但功能相同INCA;寄存器寻址INCACC;直接寻址INC0E0H;直接寻址,25,注意:3、字节地址和位地址的区别MOVA,20H;20H字节地址内容送给ASETB20H;20H位置1MOVC,20H;20H位地址内容送给C,1.操作数在以寄存器中内容为地址的单元中,指令中寄存器前面必须加上符号“”。,3.2.3寄存器间接寻址,2.寻址空间,片内RAM低128字节,片外RAM,3.间址寄存器,R0或R1,DPTR,MOV,MOVX,例3.4MOVA,R0;设(R0)=50H,(50H)=6EH,E6H,FFFFH,MOVA,R0,0000H,ROM,结果:(A)=6EH,50H,7FH,6EH,6EH,80H,FFH,A,SFR,RAM,50H,R0,A(R0),28,寄存器间址指令可以拓宽寻址范围。Ri用于片内片外256B的RAM寻址。DPTR可以覆盖片外64KB的ROM/RAM.寄存器间址指令不能用于寻址特殊功能寄存器SFR,SFR只能用寄存器寻址或者直接寻址.MOVR0,#81H;SP的物理地址MOVA,R0;SFR只能直接寻址、寄存器寻址!,注意:,1、操作数直接出现在指令中,紧跟在操作码的后面,作为指令的一部分与操作码一起存放在程序存储器中,可以立即得到并执行,不需要经过别的途径去寻找,故称为立即寻址。2、汇编指令中,在一个数的前面冠以#符号作前缀,就表示该数为立即寻址。,3.2.4立即寻址,3、寻址空间:ROM,例3.5MOVA,#07H;,7FH,07H,80H,FFH,A,FFFFH,MOVA,#07H,0000H,ROM,SFR,RAM,结果:(A)=07H,00H,31,采用立即数寻址的指令如下:MOVP1,#55H;将立即数55H送P1口MOV20H,#55H;将立即数55H送20H单元MOVA,#0F0H;将立即数0F0H送累加器AMOVR4,#0FH;将立即数0FH送寄存器R4中MOVR0,#20H;将立即数20H送寄存器R0口,以一个基地址加上一个偏移量地址形成操作数地址。,3.2.5变址寻址,3.寻址空间:ROM,基址寄存器:,DPTR,PC,偏移量寄存器:A,2.操作数地址:,33,将基址寄存器与偏移量寄存器的内容相加,结果作为操作数在ROM中的地址。DPTR或PC是基址寄存器,累加器A是偏移量寄存器。MOVCA,A+DPTR;A(A+DPTR)MOVCA,A+PC;A(A+PC)该类寻址方式主要用于查表操作。,3.2.5变址寻址,34,MOVCA,A+DPTR,图3.5变址寻址示意图,例3.6MOVCA,A+DPTR;,7FH,0FH,80H,FFH,A,FFFFH,MOVCA,A+DPTR,0000H,ROM,SFR,RAM,结果:(A)=88H,93H,88H,00H,24H,2400H+0FH=240FH,240FH,DPL,DPH,88H,00H,36,指程序计数器PC的当前内容与指令中的操作数相加,其结果作为跳转指令的转移地址(也称目的地址)。该类寻址方式主要用于跳转指令。SJMPrel;PCPC+2+rel将PC当前的内容与rel(-128127)相加,结果再送回PC中,成为下一条将要执行指令的地址。,3.2.6相对寻址,PC的当前值:读出该2字节或3字节的跳转指令后,PC指向的下条指令的地址。,37,SJMP54H,图3.6相对寻址示意图,1.对位地址中内容进行操作。操作的是8位二进制数中的某一位。,3.2.7位寻址,SFR的寻址位常用符号位地址表示,如:CLRACC.0MOV30H,C,2.寻址空间,片内RAM中位寻址区,SFR中的可寻址位,7种寻址方式及使用空间,40,3.3数据传送类指令数据传送指令是MCS-51单片机汇编语言程序设计中使用最频繁的指令。数据传送操作是指把数据从源地址传送到目的地址,源地址内容不变。,数据,数据,目的地址源地址,41,通用格式:MOV目的操作数,源操作数,源操作数可以是:累加器A、通用寄存器Rn、直接地址direct、间接地址和立即数;目的操作数可以是:累加器A、通用寄存器Rn、直接地址direct和间接地址,注:(1)data(立即数)不能用作目的操作数;2)源操作数与目的操作数不能相同(除direct外);3)寄存器寻址与寄存器及其间址间不能相互传送。,传送关系,目的操作数,源操作数,A,A,Rn,Rn,direct1,direct2,Ri,Ri,#data,数据传送类指令(28条),(1)内部RAM数据传送指令(15条),(2)外部数据传送指令(7条),(3)堆栈操作指令(2条),(4)数据交换指令(4条),44,(1)内部RAM数据传送指令(15条),内部RAM是数据传送最为频繁的部分,这其中有寄存器、累加器、RAM单元以及特殊功能寄存器之间的相互数据传送。,立即寻址型传送指令,MOVA,#data;AdataMOVRn,#data;RndataMOVdirect,#data;directdataMOVRi,#data;(Ri)data,(1)内部RAM数据传送指令(15条),内部RAM是数据传送最为频繁的部分,这其中有寄存器、累加器、RAM单元以及特殊功能寄存器之间的相互数据传送。,MOVA,direct;A(direct)MOVdirect,A;directAMOVRn,direct;Rn(direct)MOVRi,direct;(Ri)(direct)MOVdirect2,direct1;direct2(direct1),直接寻址型传送指令,46,已知:R1=32H、(30H)AAH、(31H)BBH、(32H)CCH,执行如下指令后A、50H、R6、32H和P1中的内容是什么。,FFFFH,0000H,ROM,30H,7FH,80H,FFH,A,SFR,RAM,00H,01H,31H,32H,50H,P1,32H,AAH,BBH,CCH,R0,R1,MOVA,30HMOV50H,AMOVR6,31HMOVR1,30HMOVP1,32H,A=AAH(50H)=AAHR6=BBH(32H)=AAHP1=AAH,AAH,AAH,47,MOVA,RiMOVRi,AMOVdirect,Ri,寄存器寻址型传送指令,MOVA,RnMOVRn,AMOVdirect,Rn,寄存器间址型传送指令,48,已知:(40H)11H、(41H)22H、R0=40H和R141H,执行如下指令后A、40H、41H和42H中的内容是什么。,MOVA,R0MOVR1,AMOV42H,R1,A11H、(40H)11H、(41H)11H和(42H)11H,49,dir,Ri,Rn,#data,A,MOVA,Rn#datadirRi,MOVdir,ARn,Ri#datadir,MOVRn,MOVRi,Adir#data,内部RAM、SFR之间的传送MOV指令,Adir#data,50,外部程序存储器ROM数据传送指令,MOVC,(2)外部数据传送指令(7条),MOVDPTR,#data16;DPTRdata16,外部数据存储器RAM数据传送指令,MOVX,51,外部程序存储器ROM数据传送指令,MOVCA,A+DPTR;A(A+DPTR)MOVCA,A+PC;PCPC+1,A(A+PC),专门用作查表,又称作查表指令。,52,使用Ri进行间接寻址,MOVXA,Ri;A(Ri)(i=0,1)MOVXRi,A;(Ri)(A)(i=0,1),寻址范围:256字节,注:外部RAM数据传送只能通过累加器A进行,使用DPTR进行间接寻址,MOVXA,DPTR;A(DPTR)MOVXDPTR,A;(DPTR)A,外部数据存储器RAM数据传送指令,寻址范围:64K字节,53,已知外部RAM的88H单元中有一数x,试编一个能把x传送到外部RAM的1818H单元的程序。,ORG2000HMOVR0,#88HMOVDPTR,#1818HMOVXA,R0MOVXDPTR,ASJMP$END,54,(3)堆栈操作指令(2条),55,设(30H)=X,(40H)=Y,利用堆栈作为媒体编出30H和40H单元中的内容互相交换的程序。,MOVSP,#70HPUSH30HPUSH40HPOP30HPOP40H,75H74H73H72H71H70H,栈底,X,Y,56,堆栈操作指令是直接寻址指令!PUSH和POP后面只能是直接地址!,PUSHACCPUSH00HPOPACCPOP00H,PUSHAPUSHR0POPAPOPR0,57,(4)数据交换指令(4条),在内部RAM和累加器A之间进行,整字节交换指令,XCHA,Rn;ARnXCHA,direct;A(direct)XCHA,Ri;A(Ri),半字节交换指令,字节单元与累加器进行低4位的半字节交换。,XCHDA,Ri;A30(Ri)30,58,外部RAM的20H单元有一数X,内部RAM的20H单元有一数Y,将它们进行交换。,MOVR1,#20HMOVXA,R1XCHA,R1MOVXR1,A,59,数据传送指令几个注意的地方:MOVXA,DPTR;(外部RAM内容送累加器)执行此指令,P3.7引脚上输出/RD有效信号(低电平),DPTR包含16位地址信息由P0(低8位)、P2口(高8位)提供,数据由P0口输入到累加器。,60,数据传送指令几个注意的地方:MOVXDPTR,A;(累加器内容送外部RAM)执行此指令,P3.6引脚上输出/WR有效信号(低电平),DPTR包含16位地址信息由P0(低8位)、P2口(高8位)提供,数据由P0口写入外部RAM。,数据传送类指令(28条),(1)内部RAM数据传送指令(15条),(2)外部数据传送指令(7条),(3)堆栈操作指令(2条),(4)数据交换指令(4条),表3.2数据传送类指令一览表,表3.2数据传送类指令一览表(续),课堂师生互动,试按下列要求传送数据1.将R5中的数据传送到50H。2.将R7中的数据传送到R6。3.将立即数40H传送到以R0中内容为地址的存储单元中。4.将片外RAM50H中的数据传送到片内RAM40H单元中。5.将R1中的数据传送到以R0中内容为地址的存储单元中。,MOV50H,R5,MOVA,R7MOVR6,A,MOVR0,#40H,MOVR0,#50HMOVXA,R0MOV40H,A,MOVA,R1MOVR0,A,3.4.1算术运算类指令(24条),3.4算术与逻辑运算指令,3.4.2逻辑运算与循环类指令(25条),3.4.1算术运算类指令(24条),3.4.1算术运算类指令(24条),大多数指令用累加器A作为一个源操作数另一个源操作数可放在Rn、片内RAM、或是立即数操作结果一般保留在ACC中大多影响程序状态字PSW,例MOVA,#data,ADDA,Rn,1.加法指令,(1)不带进位的加法指令ADD,影响:CY、AC、OV和P,ADDA,#data;AA+#dataADDA,direct;AA+(direct)ADDA,Ri;AA+(Ri)ADDA,Rn;AA+Rn,例若(A)=84H,(30H)=8DH,执行指令ADDA,30H:,结果:(A)=11H,(CY)=1,(AC)=1,(OV)=1(D7有进位,D6无进位),(P)=0。,CY,AC,(2)带进位加法指令ADDC,源操作数与A的内容相加再与CY相加,结果送入目的操作数A中。,CY是在该指令执行之前已存在的值。,ADDCA,#data;AA+#data+CADDCA,direct;AA+(direct)+CADDCA,Ri;AA+(Ri)+CADDCA,Rn;AA+Rn+C,(3)加1指令INC,源操作数的内容加1,结果再送回原单元。这些指令中仅INCA影响P标志。,INCA;AA+1INCdirect;direct(direct)+1INCRi;(Ri)(Ri)+1INCRn;RnRn+1INCDPTR;DPTRDPTR+1,例如:设R0=7EH,片内数据RAM中(7EH)=0FFH,(7FH)=40H,则执行下列指令:INCR0INCR0INCR0执行结果:(7EH)、R0、(7FH)?,(7EH)=00H,R0=7FH,(7FH)=41H,(4)十进制调整指令,对A中2个BCD码加法的结果调整,DAA,1)当A中低4位数出现了非BCD码或低4位产生进位(AC=1),则在低4位加6。,2)当A中高4位数出现了非BCD码或高4位产生进位(CY=1),则在高4位加6。,调整后,CY表示结果的百位值。,79,例:完成56+17的BCD加法程序。MOVA,#56H;A存放BCD码56HMOVB,#17H;B存放BCD码17HADDA,B;A=6dHDAA;A=73HSJMP$,56H17H6dH673H,+,+,2.减法指令,(1)带借位减法指令SUBB,影响:CY、AC、OV和P,注:如要用此组指令完成不带借位减法,只需先清CY为0。,SUBBA,#data;AA-#data-CSUBBA,direct;AA(direct)-CSUBBA,Ri;AA-(Ri)-CSUBBA,Rn;AA-Rn-C,例3.15若(A)=C9H,(R2)=54H,(CY)=1,执行指令SUBBA,R2:,即:(A)=74H,(CY)=0,(AC)=0,(OV)=1(位6有借位,位7无借位),(P)=0。,(2)减1指令,操作数内容减1,结果再送回原单元。仅DECA影响P标志。其余指令都不影响标志位的状态。,DEC,Rn,direct,Ri,A,3.乘法指令,MULAB,例3.16若(A)=50H,(B)=A0H,执行指令MULAB之后,(A)=00H,(B)=32H,(OV)=1,(CY)=0。,当乘积大于FFH时,溢出标志位(OV)=1。标志CY总是被清0。,A,B,A,B,乘数,被乘数,积,4.除法指令,例3.17若(A)=FBH(251),(B)=12H(18),执行指令DIVAB之后,(A)=0DH,(B)=11H,(OV)=0,(CY)=0。,DIVAB,除数为0,商的A和B内容不确定,且(OV)=1。标志CY总是被清0。,A,B,A,B,除数,被除数,整数部分,商,余数部分,表3.3算术运算类指令一览表,表3.3算术运算类指令一览表(续),3.4.2逻辑运算与循环类指令(25条),1.逻辑运算:与、或、异或、清0和取反,5.A清0操作对P标志有影响。,2.对A循环移位,3.方向:左、右,4.CY:带、不带,3.4算术与逻辑运算指令,1.逻辑与、或、异或指令,A与立即数、内部数据、存储器间的逻辑操作ANL(ORL,XRL)A,#dataANL(ORL,XRL)A,directANL(ORL,XRL)A,RiANL(ORL,XRL)A,RnANL(ORL,XRL)direct,AANL(ORL,XRL)direct,#data,思考:逻辑与、或、异或指令分别有什么作用?,逻辑“或”指令常用来使字节中某些位置“1”,其它位保持不变。则欲置位的位用1与该位相或,保留不变的位用0与该位相或。,逻辑“与”指令常用来使字节中某些位清“0”,其它位保持不变。则欲清0的位用“0”与该位相与,保留不变的位用“1”与该位相与。,逻辑异或指令常用来使字节中某些位进行取反操作,其它位保持不变。欲某位取反该位与1相异或;欲某位保留则该位与0相异或。还可利用异或指令对某单元自身异或,以实现清零操作。,例(P1)=C5H=11000101B,屏蔽P1口高4位而保留低4位。执行指令:ANLP1,#0FH结果为:(P1)=05H=00000101B。,设(A)AAH,(P1)=BBH,通过编程把累加器A中的低4位送入P1口低4位,P1口高4位保持不变。,ORG0100HANLA,#0FH;取出A中低4位ANLP1,#0F0H;取出P1中高4位ORLP1,A;字节装配SJMP$;待机END,2.累加器清0和取反,(2)把A的内容取反,结果仍在A中。,CPLA,CLRA,例3.21若(A)=A5H,执行指令CLRA之后,(A)=00H。,(1)把A的内容清0,结果仍在A中。,ORG0200HMOVA,30HCPLA;取反INCA;加1MOV31H,ASJMP$END,例:已知正数X,求X的补码,设X放在30H单元,结果放在31H单元。,表3.3算术运算类指令一览表,表3.3算术运算类指令一览表(续),表3.3逻辑操作指令表,3.累加器循环移位指令,RLA;左移RRA;右移RLCA;带进位左移RRCA;带进位右移SWAPA;4位环移,99,移位指令操作示意图,RLA,RLCA,RRA,RRCA,100,CY,CY,RRA,RLA,RLCA,RRCA,10010110,00101101,A,A,设,01001011,A,1,CY,11001011,A,0,00101101,A,1,CY,CY,编程实现累加器A内容乘2。,例3.22若(A)=BDH=10111101B,(CY)0。执行指令RLCA,结果为:17AH(378)2BDH(189)。,A,PSW,0,1,0,1,1,1,1,0,1,CY,RLCA,思考:如何实现“累加器A内容乘3”?,例:已知M1和M11两个单元中存有一个16位二进制数(M1中为低8位,M11中为高8位),通过编程将其扩大到二倍。,ORG0200HCLRCMOVR1,#M1MOVA,R1;取低8位数RLCA;低8位2MOVR1,AINCR1MOVA,R1;取高8位数RLCA;高8位2MOVR1,ASJMP$END,CY,CY,104,SWAPA;4位环移交换A中高四位和第四位,不影响标志.例如:MOVA,#A3HSWAPA结果:(A)=3AH,105,3.5.1控制转移类指令(17条),3.5控制转移类指令与位操作类指令,3.5.2位操作类指令(17条),3.5.1控制转移类指令(17条),控制转移类指令的本质是改变程序计数器PC的内容,从而改变程序的执行方向。,(1)程序执行是顺序的,改变程序执行顺序,称作程序转移。,(2)控制程序转移采用转移指令,1)无条件转移指令2)条件转移指令3)子程序调用与返回指令4)空操作指令,1.无条件转移指令(4条),(1)LJMP(长转指令),指令第二、三字节地址码分别装入PC的高8位和低8位中。,可转到64KBROM空间的任何单元。,LJMPaddr16,LJMPaddr16,LJMP指令执行后,程序无条件地转向16位目标地址(addr16)处执行,不影响标志位。可转移到64KB程序存储器地址空间的任意地址,故得名为“长转移/长跳转”。该指令的缺点是字节多。,(2)AJMP(绝对转移指令),AJMPaddr11,注意:该指令结果不影响程序状态字寄存器PSW。该指令转移范围是2KB。,AJMPaddr11,由于11位地址的范围是000,0000,0000B111,1111,1111B,(000H7FFH)即2KB范围,而目的地址的高5位是PC当前值,所以程序可转移的位置只能是和PC当前值在同一2KB范围内。,例如:若AJMP指令地址(PC)=2300H。执行指令AJMP0FFH后程序转向何方?,0010001100000000,00011111111,0010000011111111,0010,0010001100000010,0010001100000010,指令所在地址2300H,+2,当前PC值2302H,当前PC值的高5位,11位直接地址,转移目的地址(PC)20FFH,结果为:转移目的地址(PC)=20FFH,程序向前转到20FFH单元开始执行。,0010111111111111,00011111111,001100001111111130FFH,0010,0011000000000001,0011000000000001,指令所在地址,+2,当前PC值,当前PC值的高5位,11位直接地址,转移目的地址(PC),若AJMP指令地址(PC)=2FFFH。执行指令AJMP0FFH后程序转向何方?,结果为:转移目的地址(PC)=30FFH,程序向后转到30FFH单元开始执行。,若AJMP指令地址(PC)=2FFFH。执行指令AJMP0FFH后,结果为:转移目的地址(PC)=30FFH,程序向后转到30FFH单元开始执行。,由上可见:若addr11相同,则AJMP指令的机器码相同,但转移的目的地址却可能不同,这是因为转移的目的地址是由PC当前值的高5位与addr11共同决定的。,若AJMP指令地址(PC)=2300H。执行指令AJMP0FFH后,结果为:转移目的地址(PC)=20FFH,程序向前转到20FFH单元开始执行。,结论:,(3)SJMP(短转指令),SJMPrel,注意:该指令结果不影响程序状态字寄存器PSW。该指令的转移范围是以本指令的下一条指令为中心的-128+127字节以内。,1、在实际应用中,LJMP、AJMP和SJMP后面的addr16、addr11或rel都是用标号来代替的,不一定写出它们的具体地址。,注意,2、LJMP、AJMP和SJMP跳转范围分别为64K、2K、256B。,注意,(4)JMP(变址寻址转移指令),注意:该指令结果不影响程序状态字寄存器PSW。该指令通常用于散转(多分支)程序。,例根据累加器A的值,转不同处理程序的入口。MOVDPTR,#TABLE;表首地址送DPTRJMPA+DPTR;根据A值转移TABLE:AJMPTAB1;当(A)=0时转TAB1执行AJMPTAB2;当(A)=2时转TAB2执行AJMPTAB3;当(A)=4时转TAB3执行,程序的不足:A的值不连续。为什么?,P113例3.30CM:MOVR1,ARLA;A2AADDA,R1;A2A3AAMOVDPTR,#PMTB;表首地址送DPTRJMPA+DPTR;根据A值转移PMTB:LJMPPM0;当(A)=0时转PM0执行LJMPPM1;当(A)=1时转PM1执行LJMPPM2;当(A)=2时转PM2执行LJMPPM3;当(A)=3时转PM3执行,A可取连续值的例子,2.条件转移指令(8条),条件转移指令是当某种条件满足时,程序转移执行;条件不满足时,程序仍按原来顺序执行。由于该类指令采用相对寻址,因此程序可在以当前PC值为中心的-128+127范围内转移。该类指令共有8条,可以分为累加器判零条件转移指令、比较条件转移指令和减1条件转移指令三类。,2.条件转移指令(8条),(1)累加器A判0转移,判零条件转移指令以累加器A的内容是否为0作为转移的条件。JZrelACC为0转移,不为0则顺序执行;JNZrelACC不为0转移,为0则顺序执行。累加器A的内容是否为0,是由这条指令以前的其它指令执行的结果决定的,执行这条指令不作任何运算,也不影响标志位。,将片外RAM首地址为DATA1的一个数据块转送到片内RAM首地址为DATA2的存储区中。如数据为0则停止传数。(P114)外部RAM向内部RAM的数据转送一定要经过累加器A,利用判零条件转移正好可以判别是否要继续传送或者终止。完成数据传送的参考程序如下:MOVDPTR,#DATA1;DPTR作为外部数据块地址指针MOVR1,#DATA2;R1作为内部数据块的地址指针LOOP:MOVXA,DPTR;取外部RAM数据送入AHERE:JZHERE;数据为零则终止传送MOVR1,A;数据传送至内部RAM单元INCDPTR;修改指针,指向下一数据地址INCR1SJMPLOOP;循环取数,(2)比较不相等转移指令,指令结果影响程序状态字寄存器PSW的CY标志。,比较转移指令共有4条。这组指令是先对两个规定的操作数进行比较,根据比较的结果来决定是否转移。若两个操作数相等,则不转移,程序顺序执行;若两个操作数不等,则转移。,例当从P1口输入数据为01H时,程序继续执行,否则等待,直到P1口出现01H。参考程序如下:,MOVA,#01H;立即数01H送AWAIT:CJNEA,P1,WAIT;(P1)01H,则等待。;(P1)=01H,则继续,比较是进行一次减法运算,但其差值不保存,两个数的原值不受影响,而标志位CY要受到影响。当data1data执行程序prog1当(A)=data执行程序prog2当(A)data执行程序prog1p2:LJMPprog3;C=1,即(A)data执行程序prog3,(3)减1不为0转移指令,每执行一次,循环控制单元减1,并判其是否为0。1)不为0,则转移到目标地址继续循环;2)为0,则结束循环,程序往下执行。3)常用于循环程序中控制循环次数。,例将内部RAM从DATA单元开始的10个无符号数相加,相加结果送SUM单元保存。(P116)假设加的结果不超过8位二进制数,则相应的程序如下:MOVR0,#0AH;设置循环次数MOVR1,#DATA;R1作地址指针,指向数据块首地址CLRA;A清零LP:ADDA,R1;加一个数INCR1;修改指针,指向下一个数DJNZR0,LP;R0减1,不为0循环MOVSUM,A;存10个数相加的和,例有一段程序如下:MOV23H,#0AHCLRALOOP:ADDA,23HDJNZ23H,LOOPSJMP$结果:(A)=10+9+8+7+6+5+4+3+2+1=37H,3.子程序调用与返回指令,3.子程序调用与返回指令,问题:程序如何调用子程序?调用完后如何返回主程序中执行调用指令的下一条指令?,3.调用与返回指令(4条),子程序调用指令有长调用和绝对调用。,LCALL和ACALL指令类似于转移指令LJMP和AJMP,不同之处在于它们在转移前要把执行完该指令的PC内容自动压入堆栈后,才将子程序入口地址addr16(或addr11)送PC,实现转移。,返回指令共两条:一条是对应两条调用指令的子程序返回指令RET,另一条是对应从中断服务程序的返回指令RETI。,139,ORG1000HMOVSP,#70H;设置堆栈栈顶MOVR0,#20H;20H2AH区域清零MOVR2,#0BHACALLZEROMOVR0,#30H;30H3EH区域清零MOVR2,#0FHACALLZEROMOVR0,#40H;40H4FH区域清零MOVR2,#10HACALLZEROSJMP$ZERO:MOVR0,#00H;R0存清零区域首地址INCR0DJNZR2,ZERO;R2存清零区单元数RETEND,试利用子程序技术编出令20H2AH、30H3EH和40H4FH三个子域清零的程序。(P118),4.空操作指令,NOP,不产生任何控制操作,但是:(1)PC的内容加1;(2)消耗1个机器周期;(3)空间上占用一个字节。,因此,常用来实现较短时间的延时。,表3.5控制转移类指令一览表,3.5.2位操作类指令(17条),(1)特点:以位为单位进行的各种操作。,(2)位地址形式:1)直接地址(如,0D5H、0E0H等)2)位编号(如,P1.5、PSW.5等)3)位名称(如,F0、C等)4)伪指令定义(如,MYFLAGBITF0)。,位操作指令中,位累加器要用字符“C”表示。(注:在位操作指令中CY与具体的直接位地址D7H对应)。,MOVbit,CMOVC,bit指定位地址中内容与CY的内容的相互传送。,1.位传送指令,例若(CY)=1,(P3)=11000101B,(P1)=00110101B。执行以下指令:MOVP1.3,CMOVC,P3.3MOVP1.2,C结果:(CY)=0,P3的内容未变,P1的内容变为00111001B。,(1)位清0指令,2.位状态设置,1)位累加器CY清0,例若(P1)=10011101B。执行指令CLRP1.3后,结果为:(P1)=10010101B。,CLRC,CLRbit,2)位地址内容清0,(2)位置位指令,例若(P1)=10011100B。执行指令SETBP1.0后,(P1)10011101B。,1)位累加器CY置1,SETBC,SETBbit,2)位地址内容置1,(1)位逻辑“与”指令,3.位逻辑运算指令,例若(P1)=10011100B,(CY)1。执行指令ANLC,P1.0后,结果为:P1内容不变,而(CY)0。,2)位地址单元内容取反后的值与位累加器内容“与”,1)位地址单元内容与位累加器内容“与”,ANLC,bit,ANLC,/bit,(2)位逻辑“或”指令,2)位地址单元内容取反后的值与位累加器内容“或”,1)位地址单元内容与位累加器内容“或”,ORLC,bit,ORLC,/bit,(3)位取反指令,CPLC,CPLbit,(1)判CY转移指令,4.位判跳(条件转移),当(CY)=1,转向PC当前值与rel之和的目标地址执行,否则程序顺序执行。,JCrel,JNCrel,当(CY)=0,转向PC当前值与rel之和的目标地址去执行,否则程序顺序执行。,(2)判bit转移指令,JBbit,rel,JBCbit,rel,JNBbit,rel,当(bit)=1,转向PC当前值与rel之和的目标地址执行,否则程序顺序执行。,当(bit)=0,转向PC当前值与rel之和的目标地址执行,否则程序顺序执行。,与上面指令相同,但还有将该位清0功能。,位操作类指令表,利用位操作指令,模拟图示硬件逻辑电路的功能。,参考程序如下:PR2:MOVC,P1.1;(CY)(P1.1)ORLC,P1.2;(CY)(P1.1)(P1.2)CPLC;(CY)/(CY)=MANLC,P1.0;(CY)(P1.0)MCPLC;(CY)(P1.0)M=NMOVF0,C;F0内暂存NMOVC,P1.4;(CY)(P1.4)CPLC;(CY)/(P1.4)ANLC,P1.3;(CY)(P1.3)(/P1.4)=OCPLC;(CY)/OORLC,F0;(CY)NOMOVP1.5,C;运算结果送入P1.5RET,课堂师生互动,判断下列指令是否正确,若错误请改正并说明错误原因。1.MOV#20H,A2.CJNER0,#20H3.MOVDPTR,A4.DIVA,R05.RRCB,错误,立即数不能作目的操作数。可改为:MOVA,#20H。,错误,比较转换指令形式如下:CJNE(目的操作数),(源操作数),rel可见CJNER0,#20H指令中缺少偏移量rel。可改为:CJNER0,#20H,rel(-128rel127)。,错误,DPTR用作设置外部RAM的间址寄存器,该指令原意是通过A写外部RAM操作。写外部RAM应用“MOVX”助记符,故正确的指令是MOVXDPTR,A。,错误,除法操作只能在A、B两个寄存器组合中进行,而不能在A、R0组合寄存器中进行。正确的应是:DIVAB;A(商)B(余数)(A)(B)。,错误,“RRC”是带进位循环右移一位指令的助记符,循环移位必须在A中进行。正确的指令应为:RRCA;A带进位循环右移一位。,159,常用伪指令单片机汇编语言程序设计中,除了使用指令系统规定的指令外,还要用到一些伪指令。伪指令又称指示性指令,具有和指令类似的形式,但汇编时伪指令并不产生可执行的目标代码,只是对汇编过程进行某种控制或提供某些汇编信息。下面对常用的伪指令作一简单介绍。,160,一、汇编起始指令ORG(Origin)指令格式为:ORGnn该指令的作用是指明后面的程序或数据块的起始地址。它总是出现在每段源程序或数据块的开始。式中,nn为16位地址,汇编时nn确定了此语句后面第一条指令或第一个数据的地址,此后的源程序或数据块就依次连续存放在以后的地址内,直到遇到另一个ORG指令或者END指令为止。,常用伪指令,161,例:ORG2000HMOVSP,60HMOVR0,2FHMOVR2,0FFHORG伪指令说明其后面程序的目标代码在存储器中存放的起始地址是2000H,即存储器地址程序代码2000H7581602003H782F2005H7AFF,162,二、汇编结束指令END指令格式:标号:END地址或标号格式中标号以及END后面的地址或标号可有可无。功能:提供汇编结束标志。汇编程序遇到END后就停止汇编,对END以后的语句不予处理,故END应放在程序的结束处。,常用伪指令,163,三、等值指令EQU(Equal)指令格式:字符名称EQU数字或汇编符号功能:使指令中的字符名称等价于给定的数字或汇编符号。特别注意:由EQU等值的字符名称必须先赋值后使用,且在同一个源程序中,同一个标号只能赋值一次,可以多次使用。例:PAEQU8001H即给字符PA赋值为8001H。,常用伪指令,164,四.数据赋值伪指令DATA格式:符号名DATA表达式功能:将表达式定义为一个指定的符号名。只能定义单字节数据,但可以先使用后定义。例如:MOVA,#LENLENDATA10尽管LEN的引用在定义之前,但汇编语言系统仍可以知道A的值是0AH。,常用伪指令,165,五、定义字节指令DB(DefineByte)指令格式:标号:DB8位二进制数表功能:把8位二进制数表依次存入从标号开始的连续的存储单元中。标号区段可有可无,DB指令之后的8位二进制数表是一个字节常数或用逗号隔开的字节串,也可以是用引号括起来的ASCII码字符串(一个ASCII字符相当于一个字节)。,常用伪指令,166,例如:ORG1000HTAB:DB2BH,0A0H,A,2*4表示从1000H单元开始的地方存放数据2BH,0A0H,41H(字母A的ASCII码),08H,167,六、定义字指令DW(DefineWord)指令格式:标号:DW16位数据表功能:与DB相似,区别仅在于从指定地址开始存放的是指令中的16位数据。每个16位数据要占两个存储单元,高8位先存,低8位后存,这和MCS-51指令中的16位数据存放顺序是一致的。,常用伪指令,168,例如:ORG1000HDATA:DW324AH,3CH表示从1000H单元开始的地方存放数据32H,4AH,00H,3CH(3CH以字的形式表示为003CH),169,七.定义空间伪指令DS(DefineStorage)格式:标号:DS表达式功能:从指定的地址开始,保留多少个存储单元作为备用的空间。例如:ORG1000HBUF:DS50TAB:DB22H表示从1000H开始的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年江西机电职业技术学院单招职业技能测试题库必考题
- 2025陕西有色天宏瑞科硅材料有限责任公司招聘19人笔试历年参考题库附带答案详解
- 2025重庆石柱某旅游公司劳务派遣人员招聘28人笔试历年参考题库附带答案详解
- 2025贵州毕节织金县城市建设投资(集团)有限公司第一批次“人才强市”引才笔试历年参考题库附带答案详解
- 2026年吉林司法警官职业学院单招职业技能考试必刷测试卷必考题
- 2025湖南东江湖子郴渔业有限公司招聘工作人员笔试历年难易错考点试卷带答案解析试卷2套
- 2025江苏黄海金融控股集团有限公司员工招聘15人笔试历年备考题库附带答案详解试卷2套
- 2025广西华盛集团北海裕泰工艺有限责任公司招聘4人(截止至11月15日)笔试历年典型考点题库附带答案详解试卷2套
- 2025安徽蚌埠固镇县工业投资(集团)有限公司招聘专业安全监管人员最终笔试历年典型考点题库附带答案详解试卷2套
- 2025四川雅安宝兴大熊猫文化旅游发展(集团)有限责任公司招聘工作人员拟聘用人员笔试历年常考点试题专练附带答案详解试卷2套
- 2025年小学五年级语文上学期期中综合测试试卷(含答案)
- 2025年脉石英行业分析报告及未来发展趋势预测
- 2025年汽车救援行业分析报告及未来发展趋势预测
- 2025年建筑师资格考试《建筑装饰设计》备考题库及答案解析
- 无人机教学平台建设方案
- 2025年政治理论时政热点知识试题库(+答案)
- GB/T 46391-2025城市和社区可持续发展宜居城市总体要求
- 贵州金融控股集团有限责任公司招聘笔试题库及答案2025
- 简单版公司向个人借款合同范本5篇
- 《JavaScript程序设计案例教程》全套教学课件
- 2025年铆工中级职业技能理论知识考试练习题库含答案
评论
0/150
提交评论