您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 模板/表格 > 第7讲 转移指令及位操作指令
•作业:•1、内部RAM30H单元中的内容送内部RAM35H单元•2、R1内容传送到R0•3、内部RAM38H单元的内容送P1口•4、外部RAM0100H单元的内容送SP•5、内部RAM40H单元的内容送外部RAM1002H•6、外部RAM1050H单元的内容送外部RAM25H单元控制转移指令•1、无条件转移指令:•长转移类指令:LJMPaddr16•绝对转移类指令:AJMPaddr11短转移指令:SJMPrel间接转移指令:JMP@A+DPTR•我们在编写汇编语言源程序时,可以直接写成:LJMP标号;即转移到标号处AJMP标号SJMP标号JMP标号2.条件转移指令(8条)条件转移指令是指在满足一定条件时进行相对转移,否则程序继续执行本指令的下一条指令。(1)判A内容是否为0转移指令(2条)JZrel;如果A=0,则转移,否则顺序执行。JNZrel;如果A≠0,就转移。我们在编写汇编语言源程序时,可以直接写成:JZ标号;即转移到标号处。JNZ标号;即转移到标号处(2)比较转移指令(4条)CJNEA,#data,relCJNEA,direct,relCJNERn,#data,relCJNE@Ri,#data,rel同样地,使用时,我们可以将rel理解成标号,即:CJNEA,#data,标号CJNEA,direct,标号CJNERn,#data,标号CJNE@Ri,#data,标号(3)减1条件转移指令(2条)DJNZRn,relDJNZdirect,rel3.子程序调用和返回(1)调用指令(2条)LCALLaddr16;长调用指令ACALLaddr11;短调用指令上面两条指令都是在主程序中调用子程序,两者的区别:对短调用指令,被调用子程序入口地址必须与调用指令的下一条指令的第一字节在相同的2KB存储区之内。使用时可以写成:LCALL标号;标号表示子程序首地址ACALL标号来调用子程序。(2)返回指令(2条)子程序执行完后必须回到主程序,如何返回呢?只要执行一条返回指令就可以了。RET;子程序返回指令RETI;中断子程序返回指令两者不能互换使用。4.空操作指令(1条)NOP•例:利用子程序调用编写令20H-2AH,30H-3EH,40H-4FH三个区域清零的程序ORG1000HMOVSP,#70HMOVR0,#20HMOVR2,#0BHACALLZEROMOVR0,#30HMOVR2,#0FHACALLZEROMOVR0,#40HMOVR2,#10HACALLZEROZERO:MOV@R0,#00HINCR0DJNZR2,ZERORETEND例:从P1口的P1.0管脚输出周期为10个机器周期的方波CLRP1.0LOOP:CPLP1.0NOPNOPSJMPLOOP•练习:•1、已知某单片机监控程序始址为A080H,问用什么办法使单片机开机后自动执行监控程序•2、已知MA=0500H,问8051单片机执行如下指令•MOVSP,#70H•MA:LCALL8192H•堆栈中数据如何变化,PC中内容是什么•3、已知外部RAM中以3000H为始址的数据块以零为结束标志,试编程将之传送到以30H为始址的内部RAM区位操作指令1.位传送指令(2条)MOVC,bit;bit→CMOVbit,C;C→bit这组指令的功能是实现CY和其它位地址之间的数据传递。例:MOVC,P1.0;将P1.0的状态送给C。MOVP1.0,C;将C中的状态送到P1.0;引脚上去。2位变量修改指令(4条)位清0指令:CLRCCLRbit例:CLRP1.0;即使P1.0变为0位置1指令:SETBCSETBbit例:SETBP1.0;使P.0变为1位取反指令:CPLCCPLbit3.位逻辑运算指令(4条)ANLC,bitANLC,/bitORLC,bitORLC,/bit4.位控制转移指令(5条)(1)判Cy转移指令JCrelJNCrel第一条指令的功能是如果Cy=1就转移,否则就顺序执行。第二条指令则和第一条指令相反,即如果Cy=0就转移,否则就顺序执行。同样也可写成:JC标号JNC标号(2)判位直接寻址位转移指令JBbit,relJNBbit,relJBCbit,rel第一条指令:如果指定的(bit)=1,则转移,否则顺序执行,第二条指令功能相反。第三条指令是如果指定的(bit)=1,则转移,并把该位清0,否则顺序执行。编写程序时,可以写成:JBbit,标号JNBbit,标号JBCbit,标号例1:内部RAM的M1和M2单元各有一个无符号8位二进制数,试编程比较它们的大小,并把大数送到MAX单元MOVA,M1CJNEA,M2,LOOPLOOP:JNCLOOP1MOVA,M2LOOP1:MOVMAX,A•例2:已知外部RAM以2000H开始有一个数据缓冲区,该缓冲区中数据以回车符(ASCII码为0DH)为结束标志,试编一程序把正数送入片内RAM以30H为起始地址的正数区,把负数送入片内RAM以50H为起始地址的负数区。(假设输入数据不超过32个)ORG0100HMOVDPTR,#2000HMOVR0,#30HMOVR1,#50HNEXT:MOVXA,@DPTRCJNEA,#0DH,COMPSJMPDONECOMP:JBACC.7,LOOPMOV@R0,AINCR0INCDPTRSJMPNEXTLOOP:MOV@R1,AINCR1INCDPTRSJMPNEXTDONE:END
本文标题:第7讲 转移指令及位操作指令
链接地址:https://www.777doc.com/doc-3228251 .html