转移指令及位操作指令.ppt
控制转移指令控制转移指令1、无条件转移指令:、无条件转移指令:长转移类指令:长转移类指令:LJMP addr16绝对转移类指令:绝对转移类指令:AJMP addr11短转移指令:短转移指令:SJMP rel间接转移指令:间接转移指令:JMP A+DPTR我们在编写汇编语言源程序时,可以直接写成:我们在编写汇编语言源程序时,可以直接写成:LJMP 标号标号;即转移到标号处;即转移到标号处 AJMP 标号标号 SJMP 标号标号 JMP 标号标号2.条件转移指令(8 8条)条)条件转移指令是指在满足一定条件时进行相对转条件转移指令是指在满足一定条件时进行相对转移,否则程序继续执行本指令的下一条指令。移,否则程序继续执行本指令的下一条指令。(1)(1)判判A A内容是否为内容是否为0 0转移指令(转移指令(2 2条)条)JZ rel JZ rel ;如果;如果A=0A=0,则转移,否则顺序执行。,则转移,否则顺序执行。JNZ rel JNZ rel ;如果;如果A0A0,就转移。,就转移。我们在编写汇编语言源程序时,可以直接写成:我们在编写汇编语言源程序时,可以直接写成:JZ JZ 标号标号 ;即转移到标号处。;即转移到标号处。JNZ 标号标号;即转移到标号处;即转移到标号处(2)(2)比较转移指令(比较转移指令(4 4条)条)CJNE ACJNE A,#data#data,rel rel CJNE ACJNE A,directdirect,relrelCJNE RnCJNE Rn,#data#data,relrelCJNE RiCJNE Ri,#data#data,relrel同样地,使用时,我们可以将同样地,使用时,我们可以将relrel理解成标号,即:理解成标号,即:CJNE ACJNE A,#data#data,标号,标号CJNE ACJNE A,directdirect,标号,标号CJNE RnCJNE Rn,#data#data,标号,标号CJNE RiCJNE Ri,#data#data,标号,标号(3)(3)减减1 1条件转移指令(条件转移指令(2 2条)条)DJNZ RnDJNZ Rn,relrelDJNZ directDJNZ direct,relrel3子程序调用和返回子程序调用和返回 (1)(1)调用指令(调用指令(2 2条)条)LCALL addr16 LCALL addr16 ;长调用指令;长调用指令 ACALL addr11 ACALL addr11 ;短调用指令;短调用指令上面两条指令都是在主程序中调用子程序,两者的区别上面两条指令都是在主程序中调用子程序,两者的区别:对短调用指令,被调用子程序入口地址必须与调用指令的对短调用指令,被调用子程序入口地址必须与调用指令的下一条指令的第一字节在相同的下一条指令的第一字节在相同的2KB2KB存储区之内。存储区之内。使用时可以用:使用时可以用:LCALL LCALL 标号标号 ;标号表示子程序首地址;标号表示子程序首地址 ACALL ACALL 标号标号 来调用子程序。来调用子程序。(2)(2)返回指令返回指令 (2 2条)条)子程序执行完后必须回到主程序,如何返子程序执行完后必须回到主程序,如何返回呢?只要执行一条返回指令就可以了。回呢?只要执行一条返回指令就可以了。RETRET;子程序返回指令;子程序返回指令RETIRETI;中断子程序返回指令;中断子程序返回指令两者不能互换使用。两者不能互换使用。4.4.空操作指令空操作指令(1条)NOP 例:利用子程序调用编写令例:利用子程序调用编写令20H-2AH,30H-3EH,40H-4FH 三个区域清零的程三个区域清零的程序序 ORG 1000H MOV SP,#70H MOV R0,#20H MOV R2,#0BH ACALL ZERO 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口的管脚输出周期为口的管脚输出周期为10个机器周期个机器周期的方波的方波 NOP NOP SJMP LOOP练习:练习:1、已知某单片机监控程序始址为、已知某单片机监控程序始址为A080H,问用什么办法是单片机开机后自动执,问用什么办法是单片机开机后自动执行监控程序行监控程序2、已知、已知MA=0500H,问,问8051单片机执行单片机执行如下指令如下指令 MOV SP,#70HMA:LCALL 8192H堆栈中数据如何变化,堆栈中数据如何变化,PC中内容是什么中内容是什么3、已知外部、已知外部RAM中以中以3000H为始址的数为始址的数据块以零为结束标志,试编程将之传送据块以零为结束标志,试编程将之传送到以到以30H为始址的内部为始址的内部RAM区区 位操作指令1 1位传送指令位传送指令 (2 2条)条)MOV CMOV C,bitbit;bit Cbit CMOV bitMOV bit,C C;C bitC bit这组指令的功能是实现这组指令的功能是实现CYCY和其它位地址之间的和其它位地址之间的数据传递。数据传递。例例:MOV CMOV C,P1.0P1.0;将的状态送给;将的状态送给C C。,C C ;将;将C C中的状态送到中的状态送到P1.0 P1.0 ;引脚上去。;引脚上去。2 位变量修改指令(4条)位清0指令 :CLR C :CLR C CLR bit CLR bit 例:例:CLR P1.0 CLR P1.0 ;即使即使P1.0P1.0变为变为0 0 位置1指令:SETB C SETB C SETB bit SETB bit 例:例:SETB P1.0 SETB P1.0;使;使P.0P.0变为变为1 1位取反指令位取反指令:CPL CCPL C CPL bit CPL bit3.位位 逻辑运算指令逻辑运算指令(4条)条)ANL CANL C,bit bit ANL CANL C,/bit /bit ORL CORL C,bitbitORL CORL C,/bit/bit4.4.位控制转移指令(位控制转移指令(5 5条)条)(1)(1)判判CyCy转移指令转移指令 JC relJNC rel 第一条指令的功能是如果Cy=1Cy=1就转移,否则就顺序执行。第二条指令则和第一条指令相反,即如果Cy=0Cy=0就转移,否则就顺序执行。同样理解:JNC 标号标号(2)判位直接寻址位转移指令 JB bit,relJNB bit,rel JBC bit,rel第一条指令:如果指定的(bit)=1,则转移,否则顺序执行,第二条指令功能相反。同样理解:JB bit,标号第三条指令是如果指定的(bit)=1,则转移,并把该位清0,否则顺序执行。例例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,COMP SJMP DONECOMP:JB ACC.7,LOOP MOV R0,A INC R0 INC DPTR SJMP NEXTLOOP:MOV R1,A INC R1 INC DPTR SJMP NEXTDONE:END