单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,3.2.3 逻辑运算指令(24条),一、逻辑与、或、非、异或指令,1ANL类指令6条,其功能:将源操作数内容和目的操作数内容按位相“与,结果存入目的操作数指定单元,源操作数不变。,ANL A,Rn ;ARnA,ANL A,direct ;A(direct)A,ANL A,Ri ;A(Ri)A,ANL A,#data ;AdataA,ANL direct,A ;(direct)A(direct),ANL direct,#data ;(direct)data(direct),举例,例 设AF6H,(30H)0FH,执行 ANL A,30H ;A(30H)A,操作如下:,11110110 (F6H),00001111 (0FH)注意:按位“与,00000110 (06H),结果:A06H,30H地址内容不变即(30H)=0FH,假设执行 ANL 30H,A ;(30H)A(30H),操作同上,结果放在30H地址中,A中内容不变即(30H)=06H,AF6H。,2ORL类指令(6条),功能:将源操作数内容与目的操作数内容按位逻辑“或,结果存入目的操作数指定单元中,源操作数不变。,ORL A,Rn ;ARnA,ORL A,direct ;A(direct)A,ORL A,Ri ;A(Ri)A,ORL A,#data ;AdataA,ORL direct,A ;(direct)A(direct),ORL direct,#data;(direct)data(direct),3XRL类指令6条,功能:将两个操作数指定内容按位“异或,结果存于目的操作数指定单元中。“异或原那么是相同为“0,相异为“1。,XRL A,Rn ;A RnA,XRL A,direct ;A(direct)A,XRL A,Ri ;A(Ri)A,XRL A,#data ;A dataA,XRL direct,A ;(direct)A(direct),XRL direct,#data;(direct)data(direct),例,(50H)15H,执行 XRL 50H,#06H ;(50H),06H(50H),操作如下:,00010101 (05H),00000110 (06H),00010011 (13H),结果:(50H)13H,4取反、清零指令,CPL A ;AA 累加器内容按位取反,CLR A ;00HA 累加器A清0,二、循环移位指令(4条),功能:将累加器A中内容循环移位或者和进位位一起移位,RL A ;A中内容循环左移,执行指令一次左移一位,RR A ;A中内容循环右移,每执行指令一次右移一位,RLC A ;A与CY内容一起循环左移一位,RRC A ;A与Cy内容一起循环右移一位,例,MOV A,#80H,RL A ;A01H,例,MOV A,#80H,RR A ;A40H,例,MOV A,#80H,RLC A ;CY=0,A00H,;CY=1,A=01H,例,MOV A,#80H,RRC A ;CY=0,A01000000B(40H),;CY=1,A11000000B(C0H),问题:将P1口的灯移动,可用什么指令?,MOV A,#01H,LP:MOV P1,A,LCALL DELAY,RL A,SJMP LP,3.2.4 控制转移类指令17条,功能:根据要求修改程序计数器PC内容,以改变程序运行方向,实现转移。,转移类指令又可分为:,无条件转移、条件转移、绝对转移、相对转移和调用、返回指令。,一、无条件转移类指令(4条,),LJMP addl6 ;addl6PC无条件跳转到addl6,;地址,可在64KB范围内转移,,;称为长转移指令,AJMP add11 ;add11PC,无条件转向add11,;地址,只能在2KB范围内转移,SJMP rel ;PC+2+relPC相对转移,rel是偏移量,,;它是8位有符号数,范围-128+127,;即向后跳转128B,向前可跳转127B,JMP A十DPTR;A+DPTRPC,属散转指令,,;无条件转向A与DPTR内容相加后,;形成的新地址,例1,请看如下程序,PC 2000H LJMP 4000H ;4000HPC,4000H MOV A,#11H,程序执行完第一条无条件转移指令后,马上跳转到4000H地址,执行该地址程序。,例2 程序,2000H:MOV R0,#1BH ;1BHR0,2002H:SJMP 03H ;PC+2+rel=2002H+2+03H,;2007HPC,2006H:,2007H:,执行SJMP 03H指令后,跳转到2007H地址执行程序。,说明:实际编写程序时最好把偏移量和转移地址都用符号表示,机器汇编时自动计算出偏移字节数,不容易出错,同时也便于修改程序。,例3,ORG 4000H,LJMP MAIN,ORG 400BH,SJMP INTI,MAIN:,INTI:,MAIN、INTI称为符号地址。,二、条件转移类指令8条,功能:根据条件判断是否转移,条件满足那么转移,,条件不满足那么顺序执行。,1.判 A 转,JZ rel ;A0,PC+2+relPC,;A0顺序执行,JNZ rel ;A0,PC+2+relPC,;A0顺序执行,2.比较指令,功能:源操作数与目的操作数比较,相等顺序执行,CJNE A,direct,rel;A(direct)转向PC+3+relPC,;且A(direct),0CY,;A(direct),lCY,;A(direct),PC+3PC即顺序执行,CJNE A,#data,rel ;Adata转向PC+3+relPC,;且 Adata,0CY,;Adata,1CY,;Adata,PC+3PC即顺序执行,CJNE Rn,#data,rel;Rndata转向PC+3+relPC,;且 Rndata,0CY,Rndata,1CY,;Rndata,PC+3PC即顺序执行,CJNE Ri,#data,rel;(Ri)data转向PC+3+relPC,;且 (Ri)data,0CY,(Ri)data,1CY,;(Ri)data,PC+3PC即顺序执行,注意:,CJNE类指令中借用进位标志位CY作为比较结果的标志位,目的操作数内容小于源操作数内容CY置“1,反之CY清“0。,该类指令多用于分支程序,3.减“1转移指令,DJNZ Rn,rel ;Rn-1Rn,,;Rn0,PC+2+relPC,;Rn0,PC+2PC顺序执行,DJNZ direct,rel ;(direct)-1(direct),,;(direct)0转向PC+2+relPC,;(direct)0,PC+2PC顺序执行,注意:DJNZ指令执行时Rn或direct先减l,然后再判断Rn或direct内是否等于0。不为0那么转,为0顺序执行。DJNZ指令在循环程序中,控制循环次数很方便。,延时程序,DELAY:MOV R0,#10,LP:NOP,DJNZ R0,LP,RET,注意:,编程时不要写绝对字节数,用符号地址,三、调用、返回、空操作指令,1调用指令2条,调用指令用于调用子程序。,LCALL addr16 ;长调用指令,功能:该指令可调用64KB范围内的任意子程序,故称长调用指令。,ACALL addr11 ;短调用指令。,功能:只能调用2KB范围内的子程序,故称短调用指令。,2程序返回指令2条,RET ;子程序返回指令,功能:放在子程序最后,使程序准确返回到主程序断点处。,三、调用、返回、空操作指令,RETI ;中断返回指令,功能:用于中断效劳程序,使中断程序结束后准确返回到主程序断点处,执行过程同RET,它还能去除优先级状态。,3空操作指令1条,NOP ;只进行取指令、译码,不进行任何操作,故为空操作,常用于产生一个机器周期延时。,例 编程控制累加器A中数从0逐次加1,当A中为100时停止加l,把结果存入片内RAM 50H单元中。,程序,CLR A ;清A,MOV R0,#100 ;循环常数送R0,LP:INC A ;A+1A,DJNZ R0,LP ;R0-1R0,R00转LP,MOV 50H,A ;R00(够100次,A50H),;50H)=100=64H,3.2.5 位操作指令布尔指令,功能:对内部RAM中可进行位操作的区域进行位操作。,主要位操作有变量传送、逻辑运算、控制转移等。,位操作与字节操作的主要区别:,用进位标志位CY记为C作位累加器。C的功能类似累加器A,只是A中可存放8位二进制数,C中只能存放一位二进制数,或为“1或为“0。,MOV C,bit ;bitC,寻址位的状态送入C,MOV bit,C ;Cbit),C的状态送位地址中,CLR C ;0C,清0 C累加器,CLR bit ;0bit),清0寻址位,3.2.5 位操作指令布尔指令,CPL C ;CC,C取反,CPL bit ;bitbit),寻址位取反,SETB C ;1C,C置“1,SETB bit ;1bit),寻址位置“1,ANL C,bit ;CbitC,寻址位和C“与,,;结果在C,ANL C,/bit ;Cbit)C,寻址位的非,;和C“与,结果在C,ORL C,bit ;CbitC,寻址位与C“或,,;结果在C,ORL C,/bit ;Cbit)C,寻址位的非,;和C“或,结果在C,JC rel ;C=1转向PC+2+relPC,;C0顺序执行PC+2PC,JNC rel ;C=0转向PC+2+relPC,;C1顺序执行PC+2PC,JB bit,rel ;bit)l转向PC+3+relPC,;(bit)0顺序执行PC+3PC,JNB bit,rel ;bit)0转向PC+3+relPC,;(bit)l顺序执行PC+3PC,JBC bit,rel ;bit)1转向PC+3+relPC,;同时0(bit),;bit)0顺序执行PC+3PC,注意:JBC与JB指令区别,前者转移后并把寻址位清0,后者只转移不清0寻址位。,例 用位操作指令编程计算逻辑方程,P1.7ACC.0B.0+P2.1)+P3.2,式中 “+表示逻辑“或;,“表示逻辑“与。,程序,MOV C,B.0 ;B.0C,ORL C,P2.1 ;C P2.1C即B.0+P2.1C,ANL C,ACC.0 ;C ACC.0C,;即ACC.0B.0+P2.1C,ORL C,/P3.2 ;C P3.2C,;即 ACC.0B.0+P2.1)+P3.2C,MOV P1.7,C ;CP1.7,3.2.6 伪指令,伪指令或汇编指令:,有一些控制汇编的特殊指令,它们不属于指令系统也不产生机器码,故称为伪指令或汇编指令。,用助记符指令编写的程序叫源程序,汇编后的程序叫目的程序。,下面介绍几条常用伪指令。,一、地址定位伪指令,格式:ORG addrl6,操作码 16位地址,例1 ORG 2000H,表示某段程序的起始地址是2000H单元。,注意:在一个源程序中可以屡次使用0RG指令以规定不同的程序段地址,但各段地址必须由小到大排列,地址不能交叉、重叠。,例2 ORG 2000H,ORG 2500H,ORG 3000H,这种顺序是正确的。假设按下面顺序排列那么是错误的。,ORG 2500H,ORG 2000H,ORG 3000H,二、汇编结束伪指令,格式:END,操作码,END 放在整块汇编程序之后,表示汇编到此结束。,注意:END千万不能放在程序中间,这样就把END之后的程序丢掉,不予汇编。,三、字节定义伪指令,格式:DB 字节常数或ASCII码,操作码 操作数,例如 ORG 2000H,DB 30H,40H,24,“C,“B,汇编后,(2000H)30H,(200lH)40H,(2002H)18H(24),(2003H)43H(C的ASCII码),(2004H)42H(B的ASCII码),四、定义字伪指令,格式:DW 字常数或ASCII码,操作码 操作数,例如:ORG 2000H,