资源描述
单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,第,3,章,80C51,的指令系统,指令格式,及,常用符号,3.1,80C51,的,寻址方式,3.2,数据传送,指令 (,29,条),3.3,算数运算,指令 (,24,条),3.4,逻辑运算,与,循环,类指令(,24,条),3.5,控制转移,类指令 (,17,条),3.6,位操作,类指令 (,17,条),3.7,2024/9/21,1,3.1,指令格式及常用符号,3.1.1,机器指令的字节编码形式,8,位编码仅为操作码,单字节指令(,49,条),机器指令,:计算机能直接识别和执行的指令。,位号,7 6 5 4 3 2 1 0,字节,opcode,如:,INC A,编码为:,0,0,0,0,0,1,0,0,即:,04H,8,位编码含操作码和寄存器编码,位号,7 6 5 4 3 2 1 0,字节,opcode,r r r,如:,MOV A,,,R0,编码为,:,1,1,1,0,1,0,0,0,即:,E8H,2024/9/21,2,双字节指令(,45,条),位号,7 6 5 4 3 2 1 0,字节,opcode,data,或,direct,三字节指令(,17,条),位号,7 6 5 4 3 2 1 0,字节,opcode,data,或,direct,data,或,direct,如:,MOV A,,,#50H,编码为,:,0,1,1,1,0,1,0,0,0,1,0,1,0,0,0,0,即:,74H,50H,如:,MOV 20H,,,#50H,编码为,:,0,1,1,1,0,1,0,1,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,即:,75H,20H,50H,2024/9/21,3,书写格式,注意:,操作助记符不能缺少,操作数个数可为:,1,、,2,、,3,个,2,个操作数的指令,目的操作数在左边,一般格式,操作助记符,目的操作数,,源操作数,;注释,3.1.2,符号指令的书写格式,2024/9/21,4,描述符号,Rn,(,n=0,7,),-,当前工作寄存器组中的寄存器,R0,R7,之一,Ri,(,i=0,1,),-,当前工作寄存器组中的寄存器,R0,或,R1, -,间址寄存器前缀,#data -8,位立即数,/,#data16-16,位立即数,direct-,片内低,128,个,RAM,单元地址及,SFR,地址,addr11-11,位目的地址,addr16-16,位目的地址,rel-8,位地址偏移量,范围:,128,127,bit-,片内,RAM,位地址、,SFR,的位地址,(,),-,表示,地址单元或寄存器中的内容,/ -,位操作数的取反操作前缀,2024/9/21,5,3.2.1,寄存器寻址,寻址方式:寻找,(源)操作数,或,指令转移地址,的方式,80C51,单片机有,7,种寻址方式,3.2,80C51,的寻址方式,操作数在寄存器中,寻址空间:,R0,R7,、,A,、,B(AB,形式),和,DPTR,特点:,传送和执行速度快,【,例,】,若(,R0,),=30H,,,执行,MOV A,R0,后,(,A,),=30H,2024/9/21,6,3.2.2,直接寻址,操作码后字节存放的是操作数的地址,寻址空间:,片内,RAM,低,128,字节,SFR,(符号形式),另一类直接寻址是转移目标地址的寻址。如:,LJMP ADDR16,【,例,】,若(,50H,),=3AH,,,执行,MOV A,50H,后,(,A,),=3AH,2024/9/21,7,3.2.3,寄存器间接寻址,寄存器中的内容是操作数的地址,寻址空间:,片内,RAM,(,Ri,、,SP,),片外,RAM,(,Ri,、,DPTR,),【,例,】,若(,R0,),=30H,(,30H,),=5AH,执行,MOV A,R0,后,(,A,),=5AH,片内:,MOV,片外:,MOVX,2024/9/21,8,3.2.4,立即寻址,操作数在指令编码中,寻址空间:,ROM,对于,MOV DPTR,,,#2100H,指令,立即数高,8,位,“,21H,”,装入,DPH,【,例,】,执行,MOV A,,,#50H,结果:(,A,),=50H,2024/9/21,9,3.2.5,变址寻址,操作数地址:基地址,+,偏移量,寻址空间:,ROM,变址寻址,还用于跳转指令,如,JMP A+DPTR,【,例,】,(,A,),0FH,(,DPTR,),=2400H,执行,MOV A,A+DPTR,”,后,结果:(,A,),=88H,2024/9/21,10,3.2.6,相对寻址,用于跳转指令,实现程序分支,Rel,常用符号地址表示,离源地址不要超过(,128,127,),【,例,】,若,rel,为,75H,,,PSW.7,为,1,,,JC,rel,存于,1000H,开始的单元。,执行,JC,rel,指令后,程序将跳转到,1077H,单元取指令并执行。,2024/9/21,11,3.2.7,位寻址,寻址位数据,寻址空间,片内,RAM,位空间,SFR,位空间,【,例,】,位地址,00H,内容为,1,,,MOV C,,,00H,执行后,位地址,PSW.7,的内容为,1,。,位寻址方式实质属于,位的直接寻址,。,2024/9/21,12,3.3,数据传送类指令(,29,条),一般不影响标志寄存器,PSW,的状态。,传送类指令有两大类,一般传送(,MOV,),特殊传送,如:,MOVC,MOVX,PUSH,、,POP,XCH,、,XCHD,SWAP,2024/9/21,13,3.3.1,一般传送指令,16,位传送(仅,1,条),MOV DPTR,,,#data16,;,DPTR data16,例:执行指令,MOV DPTR,,,#1234H,后,(,DPH,),=12H,,(,DPL,),=34H,。,8,位传送,通用格式:,MOV ,,,;,2024/9/21,14,以,A,为目的,【,例,3-9】,若,(,R1,),= 20H,,(,20H,),= 55H,。执行指令,MOV A,,,R1,后,(,A,),= 55H,。,2024/9/21,15,以,Rn,为目的,【,例,3-10】,执行指令,MOV R6,,,#50H,后,(,R6,),= 50H,2024/9/21,16,以,direct,为目的,【,例,3-11】,若(,R1,),=50H,(,50H,),=18H,,执行指令,MOV 40H,,,R1,后,(,40H,),=18H,2024/9/21,17,以,Ri,为目的,【,例,3-12】,若(,R1,),=30H,,(,A,),=20H,,执行指令,MOV R1,,,A,后,(,30H,),=20H,。,2024/9/21,18,3.3.2,特殊传送指令,以,DPTR,内容为基址,读,ROM,中常数表项指令,MOVC,ROM,中可以存放程序,代码,,还经常存放,常数表,MOVC A,,,A+DPTR,;,A ,(,A,),+,(,DPTR,),以,PC,内容为基址,MOVC A,,,A+PC,;,A ,(,A,),+,(,PC,),常数表存放约束小,称为,远,程查表指令。,占用,DPTR,常数表存放约束大,称为,近,程查表指令。,不占用,DPTR,2024/9/21,19,读,片外,RAM,读片外,RAM,及接口单元数据的指令,MOVX,片外,RAM,中经常存放数据采集与处理的中间数据,MOVX A,,,DPTR,;,A ,(,DPTR,),MOVX A,,,Ri,;,A ,(,Ri,),写,片外,RAM,MOVX DPTR,,,A,;(,DPTR,),A,MOVX ,Ri,,,A,;(,Ri,),A,注意:用,Ri,寻址时,,高,8,位地址,由,P2,口提供,2024/9/21,20,入,栈指令,PUSH,堆栈操作指令,PUSH,和,POP,堆栈,是一片存储区,遵循,“,后进先出,”,原则,栈顶由,SP,指示。,80C51,的堆栈,设在,片内,RAM,低端的,128,个单元,向,上,生长。,PUSH direct,;,SP,(,SP,),1,,(,SP,)(,direct,),出,栈指令,POP,POP direct,;(,direct,)(,SP,),,SP ,(,SP,),1,注:堆栈用于子程序调用时,保护返回地址,,或者用于保护,子程序调用之前的某些重要数据,(即保护现场),还可以用于,数据交换,。,2024/9/21,21,利用堆栈完成,40H,与,50H,单元内容的交换的示例,MOV SP,#6FH;,将堆栈设在,70H,以上,RAM,空间,PUSH 40H ;,将,40H,单元的,“,23H,”,入栈,之后(,SP,),=70H,PUSH 50H ;,将,50H,单元的,“,45H,”,入栈,之后(,SP,),=71H,POP 40H ;,将,SP,指向的,71H,单元的内容弹到,40H,单元,之后(,SP,),=70H,POP 50H ;,将,SP,指向的,70H,单元的内容弹到,50H,单元,之后(,SP,),=6FH,(,a,)初始状态 (,b,),2,条,PUSH,指令执行后 (,c,),2,条,POP,指令执行后,2024/9/21,22,字节,交换指令,XCH,数据交换指令,XCH,、,XCHD,和,SWAP,数据交换属于同时进行的双向传送,【,例,3-20】,若(,R0,),=80H,,(,A,),=20H,。,执行指令,XCH A,,,R0,后,,(,A,),=80H,,(,R0,),=20H,。,2024/9/21,23,半字节,交换指令,XCHD,【,例,3-21】,若(,R0,),30H,,(,30H,),67H,, (,A,),20H,。执行指令,XCHD A,,,R0,指令后,(,A,),27H,,(,30H,),60H,。,XCHD,是间址操作数的低半字节与,A,的低半字节互换。,SWAP,是累加器的高低,4,位互换,【,例,3-22】,若(,A,),30H,,执行指令,SWAP A,后,(,A,),03H,。,2024/9/21,24,3.4,算数运算类指令(,24,条),算数,运算结果,要,影响,PSW,中标志位,CY,为,1,,,无符号数,(字节)加减发生,进位,或,借位,OV,为,1,,,有符号数,(字节)加减发生,溢出,错误,AC,为,1,,,十进制数,(,BCD,码)加法的结果应,调整,P,为,1,,存于累加器,A,中操作结果的,“,1,”,的个数,为,奇数,标志位意义,标志位与相关指令影响,指令,标志,ADD,、,ADDC,、,SUBB,DA,MUL,DIV,CY,0,0,AC,OV,P,2024/9/21,25,算数运算影响标志位示例,【,例,3-23】,有,2,个参与相加的机器数,一个是,84H,,另一个是,8DH,。试分析运算过程及其对状态标志的影响。,结果,:,CY,为,1,;,AC,为,1,;,OV,为,1,;,P,为,0,2024/9/21,26,3.4.1,加法,不带进位加法,【,例,3-24】,若有,2,个,无符号数,存于累加器,A,和,RAM,的,30H,单元,即(,A,),=84H,,(,30H,),=8DH,,试分析执行指令,ADD A,,,30H,后的结果。,由于对无符号数相加,要考察,CY,。由上页图可知,,CY=1,,因此知道运算的结果发生了进位,即实际值应该是,100H,+,11H,。,所以,编程者,应确保,单字节无符号数,运算结果,不要超过,255,2024/9/21,27,【,例,3-25】,若有,2,个,有符号数,存于累加器,A,和,RAM,的,30H,单元,即(,A,),=84H,,(,30H,),=8DH,,试分析执行指令,ADD A,,,30H,后的结果。,有符号数相加,,只需考察溢出标志,OV,即可。由上图可见,OV=1,,因此可知运算的结果发生了溢出,这说明累加器,A,中的结果已经不是正确的值了。,编程者应确保单字节有符号数运算结果不超过,-128,127,。否则,就要将数据用多字节表示或在程序运行中对状态标志进行判断:,无符号数用,JNC,或,JC,,有符号数要用,JNB,或,JB,。,2024/9/21,28,带进位加法(这组指令方便了多字节加法的实现),加,1,2024/9/21,29,十进制调整,DA A,;调整,A,的内容为正确的,BCD,码,两个压缩的,BCD,码按二进制相加后,必须经过调整方能得到正确的和。,当,A,中低,4,位出现了非,BCD,码(,1010,1111,)或低,4,位的进位,AC=1,,则应在低,4,位加,6,调整。,当,A,中高,4,位出现了非,BCD,码(,1010,1111,)或高,4,位的进位,CY=1,,则应在高,4,位加,6,调整。,执行十进制调整指令后,,PSW,中的,CY,表示结果的百位值,2024/9/21,30,【,例,3-24】,若(,A,),0110 1001B,,表示的,BCD,码为,(,R2,),0101 1000B,,表示的,BCD,码为,,执行指令:,ADD A,,,R2,DA A,(,A,),0010 0111B,,即,且(,CY,),1,,即正确的结果为:,127,2024/9/21,31,3.4.2,减法,带借位减法,用此组指令完成不带借位的减法,只需先清,CY,为,0,即可,CY,为,1,,表示,D7,位需借位,AC,为,1,,表示,D3,位需借位,OV,为,1,,表示,“,D6,有借位,D7,无借位,”,或,“,D7,有借位,D6,无借位,”,2024/9/21,32,【,例,3-25】,若(,A,),=C9H,,(,R2,),=54H,,(,CY,),=1,,试分析指令,SUBB A,,,R2,执行后,累加器的内容及状态标志。,(,A,):,1 1 0 0 1 0 0 1,(,201,),(,CY,):,1,(,1,),1 1 0 0 1 0 0 0,(,R2,):,0 1 0 1 0 1 0 0,(,84,),结果:,0 1 1 1 0 1 0 0,(,116,),即,:,(,A,),=,74H,(,CY,),=0,(,AC,),=0,(,OV,),=1,(,P,),=0,。,分析:,数据为无符号类型。该指令执行前,CY=1,,说明此指令不是运算的最低字节,即在此指令执行之前,一定执行过低字节的减法并产生了借位。因此,本次相减(,201-1-84=116=74H,)结果为,74H,。,2024/9/21,33,减,1,这组指令仅,DEC A,影响,P,标志。其余指令都不影响标志位的状态。,2024/9/21,34,3.4.3,乘法,仅有一条乘法指令,MUL AB,;,A,与,B,相乘,无符号,结果:,B,中为积的,高,8,位,,,A,中为积的,低,8,位,。,CY,总是被清,0,;,OV=1,表示积大于,FFH,3.4.4,除法,仅有一条除法指令,DIV AB,;,A,除以,B,无符号,结果:,A,中为商的,整数,部分,,B,中为,余数,CY,总是被清,0,;,OV=1,表示除数为,0,2024/9/21,35,3.5,逻辑运算与循环类指令(,24,条),3.5.1,逻辑与,逻辑:与、或、异或、清,0,和取反,循环:左、右移,带进位位左、右移,【,例,】,(,A,),=C3H,,(,R0,),=AAH,,执行指令,ANL A,,,R0,后,(,A,),=82H,与,操作常用于对某些,不关心位,进行,“,清,0,”,同时,“,保留,”,另一些关心位,2024/9/21,36,3.5.2,逻辑或,【,例,】,(,A,),=C3H,,(,R0,),=55H,,执行指令,ORL A,,,R0,后,(,A,),=D7H,或,操作常用于对某些,关心位,进行,“,置,1,”,不关心位保持不变,2024/9/21,37,3.5.3,逻辑异或,【,例,】,(,A,),=C3H,,(,R0,),=AAH,,执行指令,XRL A,,,R0,后,(,A,),=69H,异或,操作常用于对某些,关心位,进行,“,取反,”,不关心位保持不变,2024/9/21,38,3.5.4,逻辑清,0,和取反,3.5.5,累加器循环移位,2024/9/21,39,3.6,控制转移类指令(,17,条),3.6.1,无条件转移,短跳转,AJMP addr11,;,PC ,(,PC,),+ 2,,,PC10,0 addr11,2024/9/21,40,长跳转,LJMP addr16,;,PC addr16,相对转移,SJMP,rel,;,PC ,(,PC,),+ 2,,,PC ,(,PC,),+,rel,目标地址,rel,对应范围为 ,127,128,。,2024/9/21,41,【,例,】,若,“,NEWADD,”,为地址,1022H,,,PC,的当前值为,1000H,。执行指令,SJMP NEWADD,后,程序将转向,1022H,处执行(,rel,=20H= 1022H,1000H,2,)。解析如下:,2024/9/21,42,散转移,JMP A+DPTR,;,PC ,(,PC,),+ 1,,,PC ,(,A,),+,(,DPTR,),可完成多条判跳指令的功能,【,例,】,功能:当(,A,),=00H,时,程序将转到,ROUT0,处执行;当(,A,),=02H,时,程序将转到,ROUT1,处执行;,。,MOV DPTR,#TABLE,JMP A+DPTR,TABLE:AJMP ROUT0,AJMP ROUT1,AJMP ROUT2,AJMP ROUT3,2024/9/21,43,3.6.2,条件转移,累加器判,0,转移,比较不等转移,2024/9/21,44,减,1,不为,0,转移,2024/9/21,45,【,例,】,有一段程序如下,该程序执行后,,(,A,),=10+9+8+7+6+5+4+3+2+1=37H,MOV 23H,#0AH,CLR A,LOOPX:ADD A,23H,DJNZ 23H,LOOPX,SJMP $,2024/9/21,46,3.6.3,调用与返回,调用,指令执行时将返回地址入栈,SP,应设为合适值(默认值,07H,),2024/9/21,47,【,例,3】,若(,SP,),=07H,,标号,“,XADD,”,表示的实际地址为,0345H,,,PC,的当前值为,0123H,。 执行指令,ACALL XADD,后,:,返回地址为:(,PC,),+2=,0125H,。其低,8,位的,25H,压入堆栈的,08H,单元,其高,8,位的,01H,压入堆栈的,09H,单元,(低地址对应于低字节),。,(,PC,),=0345H,,程序转向目标地址,0345H,处执行。,2024/9/21,48,返回,RETI,专用于中断服务程序返回,它具有清除内部相应的中断状态触发器(以保证正确的中断逻辑)的功能。,3.6.4,空操作,NOP,;,PC ,(,PC,),+ 1,,,占,1,个周期,、,一个字节,2024/9/21,49,3.7,位操作类指令(,17,条),位操作是以位为单位进行的各种操作。位操作指令中的位地址有,4,种表示形式:,直接地址 (如,,0D5H,);,点操作符 (如,,0D0H.5,、,PSW.5,等);,位名称 (如,,F0,);,伪指令定义(如,,MYFLAG BIT F0,)。,以上几种形式表示的都是,PSW,中的,位,5,。,位操作指令中,位累加器要用,“,C,”,表示(注:而,CY,与具体的直接位地址,D7H,对应)。,试比较:,A,与,ACC,的关系?,2024/9/21,50,3.7.1,位传送,MOV bit,,,C,;,bit,(,CY,),MOV C,,,bit,;,CY ,(,bit,),3.7.2,位状态设置,位清,0,位置位,2024/9/21,51,3.7.3,位逻辑运算,位逻辑与,位逻辑或,位取反,2024/9/21,52,判,CY,转移,判,bit,转移,3.7.4,位判跳(条件转移),;,若(,CY,),=1,PC,(,PC,),+2+rel,否则顺次执行。,;,若(,CY,),=0;PC,(,PC,),+2+rel;,否则顺次执行。,;,(,bit,),=1,PC,(,PC,),+3+rel,否则顺次执行。,;,(,bit,),=1,PC,(,PC,),+3+rel,bit 0,否则顺次执行,;,(,bit,),=0,PC,(,PC,),+3+rel,否则顺次执行,2024/9/21,53,Thank You !,
展开阅读全文