《转移指令及位操作指令.ppt》由会员分享,可在线阅读,更多相关《转移指令及位操作指令.ppt(22页珍藏版)》请在三一办公上搜索。
1、控制转移指令,1、无条件转移指令:长转移类指令:LJMP addr16绝对转移类指令:AJMP addr11短转移指令:SJMP rel间接转移指令:JMP A+DPTR我们在编写汇编语言源程序时,可以直接写成:LJMP 标号;即转移到标号处 AJMP 标号 SJMP 标号 JMP 标号,2.条件转移指令(8条),条件转移指令是指在满足一定条件时进行相对转移,否则程序继续执行本指令的下一条指令。,(1)判A内容是否为0转移指令(2条),JZ rel;如果A=0,则转移,否则顺序执行。JNZ rel;如果A0,就转移。我们在编写汇编语言源程序时,可以直接写成:JZ 标号;即转移到标号处。JNZ
2、标号;即转移到标号处,(2)比较转移指令(4条),CJNE A,#data,rel CJNE A,direct,relCJNE Rn,#data,relCJNE Ri,#data,rel同样地,使用时,我们可以将rel理解成标号,即:CJNE A,#data,标号CJNE A,direct,标号CJNE Rn,#data,标号CJNE Ri,#data,标号,(3)减1条件转移指令(2条),DJNZ Rn,relDJNZ direct,rel,3子程序调用和返回,(1)调用指令(2条),LCALL addr16;长调用指令 ACALL addr11;短调用指令上面两条指令都是在主程序中调用子程
3、序,两者的区别:对短调用指令,被调用子程序入口地址必须与调用指令的下一条指令的第一字节在相同的2KB存储区之内。使用时可以用:LCALL 标号;标号表示子程序首地址 ACALL 标号 来调用子程序。,(2)返回指令(2条),子程序执行完后必须回到主程序,如何返回呢?只要执行一条返回指令就可以了。RET;子程序返回指令RETI;中断子程序返回指令两者不能互换使用。,4.空操作指令(1条),NOP,例:利用子程序调用编写令20H-2AH,30H-3EH,40H-4FH 三个区域清零的程序,ORG 1000H MOV SP,#70H MOV R0,#20H MOV R2,#0BH ACALL ZER
4、O MOV R0,#30H MOV R2,#0FH ACALL ZERO MOV R0,#40H MOV R2,#10H ACALL ZEROZERO:MOV R0,#00H INC R0 DJNZ R2,ZERO RET END,例:从P1口的P1.0管脚输出周期为10个机器周期的方波 CLR P1.0LOOP:CPL P1.0 NOP NOP SJMP LOOP,练习:1、已知某单片机监控程序始址为A080H,问用什么办法是单片机开机后自动执行监控程序2、已知MA=0500H,问8051单片机执行如下指令 MOV SP,#70HMA:LCALL 8192H堆栈中数据如何变化,PC中内容是什
5、么,3、已知外部RAM中以3000H为始址的数据块以零为结束标志,试编程将之传送到以30H为始址的内部RAM区,位操作指令,1位传送指令(2条),MOV C,bit;bit CMOV bit,C;C bit这组指令的功能是实现CY和其它位地址之间的数据传递。例:MOV C,P1.0;将P1.0的状态送给C。MOV P1.0,C;将C中的状态送到P1.0;引脚上去。,2 位变量修改指令(4条),位清0指令:CLR C CLR bit 例:CLR P1.0;即使P1.0变为0 位置1指令:SETB C SETB bit 例:SETB P1.0;使P.0变为1位取反指令:CPL C CPL bit,
6、3.位 逻辑运算指令(4条),ANL C,bit ANL C,/bit ORL C,bitORL C,/bit,4.位控制转移指令(5条),(1)判Cy转移指令 JC relJNC rel 第一条指令的功能是如果Cy=1就转移,否则就顺序执行。第二条指令则和第一条指令相反,即如果Cy=0就转移,否则就顺序执行。同样理解:JNC 标号,(2)判位直接寻址位转移指令 JB bit,relJNB bit,rel JBC bit,rel第一条指令:如果指定的(bit)=1,则转移,否则顺序执行,第二条指令功能相反。同样理解:JB bit,标号第三条指令是如果指定的(bit)=1,则转移,并把该位清0,
7、否则顺序执行。,例1:内部RAM的M1和M2单元各有一个无符号8位二进制数,试编程比较它们的大小,并把大数送到MAX单元 MOV A,M1 CJNE A,M2,LOOPLOOP:JNC LOOP1 MOV A,M2LOOP1:MOV MAX,A,例2:已知外部RAM以2000H开始有一个数据缓冲区,该缓冲区中数据以回车符(ASCII码为0DH)为结束标志,试编一程序把正数送入片内RAM以30H为起始地址的正数区,把负数送入片内RAM以50H为起始地址的负数区。(假设输入数据不超过32个),ORG 0100H MOV DPTR,#2000H MOV R0,#30H MOV R1,#50HNEXT:MOVX A,DPTR CJNE A,#0DH,P SJMP DONEP:JB ACC.7,LOOP MOV R0,A INC R0 INC DPTR SJMP NEXT,LOOP:MOV R1,A INC R1 INC DPTR SJMP NEXTDONE:END,