第7章.MCS-51指令系统_第1页
第7章.MCS-51指令系统_第2页
第7章.MCS-51指令系统_第3页
第7章.MCS-51指令系统_第4页
第7章.MCS-51指令系统_第5页
已阅读5页,还剩96页未读 继续免费阅读

下载本文档

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

文档简介

概述寻址方式分类指令介绍,第7章MCS-51指令系统,7.1.1指令分类MCS-51的指令系统使用42种助记符,表达33种功能,共由111条指令构成。按指令编码的字节数分类:1字节(49条)、2字节(45条)、3字节(17条)。按指令的机器周期数分类:1个机器周期(64条);2个机器周期(45条);4个机器周期(2条,乘、除各1条)实际应用中最频繁的指令,为单周期指令,故fosc=12MHz,T=1s。速度指标为1MIPS,7.1指令系统概述,指令的类别及其要素,数据传送类30条算术运算类24条逻辑运算类35条转移操作类22条布尔指令类位操作子集,指令的功能指令的寻址方式指令对PSW的影响指令的编码字节数指令的机器周期,在程序中行中,指令语句按如下形式书写:标号:助记符操作数1,操作数2,操作数3;注释标号于程序行中,代表指令所在的地址符号地址;在指令功能解释阶段不使用标号;两个操作数的情况比较多,常写成如下:操作码目的操作数,源操作数或op_codedst,src,7.1.2书写格式与缩略语,Rn-当前组的通用寄存器,n=07Ri-0或1,R0或R1作间接寻址寄存器。direct-8位内部单元的地址,即直接寻址。#data,#data16-分别为8位和16位立即数。addr16-16位目的地址。addr11-11位目的地址。rel-8位带符号的补码偏移量。bit-内部RAM可位寻址的位地址。/表示取反操作。(X)-X单元中的内容。(X)-以X单元内容为地址的单元的内容。-间接寄存器或基址寄存器的前缀。,寻址方式常用符号说明,寻找操作数(数据,指令的处理对象)的方式寄存器寻址直接寻址立即寻址寄存器间接寻址变址寻址寻找目标地址(程序流程控制)的方式相对寻址绝对寻址隐含寻址位寻址,7.1.3寻址方式(AddressingMode),寄存器操作数,寻址范围:(1)4组R0R7共32个工作寄存器(2)部分特殊功能寄存器,例如A、B以及数据指针寄存器DPTR等。例:MOVA,Rn;(Rn)A,n=07MOVB,A,寄存器寻址(RegistorAddressing),存储器操作数,其地址直接编码到指令中寻址范围:(1)内部RAM的低128个单元(00-7FH)例MOVA,40H(2)特殊功能寄存器。例MOVA,80H;地址码形式MOVA,P0;SFR符号形式两者的机器码完全一致,后者便于记忆。,直接寻址(DirectAddressing),超过7FH就到SFR范围,88H,88H,MOVA,3AH,寄存器AINCA;寄存器寻址特殊功能寄存器Acc(E0H)INCACC;直接寻址,名称符号或INC0E0H;直接寻址,地址码指令都使累加器中内容加1。但是寻址方式不同,指令编码字节数也不同。,累加器的两种寻址方式,常数操作数,编码在指令中(取指完成,操作数立即得到,因此得名),立即数有前缀标志“#”。例MOVA,#40H在表示法中,记为#data8位立即数;#datal616位立即数。区别:MOVA,#3AH;立即寻址MOVA,3AH;直接寻址,立即寻址(Immediateaddressing),存储器操作数,地址在寄存器中寄存器名加前缀“”标志例MOVA,R0,65H,3AH,65H,3AH,R0,寄存器间接寻址(RegistorIndirectAddressing),间接寻址空间及范围,例:MOVA,R0例:MOVXDPTR,A需先向间址寄存器写入地址码,基址寄存器:DPTR或PC(含16位地址)变址寄存器:A(含8位地址)两寄存器内容相加,作为16位存储器地址,在代码空间访问操作数(常数)或目标地址(转移)仅有3条这样的指令:MOVCA,A+DPTRMOVCA,A+PCJMPA+DPTR前两条为查表指令,后一条实现散转。,基址变址寻址(BasedIndexedAddressing),相对寻址,相对寻址不用于操作数的寻址,只用于控制转移指令,是程序目标地址的形成方法之一。目标地址=当前指令地址+指令字节数+rel例:JZ30H;若A=0,(PC)(PC)+02H+30H;若A0,则程序顺序执行,指令中给出可寻址位的位地址,据此进行位操作。位寻址范围包括:(1)内部RAM中的可位寻址区字节地址20-2FH,128个位,位地址00-7FH(2)SFR的可寻址位字节地址能被8整除,位地址80-FFH例:MOVC,20H不是直接寻址注意例:SETBF0,位寻址(BitAddressing),直接位地址表示法:如D5H,表示PSW的D5位;点操作符法:PSW.520H.1ACC.7;位名称法:PCF0P1.0P3.5T0;伪指令自定义的字符名称。如USRFbitF0以后的程序中就用USRF代替F0;问题:在程序行中,大致相同的助记符,其中的地址理解为字节地址还是位地址?是否位操作?这主要看指令功能、上下文。,位地址表示法,内部数据传送指令(15条)外部数据传送指令(7条)堆栈操作指令(2条)数据交换指令(4条)使用最频繁的一类指令,通用格式:MOVdst,src执行后,源操作数保持不变基本不影响标志位,例外的是奇偶标志位P以PSW为dst,7.2数据传送类指令,MOVA,#data;(A)#dataMOVdirect,#data;(direct)#dataMOVRi,#data;(Ri)#dataMOVRn,#data;(Rn)#dataMOVDPTR,#datal6;(DPTR)#data16,1.立即数为源操作数的传送指令,MOVA,direct;(A)(direct)MOVdirect,A;(direct)(A)MOVA,Ri;(A)(Ri),i取0或1MOVRi,A;(Ri)(A),i取0或1MOVA,Rn;(A)(Rn),n取07MOVRn,A;(Rn)(A),n取07,2累加器A(Rn、RAM、SFR)之间的数据传送,MOVdirect,direct;(direct)(direct)MOVdirect,Ri;(direct)(Ri),i取0或1MOVRi,direct;(Ri)(direct),i取0或1MOVdirect,Rn;(direct)(Rn)MOVRn,direct;(Rn)(direct),n取07,3.RAM,Rn,SFR之间的数据传送,字节交换指令XCHA,direct;(A)(direct)XCHA,Ri;(A)(Rt),i取0或1XCHA,Rn;(A)(Rn),n取07半字节交换指令XCHDA,Ri;(A3A0)(Ri)30)特点:围绕A设计的指令,操作数寻址方式有限制,4.字节、半字节交换指令,设(R0)=20H,(A)4EH,(20H)=85H执行指令:XCHA,R0,结果:(A)85H,(20H)4EH,实现A与20H单元内容互换。设(R0)30H,(A)=46H,(30H)=85H执行指令:XCHDA,R0结果:(30H)=86H,(A)=45H,实现了低4位内容互换,而高4位内容不变。,例7-1,7-2,MOV指令数据传送,5栈操作指令,进栈指令PUSHdirect;(SP)(SP)+1,(SP)(direct)功能:堆栈指针SP加1,然后将直接地址direct单元的内容送到SP所指向的栈顶。出栈指令POPdirect;(direct)(SP),(SP)(SP)1功能:将SP所指向的堆顶的内容送到直接地址direct指向的单元中,然后堆栈指针SP减1。,例73,在中断响应时,(SP)26H,(DPTR)=0213H。执行下列指令PUSHDPLPUSHDPH后RAM地址27H,28H和栈指针SP的内容。DPL和DPH分别是DPTR的低8位和高8位,并可以单独使用。另外,本指令系统的堆栈只支持8位操作,因此16位的DPTR需要保存到堆栈就只能分两次实现。执行PUSHDPL后:(SP)+1(SP)27H,(DPL)=13H(27H)执行PUSHDPH后:(SP)+1(SP)28H,(DPH)02H(28H);执行结果:内部RAM(27H)13H,(28H)02H,(SP)28H,正误,PUSH指令的操作数只能是直接寻址,以下指令是合法的:PUSHACCPOPBPUSH01H但下列两条指令是错误的:PUSHAPUSHR1ACC、B、01H都是直接地址,而A和R1都是寄存器。,例74,设(SP)62H,内部RAM的60H62H中的内容分别为20H,23H,01H,执行下列指令分别有怎样的结果?POPDPH(SP)=(62H)01H(DPH)(SP)-1=62-1=61H(SP)POPDPL(SP)(61H)23HDPL(SP)161H160HSPPOPSP(SP)-15FHSP(SP)(60H)20HSP结果:(DPTR)0123H,(SP)20H这里第3条指令特殊,其操作为:栈指针(SP)先减1为5FH,后装入由栈顶弹出的值,最后(SP)20H。,1外部RAM的与累加器A之间的数据传送MOVXA,DPTRMOVXDPTR,AMOVXA,RiMOVXRi,A前面两条指令可以访问外部RAM的整个64K空间,地址范围是0000HFFFFH;后两条指令可以访问外部RAM任一页中00HFFH的256个字节,页地址由P2口的锁存器决定。,外部数据传送指令,2外部ROM向累加器A传送指令这类指令共有两条变址寻址,单向传输,因专用于查表,又称为查表指令,指令的格式为:MOVCA,A+PCMOVCA,A十DPTR,把20H2FH单元中的内容转移到40H4FH单元中MOVR0,#20H;设定源数据块指针MOVR1,#40H;设目的数据块指针MOVR2,#16;数据块长度,10进制LOOP:MOVA,R0;取数MOVR1,A;存数INCR0;指针调整INCR1;指针调整DJNZR2,LOOP;循环控制LOOP是标号,标记循环的开始地址;DJNZ是循环控制指令,后面才讲到。思考:如果题目要求变一下,把20H2FH单元中的内容转移到28H37H单元中,应该怎样修改程序?,例,补例,MCS5l有比较丰富的算术运算指令:可以分为加法、减法、十进制调整和乘除法四类。除加1和减1指令外,其余指令均能影响PSW标志特征。,7.3算术运算类指令,参加运算的两个数必须是8位二进制数,结果也是一个8位二进制数,且对PSW中标志位产生影响。既可以把参加运算的两个操作数理解为无符号数(0255),也可以把理解为带符号数的补码形式(128127)。CPU同时按无符号数运算法则影响PSW中的CY标志位;按带符号数法则影响PSW中的OV标志位。,加减法指令的特点:,不带进位ADDA,#data;(A)(A)+#dataADDA,direct;(A)(A)+(direct)ADDA,Ri;(A)(A)+(Ri)ADDA,Rn;(A)(A)+(Rn)带进位加法指令ADDCA,#data;(A)(A)+#data+(C)ADDCA,direct;(A)(A)+(dirct)+(C)ADDCA,Ri;(A)(A)+(Ri)+(C)ADDCA,Rn;(A)(A)+(Rn)+(C),加法指令,带借位减法指令,SUBBA,#data;(A)(A)data(C)SUBBA,data;(A)(A)(data)(C)SUBBA,Ri;(A)(A)(Ri)(C)SUBBA,Rn;(A)(A)(Rn)(C)MCS-51的减法指令只有带借位的一种选择,如果不需要带借位的减法运算,减法指令前增加一条CLRC指令,这条指令的功能是清除进位标志。,加1减1指令,加1指令INCA;(A)(A)+1INCDirect;(direct)(direct)+1INCRi;(Ri)(Ri)+1INCRn;(Rn)(Rn)+1INCDPTR;(DPTR)(DPTR)+1减1指令DECA;(A)(A)1DECDirect;(direct)(diret)1DECRi;(Ri)(Ri)1DECRn;(Rn)(Rn)1,例,写出以下一段程序各条指令执行的结果MOVA,#0B3HMOV20H,#10HMOVR0,#20HADDA,R0ADDA,R0ADDA,#20H,(A)=0B3H(20H)=10H(R0)=20H(A)+(R0)=0B3H+10H=0C3HCY=0,OV=0(A)+(R0)=0C3H+20H=0E3HCY=0,OV=0(A)+20H=0E3H+20H=03HCY=1,OV=0,写出以下一段程序各条指令执行的结果MOVA,#0B3HMOV20H,#10HMOVR0,#20HADDA,R0ADDA,R0ADDA,#20H,(A)=0B3H(20H)=10H(R0)=20H(A)+(R0)=0B3H+10H=0C3HCY=0,OV=0(A)+(R0)=0C3H+20H=0E3HCY=0,OV=0(A)+20H=0E3H+20H=03HCY=1,OV=0,第一数存于30H和31H地址单元,第二数存于32H和33H地址单元,和存于34H和35H地址单元。数据存储时假定高位在前,低位在后。MOVA,31H;取第1数低位ADDA,33H;加第2数低位MOV35H,A;存和的低位MOVA,30H;取第1数高位ADDCA,32H;带进位加第2数高位MOV34H,A;存和的高位,例两个16位数加法,DAA没有直接的BCD码运算指令借用二进制加法运算指令实现压缩BCD码的运算两个BCD码的加法可能结果不是BCD码该指令对累加器中的结果进行调整。调整依据:1BCD码的低位9或半进位AC1加06H调整;2BCD码的高位9或CY1加60H调整;3如果以上两条都符合,则加66H调整指令仅对进位标志CY产生影响。,十进制调整指令,例7-5,多字节加法运算问题:两个8字节无符号数分别存放在内部RAM的30h和38h开始的连续地址单元,且低位在前,高位在后。假定计算结果仍不超过8字节的范围,并要求将结果放在30h开始的连续8个存储单元。试编写该程序段。,MOVB,#8;计数初值MOVR0,#30H;第一操作数起始地址MOVR1,#38H;第一操作数和结果起始地址CLRC;清除进位位REPEAT:MOVA,R0;取加数到AADDCA,R1;带进位加法MOVR1,A;存结果INCR0;地址调整INCR1;地址调整DJNZB,REPEAT;B内容减1,若不等于0则跳转思考:1为什么要有CLRC语句?2如果是8字节BCD码运算,应该如何修改?作业7-12类似3为什么INC指令不影响CY?,MULAB乘法(B)(A)(B)158(A)(A)(B)70除法DIVAB(A)=(A)/(B)(B)=(A)%(B),无符号整数乘法和除法指令,(16位部分积),(R7)(R5),(16位部分积),(30H)(31H)(32H),24位乘积,+(R6)(R5),(R6)(R7)(R5),例16X8位乘法程序,仿照十进位数竖式乘法,编程如下:MOVA,R7MOVB,R5MULAB;(R7)*(R5)MOV32H,A;部分积的低8位直接保存32H单元MOVR7,B;部分积高位暂存在R7中MOVA,R6MOVB,R5MULAB;(R6)(R5)ADDA,R7;部分积低8位与上次部分积高8位相加MOV31H,A;存中8位字节CLRAADDCA,B;部分积高8位与中8位的进位位相加MOV30H,A;存中8位字节,双操作数逻辑运算与ANL或ORL异XRL单操作数逻辑运算累加器其清零CLRA累加器取反指令CPLA累加器移位指令RRA,7.4逻辑操作类指令,以直接地址为目的操作数与累加器内容或立即数数按位与运算结果送回直接地址;,以累加器A为目的操作数把累加器A和源地址中操作数按位与运算结果送回累加器A;,逻辑与指令,ANLA,RnANLA,directANLA,RiANLA,#data8ANLdirect,AANLdirect,#data8,7.4.2逻辑或指令、逻辑异或指令,ORLA,RnORLA,directORLA,RiORLA,#data8ORLdirect,AORLdirect,#data8,XRLA,RnXRLA,directXRLA,RiXRLA,#data8XRLdirect,AXRLdirect,#data8,例7-6,设(A)36H,(R4)0FH。求执行指令ANLA,R4后的结果执行结果(A)00110110B(R4)00001111B(A)00000110B怎样在内存中将az的ASCII码变换为AZ的ASCII码?已知a和A的ASCII分别为61h和41h,其余字母的ASCII按16进制数规律顺序递增。小写字母的ASCII码与上11011111B,得到相应的大写字母的ASCII码。,设(A)0A8H,data0FH。执行指令ORLA,#data执行结果(A)10101000Bdata00001111B(A)10101111B怎样在内存中将AZ的ASCII码变换为az的ASCII码?大写字母的ASCII码或上00100000B,得到相应的小写字母的ASCII码。,例7-7,设:一个以ASCII码形式表示的两位数,其十位和个位分别存放在内部的20H,21H地址,试将其转换成一字节表示的BCD码数,并发送到P1端口。MOVR0,#20HMOVA,R0;取十位ASCII码ANLA,#0FH;保留低4位,高4位清0INCR0MOVB,#10H;个位移到高4位上MULABXCHDA,R0;将个位的低4位交换过来MOVP1,A如果是将这两个ASCII码转成二进制数,要作怎样的修改?,例,数字52的ASCII码,SWAPA,即实验二8-7,0-9减30HA-F减37H,已知:内部RAM30H中有一数(如AAH)现欲令它高4位不变低4位取反,试写出相应指令组。MOVA,#0FH;XRL30H,A,例,CLRA;清0CPLA;取反为单字节单周期指令。试比较下列两组指令:,累加器清零和取反指令,MOVR0,#0MOVR1,#0MOVR2,#0MOVR3,#0,CLRAMOVR1,AMOVR2,AMOVR3,AMOVR4,A,RLA;累加器左环移一位;RLCA;累加器通过C左环移一位;RRA累加器右环移一位;RRCA;累加器通过C右环移一位SWAPA;半字节交换,累加器A移位指令(1字节1周期),1)无条件转移指令2)条件转移指令3)子程序调用和返回指令,7.5控制转移类指令,LJMPaddr16;长转移指令AJMPaddr11;绝对转移指令SJMPrel;相对转移指令,JMPA+DPTR;变址寻址转移指令,无条件转移指令,长转移指令(64KB范围内转移指令)LJMPaddr16执行时,addrl6送入程序计数器PC,下条指令取指令时,转移自然发生。本指令为3字节2周期指令例已知某型号MCU在出厂时自带一段有用的程序代码,ROM区的地址是F100H,怎样转移到该处执行?用指令LJMP0F100H绝对转移指令(2K地址内的转移指令)AJMPaddr11执行时,addrl1送入程序计数器PC的低11位,PC的高5位不变,即在一定范围内转移本指令为2字节2周期指令,功能:(PC)(PC)+2,(PC)(PC)+rel转移范围Rel=-128+127目标地址=源地址+rel或Rel=目标地址源地址。关于源地址的解释:指令微操作期间,(PC)实际在取指的同时递增取指毕但尚未执行时,(PC)已递增到其下一条指令的地址,这就是源地址。这就是(PC)(PC)+2。rel由汇编器计算,为1字节补码,带符号扩展后与16位(PC)相加,实现跳转。从现行指令的首地址算起,该范围就是126+129。,相对转移指令SJMPrel,2000H8054HSJMPrel,间接转移指今JMPA+DPTR;(PC)(DPTR)+(A)1字节2周期转移指令;目标地址由基址+变址获得,习惯上称为间接转移。该指令实现散转,支持类似于C语言中的switch/case选择。如图,实现散转的程序安排,MOVDPTR,#TABLEADDA,A;A内容乘2,因散转表每一项为2字节JMPA+DPTRTABLE:AJMPK0;散转表,第0项,转K0执行AJMPK1;散转表,第1项,转K0执行AJMPK5;散转表,第5项,转K5执行K0:;K0分支实际入口AJMPDONE;K0分支结束,转出K1:;K1分支实际入口AJMPDONE;K1分支结束,转出K5:;K5分支实际入口AJMPDONE;K5分支结束,转出(此为最后一项)DONE:,(1)累加器A判零转移指令JZrel若(A)=0PCPC+2+REL若(A)0PCPC+2JNZrel若(A)0PCPC+2+REL若(A)=0PCPC+2许多MPU都具有用于判断运算结果是否为零的标志位;但是,MCS-51省略了该标志。它仅凭(A)的内容,不需要运算,就直接用于判别。,条件转移指令,(2)根据进位标志位转移,JCrel;Cy=1时转移:PCPC+2+rel,;Cy=0时顺序执行:PCPC+2JNCrel;C=0时转移:PCPC+2+rel,;Cy=1时顺序执行:PCPC+2,例,如下函数,变量X存放在20H单元内,函数值Y存放在21H单元中,试按下式的要求给Y赋值。,(3)比较条件转移指令CJNEA,direct,rel若(A)direct,PCPC+3+rel相对转移;(A)=(direct),PCPC+3顺序执行;且若(A)(direct),CY=0;(A)(direct),CY=1类似的指令还有三条:CJNEA,#data8,relCJNERn,#data8,relCJNERi,#data8,rel,都是3字节指令,源地址为指令存储地址+3,偏移量rel为-128+127。相对于其存储地址来说,转移范围为-125+130。比较相当于减法,但不保存结果,只影响Cy标志。若参加比较的操作数X和Y是无符号数,若cy=0,则XY;若Cyl,则XY。若是补码,则仅根据Cy无法判断它们的大小的。建议先将待比较的两个数都加80H,转为无符号比较和判断,比较完毕,根据需要在把两数恢复成原来的数。,例,7-14内部RAM30H单元开始存放8个无符号字节型数据,试找出其中的最大数,并将其存放在R7中。,程序段,MOVR0,#30H;数据区首地址MOVR6,#08H;数据区长度MOVA,R0;读第一个数DECR6LOOP:INCR0MOVB,R0;读下一个数CJNEA,B,NE;数值比较,不相等转移Normal:DJNZR6,LOOP;相等,继续循环到计数为0SJMPDONE;最大数在A,转结束处理,NE:JNCNormal;不等且大于,不交换XCHA,B;不等且小于,交换,最大值送ASJMPNormal;交换过,转正常处理DONE:MOVR7,A;最大值送R7,(3)循环控制条件转移指令DJNZRn,rel若Rn-10PCPC+2+relRn-1=0PCPC+2DJNZdirect,reldirect-10PCPC+3+reldirect-1=0PCPC+3通常条件转移指令都比较丰富,MCS-51因为有位操作指令,于是将本属于条件转移的指令归类到位操作指令了。,例:设单片机主频为12MHz,设计一延时程序实现50ms延时。DEL:MOVR7,#200DEL1:MOVR6,#125DEL2:DJNZR6,DEL2DJNZR7,DEL1RET延时计算:粗略125*2*200=50000uS=50mS在调试环境下,能显示所执行程序行、子程序等所费时间。,ACALLaddr11;子程序绝对调用2/2LCALLaddr16;子程序长调用3/2RET;子程序返回指令1/2RETI;中断返回1/2NOP;空操作1/1在程序语言中,子程序调用写CALL即可,汇编器可以智能地选择LCALL或ACALL,以得到紧凑的代码。子程序嵌套,嵌套深度仅受制于堆栈的深度;汇编语言设计中,子程序可以调用其本身(递归)。,子程序调用和返回指令,长调用指令,指令格式LCALLaddr16指令功能PCPC+3SPSP+1,(SP)(PC)07SPSP+1,(SP)(PC)815PCaddr16断点地址保存到堆栈,以便返回。,指令格式ACALLaddr11指令功能(PC)(PC)+2SPSP+1,(SP)(PC)07SPSP+1,(SP)(PC)815(PC)010addr11,(PC)1115保持不变,绝对调用指令,返回指令RET,RET;(PC815)(SP),(SP)(SP)-1;(PC07)(SP),(SP)(SP)1子程序至少有一个RET语句,置于子程序的末尾;为简化程序,可以设置多个返回点;执行到任一个RET语句,立即返回断点;断点在堆栈中。堆栈栈及内容与刚进入子程序时一致,则可以正确返回,例7-15,在内部RAM的10H字节单元中存有2位十六进制数,试将其转换为ASCII码,并存放于11h和12h两个单元中。试以主程序和子程序结构编写程序。,数字5A的ASCII码,主程序部分,MOVSP,#3FH;初试化堆栈MAIN:MOVA,10h;取十六进制数SWAPA;高低半字节交换ANLA,#0Fh;屏蔽无关位,得Hex高位ACALLHEX2ASC;调用转换子程序MOV11h,R7;保存HEX高位的ASCII码MOVA,10h;再取原十六进制数ANLA,#0Fh;屏蔽无关位,得HEX低位ACALLHEX2ASC;调用转换子程序MOV12h,R7;保存HEX低位的ASCIIDONE:,子程序部分,HEX2ASC:;输入参数在AADDA,#2;变址加2MOVCA,A+PC;查表指令MOVR7,A;输出参数在R7RETASCTAB:DB30h,31h,32h,33h,34h,35h,36h,37hDB38h,39h,41h,42h,43h,44h,45h,46h;0-9,A-F的ASCII码,思考:MOVC指令中如果用A+DPTR,如何写?HEX2ASC:;输入参数在AMOVDPTR,#ASCTAB;表格首地址MOVCA,A+DPTR;查表指令MOVR7,A;输出参数在R7RETASCTAB:DB30h,31h,32h,33h,34h,35h,36h,37hDB38h,39h,41h,42h,43h,44h,45h,46h;0-9,A-F的ASCII码思考:16进制数变成ASCII码,不查表还有什么方法?0-9加30HA-F加37H10D+37H=41H,练习:7-11,以RET实现转移的示例,如果要转移到2000H地址执行通常使用LJMP2000H,或AJMP2000H以下用RET指令,实现转移:MOVDPTR,#2000HPUSHDPLPUSHDPHRET这种转移方法可以有相当大的灵活性,因为其目标地址可以动态确定。,中断返回指令,指令格式RETI该指令的功能描述与RET指令相同;但具有不同的机器码和不同的功能;但是该指令涉及CPU的中断记忆部件,这些对编程者是不透明的,因此两者虽然功能描述相同,可见的行为也相似,但有本质的不同,不能互相替代。RETI用在中断服务程序(ISR)末尾。执行RETI指令除了返回断点地址外,还清除相应中断优级状态位。,RETI的非常规应用,以下是中断服务程序中的一段代码:CLRAPUSHACCPUSHACCRETI问返回何处?它清除了中断状态,并且下一条指令从0000H取指令执行,相当于复位,因此称为热启动。,空操作指令,指令格式NOP功能(PC)(PC)+1执行本指令使(PC)正常递增,以便访问下一条指令。除此以外,机器不做其他任何操作,也不影响任何标志位。单周期指令,该指令的价值在于产生1个机器周期的延时,通常是微控制器与扩展的外围芯片之间的配合所要求的。,7.6位操作指令,位传送指令格式:MOVC,bit;CY(bit)MOVbit,C;(bit)CY,位状态操作指令,位逻辑运算指令,例,试以软件实现Z=XY,其中X,Y,Z分别为P1口的P1.0,P1.1和P1.2。X,Y为输入,Z为输出。XBITP1.0YBITP1.1ZBITP1.2LOOP:MOVC,X;1ANLC,/Y;2MOVF0,C;1MOVC,Y;1ANLC,/X;2ORLC,F0;2MOVZ,C;1SJMPLOOP;2软件可实现硬件功能,硬件可实现软件功能优缺点?电气工程师的选择。,例7-16,基于位测试的控制转移指令,格式:JBbit,relbit=1PCPC+3+relbit=0PCPC+3JNBbit,relbit=0PCPC+3+relbit=1PCPC+3JBCbit,relbit=1PCPC+3+relbit0bit=0PCPC+3,24,2,进位位和直接地址位的反码相“与”,ANLC,/bit,24,2,进位位和直接地址位相“与”,ANLC,bit,12,2,直接地址位求反,CPLbit,12,1,进位位求反,CPLC,12,2,置直接地址位,SETBbit,12,1,置进位位,SETBC,12,2,清直接地址位,CLRbit,12,1,清进位位,CLRC,振荡周期,字节数,功能说明,助记符,24,3,直接地址位为1则转移,该位清零,JBCbit,rel,24,3,直接地址位为0则转移,JNBbit,rel,24,3,直接地址位为1则转移,JBbit,rel,24,2,进位位为0则转移,JNCrel,24,2,进位位为1则转移,JCrel,24,2,进位位送入直接地址位,MOVbit,C,12,2,直接地址位送入进位位,MOVC,bit,24,2,进位位和直接地址位的反码相“或”,ORLC,/bit,24,2,进位位和直接地址位相“或”,ORLC,bit,P1口作输出,接八只发光二极管

温馨提示

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

评论

0/150

提交评论