51单片机汇编指令集
51单片机汇编程序集
1、片内RAM初始化子程序2、片外RAM初始化子程序3、片外RAM初始化子程序(双字节个单元)4、内部RAM数据复制程序5、外部RAM数据复制程序6、外部RAM数据复制程序7、外部RAM数据复制到内部RAM程序8、限幅滤波程序9、中位值滤波程序10、N点算术平均滤波11、N点加权平均滤波12、一阶加权滞后滤波程序13、双字节取补程序14、N节取补程序15、双字节无符号数加法程序16、N字节无符号数加法程序17、双字节无符号数减法程序18、N字节无符号数减法程序19、单字节无符号数乘法程序20、单字节无符号数乘法程序21、单字节无符号数乘法程序22、双字节无符号数乘法程序23、双字节无符号数乘法程序24、N字节无符号数乘法程序25、单字节无符号除法程序26、单字节无符号除法程序27、双字节无符号除法程序28、N字节无符号除法程序(组合)29、N字节无符号除法程序30、N字节数据左移程序31、原码有符号双字节减法程序32、原码有符号双字节加法程序33、原码有符号双字节乘法程序34、原码有符号双字节除法程序35、单字节顺序查找程序36、单字节顺序查找程序37、双字节字符串顺序查找程序38、双字节字符串顺序查找程序39、N字节字符串顺序查找程序40、单字节最值查找程序41、浮点数顺序查找程序42、浮点数最值查找程序43、单字节折半查找程序1.片内RAM初始化子程序IBCLR:MOV A,R0MOV R1,ACLR AIBC1:MOV@R1,AINC R1DJNZ R7,IBC1RET2.片外RAM初始化子程序EBCLR1:MOV A,ADDPLMOV DPL,AMOV A,ADDPHMOV DPH,ACLR CEBC11:MOVX@DPTR,AINC DPTRDJNZ R7,EBC11RET3.片外RAM初始化子程序(双字节个单元) EBCLR2:MOV A,ADDPLMOV DPL,AMOV A,ADDPHMOV DPH,AMOV A,R7JZ EBC21INC R6EBC21:CLR AMOVX@DPTR,AINC DPTRDJNZ R7,EBC21DJNZ R6,EBC21RET4.内部RAM数据复制程序;入口:R0,R7;占用资源:A;堆栈需求:2字节;出口:R1IBMOV:MOV A,R0ADD A,R7MOV R0,AMOV A,R1ADD A,R7MOV R1,AIBM1:DEC R0DEC R1MOV A,@R0MOV@R1,ADJNZ R7,IBM1RET5.外部RAM数据复制程序;入口:ADDPH,ADDPL,R7;占用资源:ACC;堆栈需求:2字节;出口:R0,R1EBMOV1:MOV A,ADDPLADD A,R7MOV DPL,ACLR AADDC A,ADDPHMOV DPH,AMOV A,R7ADD A,R1XCH A,R0ADDC A,#00HMOV P2,AEBM11:DEC R0CJNE R0,#0FFH,EBM12DEC P2EBM12:DEC DPLMOV A,DPLCJNE A,#0FFH,EBM13DEC DPHEBM13:MOVX A,@R0MOVX@DPTR,ADJNZ R7,EBM11RET6.外部RAM数据复制程序;入口:ADDPH,ADDPL,R6,R7 ;占用资源:ACC;堆栈需求:2字节;出口:R0,R1EBMOV2:MOV A,ADDPLADD A,R7MOV DPL,AMOV A,R6ADDC A,ADDPHMOV DPH,AMOV A,R7ADD A,R1XCH A,R0ADDC A,R6MOV P2,AMOV A,R7JZ EBM21INC R6EBM21:DEC R0CJNE R0,#0FFH,EBM22DEC P2EBM22:DEC DPLMOV A,DPLCJNE A,#0FFH,EBM23DEC DPHEBM23:MOVX A,@R0MOVX@DPTR,ADJNZ R7,EBM21DJNZ R6,EBM21RET7.外部RAM数据复制到内部RAM程序;入口:ADDPH,ADDPL,R7;占用资源:ACC;堆栈需求:2字节;出口:R0ITEMOV:MOV A,ADDPLADD A,R7MOV DPL,AMOV A,ADDPHADDC A,#00HMOV DPH,AMOV A,R0ADD A,R7MOV R0,AITEM1:DEC R0DEC DPLMOV A,DPLCJNE A,#0FFH,ITEM2DEC DPHITEM2:MOVX A,@DPTRMOV@R0,ADJNZ R7,ITEM1RET8.限幅滤波程序;入口:A,SDAT,DELTY;占用资源:B;堆栈需求:2字节;出口:AJUGFILT:MOV B,ACLR CSUBB A,SDATJNC JUGFT1CPL AINC AJUGFT1:SETB ASUBB A,#DELTYJNC JUGFT3MOV A,SDATRETJUGFT3:MOV A,BMOV SDAT,ARET9.中位值滤波程序;入口:ADDPH,ADDPL,N;占用资源:ESELSORT;堆栈需求:4字节;出口:AMEDFILT:LCALL ESELSORT MOV A,NCLR CRRC AADD A,ADDPLMOV DPL,AMOV A,ADDPHMOV DPH,AJNC MEDFT1INC DPHMEDFT1:MOVX A,@DPTR RET10.N点算术平均滤波;入口:ADDPH,ADDPL,N;占用资源:B,R3,R4;堆栈需求:2字节;出口:AAVFILT:MOV A,ADDPLMOV DPL,AMOV A,ADDPHMOV DPH,ACLR AMOV R3,AMOV R4,AMOV R7,NAVFT1:MOVX A,@DPTRINC DPTRADD A,R4MOV R4,AJNC AVFT2INC R3AVFT2:DJNZ R7,AVFT1MOV R7,NMOV R2,#00HLCALL NDIV31MOV A,R4RET11.N点加权平均滤波;入口:ADDPH,ADDPL,N;占用资源:B,R3,R4;堆栈需求:2字节;出口:AQAVFILT:CLR AMOV R3,AMOV R4,AMOV R7,NMOV P2,ADDPHMOV R1,ADDPLMOV DPTR,#QAVTAB QAVFT1:MOVC A,@A+DPTR MOV B,AMOVX A,@R1INC DPTRINC R1MUL ABADD A,R4MOV R4,AMOV A,BADDC A,R3MOV R3,ADJNZ R7,QAVFT1MOV A,R4JNB ACC.7,QAVFT2INC R3QAVFT2:MOV A,R3RETQAVTAB:DB12.一阶加权滞后滤波程序;入口:A,DELTY;占用资源:B,R3,R4;堆栈需求:2字节;出口:ABQFILT:MOV B,ACLR AMOV DPTR,#ABTABMOVC A,@A+DPTRMUL ABMOV R4,AMOV R3,BMOV A,#01HMOVC A,@A+DPTRMOV B,DELTYMUL ABADD A,R4MOV R4,AMOV A,BADDC A,R3MOV R3,AMOV A,R4JNB ACC.7,FT1INC R3FT1:MOV A,R3MOV DELTY,ARETBQTAB:DB80H,80H13.双字节取补程序/(R3R4)=(R3R4);入口:R3,R4;占用资源:ACC;堆栈需求:2字节;出口:R3,R4CMPT:MOV A,R4CPL AADD A,#01HMOV R4,AMOV A,R3CPL AADDC A,#00HMOV R3,ARET14.N节取补程序/([R0])=([R0]);入口:R0,R7;占用资源:ACC,B;堆栈需求:2字节;出口:R0NCMPTN:MOV B,R0SETB CNCPT1:MOV A,@R0CPL AADDC A,#00HMOV@R0,AINC R0DJNZ R7,NCPT1MOV R0,BRET15.双字节无符号数加法程序(R3R4+R6R7)=(R3R4) ;入口:R3,R4,R6,R7;占用资源:ACC;堆栈需求:2字节;出口:R3,R4,CFNADD:MOV A,R4ADD A,R7MOV R4,AMOV A,R3ADDC A,R6MOV R3,ARET16.N字节无符号数加法程序([R0]+[R1])=([R0]);入口:R0,R1,R7;占用资源:ACC,B;堆栈需求:2字节;出口:R0,CFNADDN:MOV B,R0CLR CNADN1:MOV A,@R0ADDC A,@R1MOV@R0,AINC R0INC R1DJNZ R7,NADN1MOV R0,BRET17.双字节无符号数减法程序(R3R4-R6R7)=(R3R4) ;入口:R3,R4,R6,R7;占用资源:ACC;堆栈需求:2字节;出口:R3,R4NSUB:MOV A,R4CLR CSUBB A,R7MOV R4,AMOV A,R3SUBB A,R6MOV R3,ARET18.N字节无符号数减法程序([R0]-[R1])=([R0]);入口:R0,R1,R7;占用资源:ACC,B;堆栈需求:2字节;出口:R0,CFNSUBN:MOV B,R0MOV R7,NCLR CNSUBN1:MOV A,@R0SUBB A,@R1MOV@R0,AINC R0INC R1DJNZ R7,NSUBN1MOV R0,BRET19.单字节无符号数乘法程序(R3R4*R7)=(R2R3R4);入口:R3,R4,R7;占用资源:ACC,B;堆栈需求:2字节;出口:R2,R3,R4NMUL21:MOV A,R4MOV B,R7MUL ABMOV R4,AMOV A,BXCH A,R3MOV B,R7MUL ABADD A,R3MOV R3,ACLR AADDC A,BMOV R2,ACLR OVRET20.单字节无符号数乘法程序(R2R3R4*R7)=(R5R2R3R4) ;入口:R2,R3,R4,R6,R7;占用资源:ACC,B;堆栈需求:2字节;出口:R5,R2,R3,R4NMUL31:MOV A,R4MOV B,R7MOV R4,AMOV A,BXCH A,R3MOV B,R7MUL ABADD A,R3MOV R3,ACLR AADDC A,BXCH A,R2MOV B,R7MUL ABADD A,R2MOV R2,ACLR AADDC A,BMOV R5,ACLR OVRET21.单字节无符号数乘法程序(R5R2R3R4*R7)=(R7R5R2R3R4) ;入口:R5,R2,R3,R4,R7;占用资源:ACC,B;堆栈需求:2字节;出口:R7,R5,R2,R3,R4NMUL41:MOV A,R4MOV B,R7MUL ABMOV R4,AMOV A,BXCH A,R3MOV B,R7MUL ABADD A,R3MOV R3,ACLR AADDC A,BMOV B,R7MUL ABADD A,R2MOV R2,ACLR AADDC A,BXCH A,R5MOV B,R7MUL ABADD A,R5MOV R5,ACLR AADDC A,BMOV R7,ACLR OVRET22.双字节无符号数乘法程序(R3R4*R6R7)=(R5R2R3R4) ;入口:R3,R4,R6,R7;占用资源:ACC,B;堆栈需求:2字节;出口:R5,R2,R3,R4NMUL22:MOV A,R4MOV B,R7MUL ABXCH A,R4MOV R5,BMOV B,R6MUL ABADD A,R5MOV R5,ACLR AADDC A,BMOV R2,AMOV A,R3MOV B,R7MUL ABMOV R5,AMOV A,BADDC A,R2MOV R2,ACLR AADDC A,#00HXCH A,R3MOV B,R6MUL ABADD A,R2MOV R2,AMOV A,BADDC A,R3XCH A,R5MOV R3,ACLR OVRET23.双字节无符号数乘法程序(R2R3R4*R6R7)=(R1R5R2R3R4) ;入口:R2,R3,R4,R6,R7;占用资源:ACC,B;堆栈需求:2字节;出口:R1,R5,R2,R3,R4NMUL32:MOV A,R4MOV B,R7MUL ABXCH A,R4MOV R5,BMOV B,R6MUL ABADD A,R5MOV R5,ACLR AADDC A,BMOV R1,AMOV A,R3MOV B,R7ADD A,R5 MOV R5,A MOV A,B ADDC A,R1 MOV R1,A CLR A ADDC A,#00H XCH A,R3 MOV B,R6 MUL AB ADD A,R1 MOV R1,A MOV A,B ADDC A,R3 XCH A,R5 MOV R3,A MOV A,R2 MOV B,R7 MUL AB ADD A,R1 MOV R1,A MOV A,B ADDC A,R5 MOV R5,A CLR A ADDC A,#00H XCH A,R2 MOV B,R6 MUL AB ADD A,R5 MOV R5,A MOV A,B ADDC A,R2 XCH A,R1 MOV R2,A CLR OVRET24.N字节无符号数乘法程序([R0]*[R1])=([R0]) ;入口:R0,R1,M,N;占用资源:ACC,B,R2,R5,R6,R7,NCNT;堆栈需求:2字节;出口:R0NMULMN:MOV A,MADD A,R0MOV R5,AXCH A,R1XCH A,R5ADD A,NXCH A,R0MOV R6,AMOV B,MMOV NCNT,BNMLMN1:DEC R0DEC R1CLR AXCH A,@R1MOV@R0,ADJNZ NCNT,NMLMN1MOV NCNT,BNMLMN2:CLR AXCH A,@R0MOV R2,AMOV A,R6MOV R0,AMOV A,R5MOV R1,AMOV R7,NCLR CNMLMN3:MOV A,R2MOV B,@R1INC R1MUL ABADDC A,@R0MOV@R0,AINC R0MOV A,BADDC A,@R0MOV@R0,ADJNZ R7,NMLMN3INC R0INC R6DJNZ NCNT,NMLMN2MOV A,R0CLR CSUBB A,MSUBB A,NMOV R0,ARET25.单字节无符号除法程序(R2R3R4/R7)=(R2)R3R4余数R7 ;入口:R2,R3,R4,R7;占用资源:ACC,B,F0;堆栈需求:3字节;出口:(R2),R3,R4,R7,OVNDIV31:MOV A,R2MOV B,R7DIV ABPUSH AMOV R2,BMOV B,#10HNDV311:CLR CMOV A,R4RLC AMOV R4,AMOV A,R3RLC AMOV R3,AMOV A,R2RLC AMOV R2,AMOV F0,CCLR CSUBB A,R7JB F0,NDV312JC NDV313NDV312:MOV R2,AINC R4NDV313:DJNZ B,NDV311POP ACLR OVJZ NDV314SETB OVNDV314:XCH A,R2MOV R7,ARET26.单字节无符号除法程序(R5R2R3R4/R7)=(R5)R2R3R4余数R7 ;入口:R2,R3,R4,R7;占用资源:ACC,B,F0;堆栈需求:3字节;出口:(R5),R2,R3,R4,R7,OVNDIV41:MOV A,R5MOV B,R7DIV ABPUSH AMOV R5,BMOV B,#18HNDV411:CLR CMOV A,R4RLC AMOV R4,AMOV A,R3RLC AMOV R3,AMOV A,R2RLC AMOV R2,AMOV A,R5RLC AMOV R5,AMOV F0,CCLR CSUBB A,R7JB F0,NDV412JC NDV413NDV412:MOV R5,AINC R4NDV413:DJNZ B,NDV411POP ACLR OVJZ NDV414SETB OVNDV414:XCH A,R5MOV R7,ARET27.双字节无符号除法程序(R5R2R3R4/R6R7)=(R2)R3R4余数R6R7 ;入口:R5,R2,R3,R4,R6,R7;占用资源:ACC,B,F0;堆栈需求:4字节;出口:(R2),R3,R4,R6,R7,OVNDIV42:MOV A,R1PUSH AMOV B,#00HNDV421:MOV A,R2CLR CSUBB A,R7MOV R1,AMOV A,R5SUBB A,R6JC NDV422MOV R5,AMOV A,R1MOV R2,AINC BSJMP NDV421NDV422:PUSH BMOV B,#10HNDV423:CLR CMOV A,R4RLC AMOV R4,AMOV A,R3RLC AMOV R3,AMOV A,R2RLC AMOV R2,AXCH A,R5RLC AXCH A,R5MOV F0,CCLR CSUBB A,R7MOV R1,AMOV A,R5SUBB A,R6JB F0,NCV424JC NDV425NCV424:MOV R5,AMOV A,R1MOV R2,AINC R4NDV425:DJNZ B,NDV423 POP ACLR OVJNZ NDV426SETB OVNDV426:XCH A,R2MOV R7,AMOV A,R5MOV R6,APOP AMOV R1,ARET28.N字节无符号除法程序(组合)([R0]/[R1])=([R0]);入口:R0,R1,M,N;占用资源:ACC,R2,R3,R4,R5,R7,NCNT,F0,NADDN,NSUBBN,NRLCN ;堆栈需求:4字节;出口:R0;NDIVMN:MOV A,MCLR CSUBB A,NMOV NCNT,AADD A,R0MOV R4,AXCH A,R0MOV R3,AMOV A,R1MOV R5,AMOV R2,#00HNDVMN1:MOV R7,NLCALL NSUBNMOV A,R5MOV R1,AJC NDVMN2INC R2SJMP NDVMN1NDVMN2:MOV R7,NLCALL NADDNMOV A,NCNTSWAP ARR AMOV NCNT,ANDVMN3:MOV A,R3MOV R0,AMOV R7,MLCALL NRLCNMOV F0,CMOV A,R4MOV R0,AMOV A,R5MOV R1,AMOV R7,NLCALL NSUBNJB F0,NDVMN4JC NDVMN5NDVMN4:MOV A,R3MOV R0,AINC@R0SJMP NDVMN6NDVMN5:MOV A,R5MOV R1,AMOV R7,NLCALL NADDNNDVMN6:DJNZ NCNT,NDVMN3MOV A,R4MOV R1,AMOV A,R2MOV@R1,AMOV A,R3MOV R0,ARET29.N字节无符号除法程序(集成)([R0]/R[1])=([R0]) ;入口:R0,R1,M,N;占用资源:ACC,R2,R3,R4,R5,R7,F0;堆栈需求:2字节;出口:R0NDIVMN:MOV A,MCLR CSUBB A,NMOV B,AADD A,R0MOV R4,AXCH A,R0MOV R3,AMOV A,R1MOV R5,AMOV R2,#00H NDVMN1:MOV R7,NCLR CNDVMN2:MOV A,@R0 SUBB A,@R1MOV@R0,AINC R0INC R1DJNZ R7,NDVMN2MOV A,R4MOV R0,AMOV A,R5MOV R1,AJC NDVMN3INC R2SJMP NDVMN1 NDVMN3:MOV R7,NCLR CNDVMN4:MOV A,@R0 ADDC A,@R1MOV@R0,AINC R0INC R1DJNZ R7,NDVMN4MOV A,#08HMUL ABMOV B,A NDVMN5:MOV A,R3MOV R0,AMOV R7,MCLR CNDVMN6:MOV A,@R0 RLC AMOV@R0,AINC R0DJNZ R7,NDVMN6MOV F0,CMOV R0,AMOV A,R5MOV R1,AMOV R7,NCLR CNDVMN7:MOV A,@R0SUBB A,@R1MOV@R0,AINC R0INC R1DJNZ R7,NDVMN7JB F0,NDVMNBJC NDVMN8 NDVMNB:MOV A,R3MOV R0,AINC@R0SJMP NDVMNA NDVMN8:MOV R7,NMOV A,R4MOV R0,AMOV A,R5MOV R1,ACLR CNDVMN9:MOV A,@R0ADDC A,@R1MOV@R0,AINC R0INC R1DJNZ R7,NDVMN9 NDVMNA:DJNZ B,NDVMN5 MOV A,MCLR CSUBB A,NADD A,R3MOV R1,AMOV A,R2MOV A,R3MOV R0,ARET30.N字节数据左移程序RLC([R0])=(CF[R0]);入口:R0,R7;占用资源:ACC,B;堆栈需求:2字节;出口:R0,CFNRLCN:MOV B,R0CLR CNRLN1:MOV A,@R0RLC AMOV@R0,AINC R0DJNZ R7,NRLN1MOV R0,BRET31.原码有符号双字节减法程序(R3R4-R6R7)=R3R4 ;入口:R3,R4,R6,R7;占用资源:ACC,DADD;堆栈需求:6字节;出口:R3,R4,OVDSUB:MOV A,R6CPL ACC.7MOV R6,ALCALL DADDRET32.原码有符号双字节加法程序(R3R4+R6R7)=R3R4 ;入口:R3,R4,R6,R7;占用资源:ACC,SR0,NADD,NSUB,CMPT;堆栈需求:4字节;出口:R3,R4,OVDADD:MOV A,R3MOV C,ACC.7MOV SR0,CXRL A,R6MOV A,R3CLR ACC.7MOV R3,AMOV A,R6CLR ACC.7MOV R6,AJC DAB2LCALL NADDMOV A,R3JB ACC.7,DABEDAB1:MOV C,SR0MOV ACC.7,CMOV R3,ACLR OVRETDABE:SETB OVRETDAB2:LCALL NSUBMOV A,R3JNB ACC.7,DAB1LCALL CMPTCPL SR0SJMP DAB133.原码有符号双字节乘法程序(R3R4*R6R7)=(R5R2R3R4) ;入口:R3,R4,R6,R7;占用资源:ACC,SR0,NMUL22;堆栈需求:4字节;出口:R5,R2,R3,R4IMUL:MOV A,R3XRL A,R6MOV C,ACC.7MOV SR0,CMOV A,R3CLR ACC.7MOV R3,AMOV A,R6MOV R6,ALCALL NMUL22MOV A,R5MOV C,SR0MOV ACC.7,CMOV R5,ARET34.原码有符号双字节除法程序(R5R2R3R4/R6R7)=(R3R4)余数(R6R7) ;入口:R5,R2,R3,R4;占用资源:ACC,SR0,NDIV42;堆栈需求:6字节;出口:R3,R4,R6,R7,OVIDIV:MOV A,R5XRL A,R6MOV C,ACC.7MOV SR0,CMOV A,R5CLR ACC.7MOV R5,AMOV A,R6CLR ACC.7MOV R6,ALCALL NDIV42MOV A,R3JB ACC.7,IDIVEJB OV,IDIVEMOV C,SR0MOV ACC.7,CMOV R3,ARETIDIVE:SETB OVRET35.单字节顺序查找程序;入口:R0,R1,A,R7;占用资源:B;堆栈需求:2字节;出口:R0,R1,AFINDB1:MOV B,AMOV DPL,R1MOV DPH,R0FINDB11:MOVX A,@DPTR CJNE A,B,FINDB12MOV R1,DPLMOV R0,DPHCLR ARETFINDB12:INC DPTRDJNZ R7,FINDB11MOV A,#0FFHRET36.单字节顺序查找程序;入口:R0,R1,A,R6,R7;占用资源:B;堆栈需求:2字节;出口:R0,R1,AFINDB2:MOV B,AMOV DPL,R1MOV DPH,R0MOV A,R7JZ FINDB21INC R6FINDB21:MOVX A,@DPTR CJNE A,B,FINDB22MOV R1,DPLMOV R0,DPHCLR ARETFINDB22:INC DPTRDJNZ R7,FINDB21DJNZ R6,FINDB21MOV A,#0FFHRET37.双字节字符串顺序查找程序;入口:R0,R1,R3,R4,R7;占用资源:ACC,B;堆栈需求:2字节;出口:R0,R1,AFINDS1:MOV DPL,R1MOV DPH,R0FINDS11:MOVX A,@DPTRINC DPTRCLR CSUBB A,R4JNZ FINDS12MOVX A,@DPTRSUBB A,R3JNZ FINDS12MOV A,DPLCLR CSUBB A,#01HMOV R1,AMOV A,DPHSUBB A,#00HMOV R0,ACLR ARETFINDS12:DJNZ R7,FINDS11MOV A,#0FFHRET38.双字节字符串顺序查找程序;入口:R0,R1,R3,R4,R6,R7;占用资源:ACC,B;堆栈需求:2字节;出口:R0,R1,AFINDS2:MOV DPL,R1MOV DPH,R0MOV A,R7JZ FINDS21INC R6FINDS21:MOVX A,@DPTRINC DPTRCLR CSUBB A,R4JNZ FINDS22MOVX A,@DPTRSUBB A,R3JNZ FINDS22MOV A,DPLCLR CSUBB A,#01HMOV R1,AMOV A,DPHSUBB A,#00HMOV R0,ACLR ARETFINDS22:DJNZ R7,FINDS21DJNZ R6,FINDS21MOV A,#0FFHRET39.N字节字符串顺序查找程序;入口:ADDPH,ADDPL,R0,R6,R7,N ;占用资源:ACC,B,R2,NCNT;堆栈需求:2字节;出口:ADDPH,ADDPL,A FINDN:MOV A,R0MOV R2,AMOV A,ADDPLMOV DPL,AMOV A,ADDPHMOV DPH,AMOV A,R7JZ FINDN1INC R6FINDN1:MOV A,R2MOV R0,AMOV NCNT,AFINDN2:MOVX A,@DPTRCLR CSUBB A,@R0JNZ FINDN3INC DPTRINC R0DJNZ NCNT,FINDN2MOV A,DPLCLR CSUBB A,NMOV ADDPL,AMOV A,DPHSUBB A,#00HMOV ADDPH,ACLR ARETFINDN3:CLR CMOV A,R0SUBB A,R2JNZ FINDN4INC DPTRFINDN4:DJNZ R7,FINDN1DJNZ R6,FINDN1MOV A,#0FFHRET40.单字节最值查找程序;入口:R0,R1,R6,R7;占用资源:ACC,B;堆栈需求:2字节;出口:R0(最大值),R1(最小值),R2,R3,R4,R5 FMAMIB:MOV DPL,R1MOV DPH,R0MOVX A,@DPTRMOV R0,AMOV R1,AMOV R3,AMOV R5,AMOV A,DPHMOV R2,AMOV R4,AMOV A,R7JZ FMMB1INC R6FMMB1:MOVX A,@DPTR MOV B,ASETB CSUBB A,R0JC FMMB2MOV R0,BMOV R3,DPLMOV R2,DPHSJMP FMMB3FMMB2:MOV A,BCLR CSUBB A,R1JNC FMMB3MOV R1,BMOV R5,DPLMOV R4,DPHFMMB3:INC DPTRDJNZ R7,FMMB1DJNZ R6,FMMB1RET41.浮点数顺序查找程序;入口:R0,R1,R2,R3,R4,R6,R7 ;占用资源:B,NCNT,FCMP;堆栈需求:2字节;出口:R0,R1,AFINDF:MOV DPL,R1MOV DPH,R0MOV A,R7MOV NCNT,R6JZ FINDF1INC NCNTFINDF1:MOVX A,@DPTRINC DPTRMOV R5,AMOVX A,@DPTRINC DPTRMOV R6,AMOVX A,@DPTRINC DPTRMOV R7,ALCALL FCMPJNZ FINDF2MOV A,DPLCLR CSUBB A,#03HMOV R1,AMOV A,DPHSUBB A,#00HMOV R0,ACLR ARETFINDF2:DJNZ B,FINDF1DJNZ NCNT,FINDF1MOV A,#0FFHRET42.浮点数最值查找程序;入口:ADDPH,ADDPL,R6,R7;占用资源:ACC,B,NCNT,ITEMOV,EBMOV,MOVB,MOVR1,FCMP ;堆栈需求:5字节;出口:[R0](最大值),[R1](最小值),R2,R3,R4,R5FMAMIF:MOV A,ADDPLMOV R3,AMOV R5,AMOV DPL,AMOV A,ADDPHMOV R2,AMOV R4,AMOV DPH,AMOV B,R7MOV R7,#03HLCALL ITEMOVMOV R7,#03HLCALL IBMOVMOV A,BJZ FMMF1INC NCNT FMMF1:PUSH BMOVX A,@DPTRINC DPTRMOV R2,AMOVX A,@DPTRINC DPTRMOV R3,AMOVX A,@DPTRINC DPTRMOV R4,ALCALL MOVR1LCALL FCMPJNC FMMF2MOV A,R0XCH A,R1MOV R0,ALCALL MOVBMOV R5,DPLMOV R4,DPHMOV A,R0XCH A,R1MOV R0,ASJMP FMMF3 FMMF2:MOV A,R0XCH A,R1MOV R0,ALCALL MOVR1LCALL FCMPMOV A,R0XCH A,R1MOV R0,AJZ FMMF3JC FMMF3LCALL MOVBMOV R3,DPLMOV R2,DPH FMMF3:POP BDJNZ B,FMMF1DJNZ NCNT,FMMF1RET43.单字节折半查找程序;入口:A,R0,R1,R6,R7;占用资源:B,R2;堆栈需求:2字节;出口:R0,R1 SEARCHB:MOV B,AMOV A,R1ADD A,R7MOV R7,AMOV A,R0ADDC A,R6MOV R6,AMOV A,R7SUBB A,#01HMOV R7,AJNC SECH1DEC R6SECH1:MOV A,R7CLR CSUBB A,R1MOV A,R6SUBB A,R0JNC SECH2MOV A,#0FFHRETSECH2:MOV A,R7ADD A,R1MOV R2,AMOV A,R6ADDC A,R0RRC AMOV DPH,AMOV A,R2RRC AMOV DPL,AMOVX A,@DPTRCLR CSUBB A,BJNC SECH3INC DPTRMOV R0,DPHMOV R1,DPLSJMP SECH1 SECH3:JZ SECH5MOV A,DPLSUBB A,#01HMOV R7,AJNC SECH4MOV R6,DPHDEC R6SECH4:SJMP SECH1 SECH5:MOV R0,DPH MOV R1,DPLCLR ARET。
51单片机汇编语言指令集
51汇编语言指令集符号定义表符号含义Rn R0~R7寄存器n=0~7Direct 直接地址,内部数据区的地址RAM(00H~7FH)SFR(80H~FFH) B,ACC,PSW,IP,P3,IE,P2,SCON,P1,TCON,P0@Ri 间接地址Ri=R0或R1 8051/31RAM地址(00H~7FH) 8052/32RAM地址(00H~FFH) #data 8位常数#data16 16位常数Addr16 16位的目标地址Addr11 11位的目标地址Rel 相关地址bit 内部数据RAM(20H~2FH),特殊功能寄存器的直接地址的位指令介绍指令字节周期动作说明算数运算指令1.ADD A,Rn 1 1 将累加器与寄存器的内容相加,结果存回累加器2.ADD A,direct 2 1 将累加器与直接地址的内容相加,结果存回累加器3.ADD A,@Ri 1 1 将累加器与间接地址的内容相加,结果存回累加器4.ADD A,#data 2 1 将累加器与常数相加,结果存回累加器5.ADDC A,Rn 1 1 将累加器与寄存器的内容及进位C相加,结果存回累加器6.ADDC A,direct 2 1 将累加器与直接地址的内容及进位C相加,结果存回累加器7.ADDC A,@Ri 1 1 将累加器与间接地址的内容及进位C相加,结果存回累加器8.ADDC A,#data 2 1 将累加器与常数及进位C相加,结果存回累加器9.SUBB A,Rn 1 1 将累加器的值减去寄存器的值减借位C,结果存回累加器10.SUBB A,direct 2 1 将累加器的值减直接地址的值减借位C,结果存回累加器11.SUBB A,@Ri 1 1 将累加器的值减间接地址的值减借位C,结果存回累加器12.SUBB A,#data 2 1 将累加器的值减常数值减借位C,结果存回累加器13.INC A 1 1 将累加器的值加114.INC Rn 1 1 将寄存器的值加l15.INC direct 2 1 将直接地址的内容加116.INC @Ri 1 1 将间接地址的内容加117.INC DPTR 1 1 数据指针寄存器值加1说明:将16位的DPTR加1,当DPTR的低字节(DPL)从FFH溢出至00H时,会使高字节(DPH)加1,不影响任何标志位18.DEC A 1 1 将累加器的值减119.DEC Rn 1 1 将寄存器的值减120.DEC direct 2 1 将直接地址的内容减121.DEC @Ri 1 1 将间接地址的内容减122.MUL AB 1 4 将累加器的值与B寄存器的值相乘,乘积的低位字节存回累加器,高位字节存回B寄存器说明:将累加器A和寄存器B内的无符号整数相乘,产生16位的积,低位字节存入A,高位字节存入B寄存器。
51单片机汇编指令及伪指令小结
51单片机汇编指令及伪指令小结51单片机汇编指令及伪指令小结51单片机是一种广泛应用的基于汇编语言的微控制器。
它的汇编指令集非常丰富,包括了基本的数据处理、逻辑运算、分支跳转、数据存储和输入输出等指令。
汇编指令的灵活运用可以实现各种复杂的功能,因此掌握51单片机的汇编指令是开发嵌入式系统的重要基础。
1. 基本数据处理指令51单片机汇编指令集包括了一系列基本的数据处理指令,如加法(add)、减法(sub)、乘法(mul)、除法(div)等。
这些指令用于实现对数据的基本运算操作。
2. 逻辑运算指令逻辑运算指令用于实现各种逻辑运算,如与(and)、或(or)、非(not)、异或(xor)等。
这些指令通常用于处理数据的开关控制、状态判断等功能。
3. 分支跳转指令分支跳转指令用于实现程序的流程控制。
常用的分支跳转指令包括无条件跳转(jmp)、条件跳转(jz、jnz、jc、jnc等)、循环跳转(loop)等。
这些指令可以根据条件和需求设置程序的执行流程,实现各种循环、分支等功能。
4. 数据存储指令数据存储指令用于实现数据的存储和加载操作。
常用的存储指令包括将数据存储到寄存器或内存中(mov)、将数据从寄存器或内存中加载(ld)等。
这些指令通过对数据的存储和加载,实现对数据的读写操作。
5. 输入输出指令输入输出指令用于实现与外设的数据通信。
常用的输入输出指令包括从端口输入(instr)、输出到端口(outstr)等。
这些指令通过与外部设备的数据交互,实现嵌入式系统与外设的连接。
除了以上的基本指令外,51单片机还提供了一些伪指令,用于程序的组织和调试。
这些伪指令包括宏指令、条件编译指令、调试指令等。
1. 宏指令宏指令是一种通过宏展开的方式来扩展汇编代码的指令。
它通过提前定义一些宏,并在代码中使用这些宏来生成更复杂的汇编代码。
宏指令的好处是可以简化代码的书写,使得程序的逻辑更清晰。
2. 条件编译指令条件编译指令用于根据编译时的条件来选择性地编译代码。
51单片机汇编指令大全
51汇编指令大全Rn: 表示当前寄存器区的8个工作寄存器R0~R7Ri: 表示当前寄存器区的R0或R1,可作地址指针即间址寄存器(i=0或1)@: 为间接寄存器或基址寄存器的前缀.Direct: 表示8位内部数据存储单元的地址.它可以是内部RAM的单元地址0~127.特殊功能寄存器SFR的地址(128~255)或名称,A: 累加器ACC.B: .特殊功能寄存器B,用于MUL和DIV指令中.C: 进位位Cy.#data: 表示包含在指令中的单字节(8位)立即数.如果用16位进制表示,后缀字母为”H”,数据范围00~0FFH,不得一字母开头;如果用16进制表示无须任何后缀,但必须在0~255之间.#data16: 表示包含在指令中的双字节(16位)立即数.Adda16: 表示16位的目的地址.用于LCALL和LJMP指令中,目的地址范围是从0000H~FFFFH的整个64KB存储地址空间.Adda11: 表示11位的目的地址.用于ACALL和AJMP的指令中,目的地址必须和下一条指令第一个字节同处一页.Rel: 表示8位带符号的相对偏移量.用语SJMP和所有的条件转移指令中.偏移量相对于下一条指令的第一个字节计算,在-128~+127范围内取值.DPTR: 为数据指针,可用作16位的地址寄存器./: 加在位操作的前面,表示对该位进行非运算.bit: 表示内部可寻址位或特殊功能寄存器中的直接寻址位.“(x): 寄存器或地址单元中的内容.((x)): 有x见解寻址的单元中的内容.<-: 表示将箭头右边的内容传送至箭头的左边.$: 当前指令的地址.单片机指令系统(一) 内部数据传送指令(1) 以累加器A为目的的传送指令:MOV A, #data ;(A)<-dataMOV A, direct ;(A)<-(direct)MOV A, Rn ;(A)<-(Rn)MOV A, @Ri ;(A)<- ((Ri))(2) 以通用寄存器Rn为目的的传送指令:MOV Rn, A ;(Rn)<-(A)MOV Rn, direct ; (Rn)<(direct)-MOV Rn, #data: ; (Rn)<-(data)(3) 以直接地址为目的的传送指令:MOV direct, A ;(direct)<-(A)MOV direct, Rn ; (direct)<-(Rn)MOV direct, direct2 ; (direct)<-(direct2)MOV direct, @Ri ; (direct)<-((Rn))MOV direct, #data ; (direct)<-data(4) 以寄存器间接地址为目的的传送指令:MOV @Ri, A ;((Ri))<-(A)MOV @Ri, direct ;((Ri))<-(direct)MOV @Ri, #data ;((Ri))<-data(二) 数据指针赋值指令(16位数据传送指令)MOV DPTR, #data16;(三) 片外数据传送指令MOVX A, @Ri ;(A)<-((Ri))片外MOVX A, @DPTR ;(A)<-((DPTR))片外MOVX @Ri, A ;((Ri))片外<-(A)MOVX @DPTR, A ;((DPTR))片外<-(A)(四) ROM数据访问指令(查表指令)MOVC A, @A+DPTR ;(A)<-((A)+(DPTR))romMOVC A, @A+PC ;(PC)<-(PC)+1,(A)<-((A)+(PC))rom (五) 堆栈操作指令PUSH direct ;(SP)<-(SP)+1,(SP)<-(direct)堆栈指针先加1,将数据压入栈顶POP direct ;(direct)<-(SP),(SP)<-(SP)-1将数据从栈顶弹出存入direct,SP再减1(六) 数据交换指令(1)整字节(8位)交换指令:XCH A, Rn ;A和Rn中的数互换XCH A, direct ;A和direct单元中的数互换XCH A, @Ri ;A和Ri间址单元中的数互换(2)半字节交换指令:XCHD A, @Ri ;A的低4位Ri间接单元的低4位互换,高4位不动(3)累加器高低半字节交换指令:SWAP A, ;A的高4位(D7~D4)和低4位(D3~D0)互换(七) 加法指令(1)不带Cy加法指令:ADD A, Rn ;(A)<-(A)+(Rn)ADD A, direct ; (A)<-(A)+(direct)ADD A, @Ri ; (A)<-(A)+((Ri))ADD A, #data ; (A)<-(A)+data(2)带进位加法指令:ADDC A, Rn ;(A)<-(A) +Cy+(Rn)ADDC A, direct ; (A)<-(A) +Cy+(direct)ADDC A, @Ri ; (A)<-(A) +Cy+((Ri))ADDC A, #data ; (A)<-(A) +Cy+data(3)加1指令:INC A, ;(A)<-(A)+1INC Rn ;(Rn)<-(Rn)+1INC @Ri ;((Ri))<-((Ri))+1INC direct ;(direct)<-(direct)+1INC DPTR ;(FPTR)<-(DPTR)+1(八) 减法指令(1)带进位减法指令:SUBB A, Rn ;(A)<-(A) -Cy-(Rn)SUBB A, direct ; (A)<-(A) -Cy-(direct)SUBB A, @Ri ; (A)<-(A) -Cy-((Ri))SUBB A, #data ; (A)<-(A) -Cy-data(2)减1指令:DEC A ;(A)<-(A)-1DEC direct ;(direct)<-(durect)-1DEC Rn ;(Rn)<-(Rn)-1DEC @Ri ;((Ri))<-((Ri))-1(九) 乘除指令(1)乘法指令MUL AB ;(B)(A)<-(A)*(B)指令功能是把累加器A和特殊功能寄存器B中两个8位无符号整数相乘,并把积的高8位字节存入B寄存器,低8位字节存入累加器A.(2)除法指令DIV AB ;A/B,商存入A,余数存入B指令的功能是把累加器A中的8位无符号整数除以寄存器B中的8位无符号整数商的整数部分存入累加器A中,余数保留在B中.(十) 十进制调整指令DA A(十一) 逻辑运算指令(1) 逻辑与运算指令:ANL A, Rn ;(A)<-(A)∧(Rn)ANL A, direct ; (A)<-(A)∧(direct)ANL A, @Ri ; (A)<-(A)∧((Ri))ANL A, #data ; (A)<-(A)∧dataANL direct, A ;(direct)<-(A)∧(direct)ANL direct, #data;(direct<-(direct)∧data(2) 逻辑或运算指令:ORL A, Rn ;(A)<-(A)∨(Rn)ORL A, direct ; (A)<-(A)∨(direct)ORL A, @Ri ; (A)<-(A)∨((Ri))ORL A, #data ; (A)<-(A)∨dataORL direct, A ;(direct)<-(A)∨(direct)ORL direct, #data; (direct)<-(direct)∨data(3) 逻辑异或运算指令:XRL A, Rn ;(A)<-(A)⊙(Rn)XRL A, direct ; (A)<-(A)⊙(direct)XRL A, @Ri ; (A)<-(A)⊙((Ri))XRL A, #data ; (A)<-(A)⊙dataXRL direct, A ;(direct)<-(A)⊙(direct)XRL direct, #data; (direct)<-(direct)⊙data(4) 累加器清0和去反指令CLR A ;(A)<-0 (累加器清0指令)CLR A ;(A)<-(A) (累加器取反指令)(5) 累加器移位指令:不带进位Cy循环左移: RL A ;Dn+1<-Dn,D0<-D7D7D6D5D4D3D2D1D0不带进位Cy循环右移: RR A :Dn+1->Dn,D0<-D7D7D6D5D4D3D2D1D0带进位Cy循环左移: RLC A ;Cy<-D7,Dn+1<-Dn,D0<-CyD7D6D5D4D3D2D1D0带进位Cy循环右移: RRC A ;Cy->D7,Dn+1->Dn,D0->Cy(十二) 控制转移指令[1] 无条件转移指令:(1) 长转移指令LJMP addr16 ;(PC)<-addr16(2) 绝对转移指令AJMP addr11 ;(PC)<-(PC)+2,(PC)10~0<-addr11(3) 短转移指令SJMP rel ;(PC)<-(PC)+2+rel(4) 变址寻址转移指令JMP @A+DPTR ;(PC)<-(A)+(DPTR)[2] 条件转移指令:(1) 累加器判0转移指令:JZ rel ;如果(A)=0,跳转到目标语句,否则顺序执行JNZ rel ;如果(A)≠0,跳转到目标语句,否则顺序执行(2) 比较转移指令:CJNZ A, #data, rel ;如果(A)≠data,则跳转到目标语句,否则程序顺序执行CJNZ A direct, rel ; 如果(A)≠(direct),则跳转到目标语句,否则程序顺序执行CJNZ Rn #data, rel ; 如果(A)≠data,则跳转到目标语句,否则程序顺序执行CJNZ @Ri #data, rel ; 如果(A)≠data,则跳转到目标语句,否则程序顺序执行(3) 循环控制转移指令:DJNZ Rn, rel ;(Rn)先减1,如减1后(Rn)≠0,则跳转到目标语句;否则顺序执行DJNZ firect, rel ; (direct)先减1,如减1后(direct)≠0,则跳转到目标语句;否则顺序执行(十三) 子程序调用和返回指令(1) 绝对调用指令:ACALL addr11(2) 长调用指令:LCALL addr16(3) 返回指令:RET 子程序返回RETI 中断服务程序返回(十四) 空操作指令NOP 空操作指令是一条特殊指令,单片机在执行该指令时不进行任何操作,只是消耗1个机器周期的时间,所以该指令长用于延时程序.软件陷阱程序等(十五) 位操作类指令(1) 位传送指令:MOV C,bit ;(Cy)<-(bit),bit位的状态不变MOV bit,C ; (bit) <- (Cy),Cy位的状态不变(2) 位置位和复位指令:SETB C ;(Cy)<-1SETB bit ;(bit)<-1CLR C ;(Cy)<-0CLR bit ;(bit)<-0(3) 位运算指令:ANL C,bit ;(Cy)<-(Cy)∧(bit),Cy位和bit位相与,结果赋给Cy ANL C,/bit ;(Cy)<-(Cy)∧(bit),Cy位和bit位相与,结果赋给CyORL C,bit ;(Cy)<-(Cy)∨(bit),Cy位和bit位相或,结果赋给Cy ORL C,/bit ;(Cy)<-(Cy) ∨(bit),Cy位和bit位相或,结果赋给CyCPL C ; (Cy)<-(Cy),Cy位取反CPL bit ;(bit)<-(bit),bit位取反(4) 位测试转移指令:(1) 以Cy位状态为条件的转移指令JC rel ;如果Cy位=1,跳转到目标语句,否则顺序执行JNC rel ;如果Cy位=0,跳转到目标语句,否则顺序执行(2) 以指定位状态为条件的转移指令:JB bit, rel ;如果bit=1,跳转到目标语句,否则顺序执行JNB bit, rel ;如果bit=0,跳转到目标语句,否则顺序执行JBC bit, rel ;如果bit=1,跳转到目标语句,同时将bit位清0;否则顺序执行。
51单片机汇编语言指令教程汇集
51单片机汇编语言指令教程汇集
1.MOV
MOV指令把源操作数的值复制到目的操作数。
格式如下:
MOV dest,src
dest :用于存储源操作数值的目的操作数。
src :用于取源操作数值的源操作数。
MOV指令可以把源操作数的值复制到目的操作数里,其中它的源操作数和目的操作数可以是内存单元,寄存器或立即数。
2.MVI
MVI指令把单字节立即数的值复制到其中一寄存器或内存单元。
格式如下:
MVI dest,data
dest :用于存放单字节立即数值的目的操作数。
data :用于取立即数值的立即数。
MVI指令可以把数据(data)复制到dest所指向的存储单元。
它的目的操作数可以是内存单元或寄存器,源操作数只能是8位立即数。
3.LXI
LXI指令可以把16位数据装载到左边和右边双字节寄存器中。
格式如下:
LXI rp,data
rp :用接受16位数据的双字节寄存器,它可以是BC,DE,HL或SP。
data :用于取16位立即数的立即数。
LXI指令可以把16位立即数data复制到双字节寄存器rp里。
4.LDA
LDA指令可以把存储单元中的数据装载到A寄存器中,格式如下:
LDA addr
addr :用于取存储单元数据值的存储单元地址。
LDA指令可以把存储单元addr中的数据复制到A寄存器中。
5.STA
STA指令可以把A寄存器的值存入指定的存储单元中,格式如下:
STA addr。
51单片机汇编指令
MCS-51汇编指令(111条)数据传送指令(28)一、内部数据传送指令(15条)1、立即寻址型传送指令MOV A, #data ;A←dataMOV Rn, #data ;Rn←dataMOV @Ri, #data ;(Ri)←dataMOV direct, #data ;direct ←data2、直接寻址型传送指令MOV A, direct ;A←(direct)MOV direct, A ;direct←AMOV Rn, direct ;Rn←(direct)MOV @Ri, direct ;(Ri)←(direct)MOV direct2, direct1 ;direct2←(direct1)3、寄存器寻址型传送指令MOV A,Rn;A←RnMOV Rn, A ;Rn←AMOV direct,Rn;direct←Rn4、寄存器间址型传送指令MOV A, @Ri ;A←(Ri)MOV @Ri, A ;(Ri)←AMOV direct, @Ri ;direct←(Ri)二、外部数据传送指令(7条)1、16位数据传送指令MOV DPTR, #data16 ;DPTR←data162、外部ROM的字节传送指令MOVC A, @A+DPTR ;A←(A+DPTR)MOVC A, @A+PC ;PC←PC+1,A←(A+PC)3、外部RAM的字节传送指令MOVX A,@Ri ;A←(Ri)MOVX @Ri,A ;(Ri)←AMOVX A,@DPTR ;A←(DPTR)MOVX @DPTR,A ;(DPTR)←A三、堆栈操作指令(2条)1、压栈指令PUSH direct ;SP←SP+1,(SP)←(direct) 2、弹出指令POP direct ;(SP)→direct, SP-1→ SP四、数据交换指令(4条)XCH A,Rn;A↔RnXCH A, direct;A↔directXCH A, @Ri ;A↔(Ri)XCH A, @Ri;A3~0↔(Ri)3~0一、加法指令(13条)1、不带Cy的加法指令ADD A, Rn ;A←A+RnADD A, direct ;A←A+(direct)ADD A, @Ri ;A←A+(Ri)ADD A, #data ;A←A+data2、带Cy的加法指令ADDC A, Rn ;A←A+Rn+CyADDC A, direct ;A←A+(direct) +CyADDC A, @Ri ;A←A+(Ri) +CyADDC A, #data ;A←A+data+Cy3、加1指令INC A ;A←A+1 (对奇偶校验位P有影响)INC Rn ;Rn←Rn+1INC direct ;direct←(direct)+1INC @Ri ;(Ri) ← (Ri) +1INC DPTR ;DPTR←DPTR+1(唯一的16位运算指令)二、减法指令(8条)1、带Cy的减法指令(4条)SUBB A, Rn ;A←A-Rn-CySUBB A, direct ;A←A-(direct) -CySUBB A, @Ri ;A←A-(Ri) -CySUBB A, #data ;A←A-data-Cy2、减1指令(4条)DEC A ;A←A-1(对奇偶校验位P有影响)DEC Rn ;Rn←Rn-1DEC direct ;direct←(direct)-1DEC @Ri ;(Ri) ← (Ri) -1三、十进制调整指令(1条)DA A ;若AC=1或A3~A0 > 9 ,则A←A+06H ;若Cy=1或A7~A4 > 9 ,则A←A+60H;对进位标志位Cy和AC有影响。
(完整版)51单片机汇编指令(全)
指令中常用符号说明Rn当前寄存器区的8个工作寄存器R0~R7(n=0~7)Ri当前寄存器区可作为地址寄存器的2个工作寄存器R0和R1(i=0,1)Direct8位内部数据寄存器单元的地址及特殊功能寄存器的地址#data表示8位常数(立即数)#data16表示16位常数Add16表示16位地址Addr11表示11位地址Rel8位代符号的地址偏移量Bit表示位地址@间接寻址寄存器或基址寄存器的前缀( )表示括号中单元的内容(( ))表示间接寻址的内容指令系统数据传送指令(8个助记符)助记符中英文注释MOV Move 移动MOV A , Rn;Rn→A,寄存器Rn的内容送到累加器AMOV A , Direct;(direct)→A,直接地址的内容送AMOV A ,@ Ri;(Ri)→A,RI间址的内容送AMOV A , #data;data→A,立即数送AMOV Rn , A;A→Rn,累加器A的内容送寄存器RnMOV Rn ,direct;(direct)→Rn,直接地址中的内容送RnMOV Rn , #data;data→Rn,立即数送RnMOV direct , A;A→(direct),累加器A中的内容送直接地址中MOV direct , Rn;(Rn)→direct,寄存器的内容送到直接地址MOV direct , direct;(direct)→direct,直接地址的内容送到直接地址MOV direct , @Ri;((Ri))→direct,间址的内容送到直接地址MOV direct , #data;8位立即数送到直接地址中MOV @Ri , A;(A)→@Ri,累加器的内容送到间址中MOV @Ri , direct;direct→@Ri,直接地址中的内容送到间址中MOV @Ri , #data; data→@Ri ,8位立即数送到间址中MOV DPTR , #data16;data16→DPTR,16位常数送入数据指针寄存器,高8位送入DPH,低8位送入DPL中(单片机中唯一一条16位数据传送指令)(MOV类指令共16条)MOVC Move Cod 查表指令MOVC A , @A+PC;PC+1→PC,(A+PC)→AMOVC A , @A+DPTR;(A+DPTR) →A(MOVC类指令共两条)MOVX Move External 与外部数据寄存区传送数据MOVX A , @DPTR;(DPTR)→A,DPTR间址单元内容送AMOVX @DPTR , A;A→(DPTR),A中内容送入DPTR间址单元MOVX A , @Ri;(Ri)→A,Ri间址单元内容送AMOVX @Ri , A;A→(Ri),A中内容送Ri间址单元(MOVX类指令4条)XCH Exchange 交换指令XCH A , Rn;Rn←→A , Rn的内容与A的内容交换XCH A , Direct; Direct ←→A ,直接地址的内容与A的内容交换XCH A , @Ri;(Ri)←→A ,间址的内容与A的内容交换XCHD Exchange Decimal十进制交换XCHD A , @Ri;(Ri.3~Ri.0) ←→A.3~A.0,间址内容低四位与A中内容低四位交换SWAP Swap 交换SWAP A;A.3~A.0←→ A.7~A.4 , A中低四位与高四位内容交换PUSH Push 入栈PUSH direct;SP+1→SP , (direct)→(SP);直接地址内容压入堆栈顶POP Pop 出栈POP direct;(SP)→(direct) , SP-1→SP;堆栈内容弹出到直接地址●算术运算类指令(7个助记符)ADD Add 加法运算ADD A , Rn;A + Rn→A , A与Rn的内容相加,结果送到A中ADD A , direct;(direct)+A→A,A与直接地址的内容相加,结果送到A中ADD A , @Ri;((Ri))+A→A, A与间址中的内容相加,结果送到A中ADD A , #data;data+A→A,A与立即数相加,和送入AADDC ADD with Carry 带进位加法ADDC A , Rn;A + Rn+CY→A , A与Rn的内容、进位状态相加,结果送到A中ADDC A , direct;(direct)+A+CY→A,A与直接地址的内容、进位状态相加,结果送到A中ADDC A , @Ri;((Ri))+A+CY→A, A与间址中的内容、进位状态相加,结果送到A中ADDC A , #data;data+A+CY→A,A与立即数、进位状态相加,和送入ASUBB Subbtract with Borrow 带进位减法SUBB A , Rn;A-Rn-CY→A,A减寄存器Rn的内容及进位标志,结果送ASUBB A , direct; A-(direct)-CY→A,A直接地址的内容及进位标志,结果送ASUBB A , @Ri; A-((Ri))-CY→A,A间址的内容及进位标志,结果送ASUBB A , #data; A-data-CY→A,A立即数及进位标志,结果送AMUL Multiply 乘法指令MUL AB;A x B→B和A,结果16位,高8位存入B,低8位存入A;若结果大于FFH,则将溢出标志OV置1DIV Divide 除法指令DIV AB;A÷B 商→A,余数→B;若除数为0,结果不确定,则将溢出标志OV置1INC Increment 加1指令INC A;A+1→A,A加1,结果放在AINC Rn; Rn +1→ Rn, Rn加1,结果放在RnINC direct; (direct)+1→ direct,直接地址的内容加1,结果放在该地址中INC @Ri;((Ri))+1→( Ri),间址中的内容加1,结果放在该间址中INC DPTR;(DPTR)+1→DPTR,数据指针内容加1,结果放在数据指针寄存器(DPTR)中DEC Decrement 减1指令INC A;A-1→A,A减1,结果放在AINC Rn; Rn -1→ Rn, Rn减1,结果放在RnINC direct; (direct)-1→ direct,直接地址的内容减1,结果放在该地址中INC @Ri;((Ri))-1→( Ri),间址中的内容减1,结果放在该间址中DA Decimal Adjust 十进制加法调整指令DA A;在加法指令后,把A中二进制码自动调整为BCD码;DA A只能更跟在ADD或ADDC加法指令后,不适用于减法●逻辑运算指令(9个助记符)ANL Logical And 逻辑与运算ANL A , Rn; (A)与(Rn)→A, A的内容与Rn中的内容相与,结果放在A中ANL A , direct; (A)与(direct)→A, A的内容与直接地址中的内容相与,结果放在A中ANL A , @Ri; (A)与((Ri))→A, A的内容与间址的内容相与,结果放在A中ANL A , #data; (A)与(data)→A, A的内容与立即数相与,结果放在A中ANL direct , A; (direct)与(A)→direct, 直接地址中的内容相与A的内容相与,结果放在直接地址中ANL direct , #data;(direct)与#data→direct, 直接地址中的内容相与立即数相与,结果放在直接地址中ORL Logical OR 逻辑或运算ORL A , Rn; (A) 或(Rn)→A, A的内容与Rn中的内容相或,结果放在A中ORL A , direct; (A) 或(direct)→A, A的内容与直接地址中的内容相或,结果放在A中ORL A , @Ri; (A) 或((Ri))→A, A的内容与间址的内容相或,结果放在A中ORL A , #data; (A) 或(data)→A, A的内容与立即数相或,结果放在A中ORL direct , A; (direct) 或A)→direct, 直接地址中的内容相与A的内容相或,结果放在直接地址中ORL direct , #data;(direct) 或#data→direct, 直接地址中的内容相与立即数相或,结果放在直接地址中XRL Logical exclusive or 逻辑异或运算ORL A , Rn; (A) 异或(Rn)→A, A的内容与Rn中的内容相异或,结果放在A中ORL A , direct; (A) 异或(direct)→A, A的内容与直接地址中的内容相异或,结果放在A中ORL A , @Ri; (A) 异或((Ri))→A, A的内容与间址的内容相异或,结果放在A中ORL A , #data; (A) 异或(data)→A, A的内容与立即数相异或,结果放在A中ORL direct , A; (direct) 或A)→direct, 直接地址中的内容相与A的内容相异或,结果放在直接地址中ORL direct , #data;(direct) 异或#data→direct, 直接地址中的内容相与立即数相异或,结果放在直接地址RL Rotate Left 循环左移指令RL A;每执行一次,A中的内容左移一位RR Rotate Right 循环右移指令RR A;每执行一次,A中的内容右移一位RLC Rotate Left with the Carry flag 带进位循环左移指令RLC A;每执行一次,CY和A中的内容左移一位RRC Rotate Right with the Carry flag带进位循环又移指令RRC A;每执行一次,CY和A中的内容右移一位注意:循环移位指令只能对A中的内容进行移位操作CPL Complement 取反指令(求补指令)CPL A;累加器内容按位取反,0变1,1变0CLR Clear 清零指令CLR A;累加器清零(A各位全变为0)●控制转移指令(9个助记符)LJMP Long Jump 长跳转指令LJMP add16;add16→PC,无条件跳转到add16地址,可在64KB范围内转移AJMP Absolute Jump 绝对跳转指令AJMP add11;add11→PC,无条件跳转到add11地址,可在2KB范围内转移SJMP Short Jump 短跳转指令SJMP rel;PC+2+rel→PC,rel是偏移量,8位有符号数(-127~127),可向前后跳转±128个地址单元JMP Jump 跳转指令JMP @A+DPTR;A+DPTR→PC,属于散转指令,无条件转向A与DPTR内容相加后形成的新地址JZ Jump if acc is Zero累加器为零转移JZ rel;A=0转向PC+2+rel→PC,A≠0,顺序执行JNZ Jump if acc is Not Zero累加器不为零转移JNZ rel;A≠0转向PC+2+rel→PC,A=0,顺序执行CJNE Compare and Jump if Not Equal比较不相等则转移CJNE A , direct , rel;A≠(direct)转向PC+3+rel→PC,否则顺序执行(PC+3 →PC);(A)>(direct)CY=0, (A)<(direct)CY=1CJNE A , #data , rel;A≠(data)转向PC+3+rel→PC,否则顺序执行(PC+3 →PC);(A)>(data)CY=0,( A)<(data)CY=1CJNE Rn , #data , rel; Rn≠(data)转向PC+3+rel→PC,否则顺序执行(PC+3 →PC); (Rn) >(data)CY=0, (Rn) <(data)CY=1CJNE @Ri , #data , rel;((Ri))≠(data)转向PC+3+rel→PC,否则顺序执行(PC+3 →PC); ((Ri))>(data)CY=0, ((Ri)) <(data)CY=1DJNE Decrement and Jump if Not Zero 减1不为0则转移DJNE Rn , rel;Rn-1→Rn, Rn≠0转向PC+2+rel→PC,否则顺序执行(PC+2→PC)DJNZ direct , rel;(direct-1)→direct, direct≠0转向PC+2+rel→PC,否则顺序执行(PC+2→PC)LCALL Long Call 长条用指令LCALL addr16;调用程序入口地址为addr16的之程序ACALL Absolute Call短调用ACALL addr11;调用程序入口地址为addr11的之程序RET ReturnRET;放在子程序最后,使程序准确返回到主程序断点处RETI Return from InterruptRETI;中断返回指令,能清楚优先级状态NOP No Operation 空操作指令NOP;空操作,产生一个机器周期延时●位操作指令MOV Move 数据传送指令MOV C , bit;(bit)→C,寻址位的状态送入CMOV bit , C;(C)→bit,C的转态送入地址中CLR Clear 清零指令CLR C;0→C,清零累加器CLR bit;清零直接寻址位CPL Complement 取反指令(求补指令)CPL C;c取反CPL bit;直接寻址位取反SETB Set Bit 置位SETB C;C置1SETB bit;直接寻址位置1ANL And Logical 与逻辑运算ANL C , bit;直接寻址位与C相与,结果放在CANL C , /bit; 直接寻址位与非C相与,结果放在CORL OR Logical 或逻辑运算ORL C , bit;直接寻址位与C相或,结果放在CORL C , /bit; 直接寻址位与非C相或,结果放在CJC Jump if Carry is set 进位位为1则转移JC rel;C=1,转向PC+2+rel→PC,否则顺序执行PC+2→PCJNC Jump if Carry is Not set 进位位为不为1则转移JNC rel;C=0,转向PC+2+rel→PC,否则顺序执行PC+2→PCJB Jump if Bit is set 进位位为1则转移JB bit , rel;(bit)=1,转向PC+3+rel→PC,否则顺序执行PC+3→PCJNB Jump if Bit is Not set 进位位为1则转移JNB bit , rel;(bit)=0,转向PC+3+rel→PC,否则顺序执行PC+3→PCJBC Jump if Bit is set and Clear bit指定位等于1转移并清该位JBC bit , rel; (bit)=1,转向PC+3+rel→PC,同时0→bit否则顺序执行PC+3→PC伪指令ORG Origin 代码起始地址指令ORG 0000HMOV A , #0010H;这条指令从0000H这个地址单元开始写起END End 汇编程序结束指令END;汇编指令结束DB字节定义伪指令ORG 1000HDB 01H , 02H;则(1000H)=01H,(1001H)=02HORG 1100HDB ‘01’;则(1100H)=30H,30H是0的ASCII码,(1101H)=31H,31H是1的ASCII码DW双字节定义伪指令ORG 2000HDW 2546H , 0178H; (2000H)=25H, (2001H)=46H, (2002H)=01H, (2003H)=78H,EQU数据赋值伪指令X EQU n;将n的值赋给xBIT位数据赋值伪指令y BIT b;y是用户定义标号,b为0或1MACRO宏指令宏指令名MACRO 形式参数······代码段······ENDM;宏指令定义结束寻址方式及相关的存储空间寻址方式寻址范围寄存器寻址R0~R7A 、B、C(CY)、AB(双字节)、DPTR(双字节)、PC(双字节)直接寻址内部RAM低128字节特殊功能寄存器内部RAM位寻区的128个位特殊功能寄存器中可寻址的位寄存器间接寻址内部数据存储器RAM【@R0,@R1,@SP(仅PUSH,POP)】内部数据存储器单元的低4位(@R0,@R1)外部RAM或I/O口(@R0,@R1,@DPTR)立即寻址程序存储器(常数)程序存储器(@A+PC,@A+DPTR)基寄存器加变址寄存器间接寻址。
51单片机汇编指令总结
51单片机汇编指令总结数据传输指令一.片内ram数据传输指令1.以累加器a为目的操作数的指令:mova,rnmova,directmova,@rimova,#data2.以寄存器rn为目的操作数的指令:movrn,amovrn,directmovrn,data3.以轻易地址为目的操作数的指令:movdirect,amovdirect,rnmovdirect1,derect2movdirect,@rimovdirect,#data4.间接地址为目的操作数的指令:mov@ri,amov@ri,directmov@ri,#data5.十六位数据传送指令:movdptr,#data16二.累加器a与片外ram数据传输指令:movxa,@rimovxa,@dptrmovx@ri,amovx@dptr,a三.换算串行:movca,@a+dptr(先pc←(pc)+1,后a←((a)+(dptr)))+movca,@a+pc(先pc←(pc)+1,后a←((a)+(pc)))四.互换指令:1.字节交换指令:xcha,rnxcha,directxcha,@ri2.半字节交换指令:xchda,@ri3.累加器半字节交换指令:swapa五.栈操作指令:1.push(入栈指令)pushdirect2.pop(出栈指令)popdirect算术运算指令:一.乘法加法指令:1.加法指令:adda,rnadda,directadda,@riadda,#data2.拎位次乘法指令:addca,rna←(a)+(rn)+cyaddca,directa←(a)+(direct)+cyaddca,@ria←(a)+((ri))+cyaddca,#dataa←(a)+(data)+cy3.带借位减法指令:subba,rna←(a)-cy-(rn)subba,directa←(a)-cy-(direct)subba,@ria←(a)-cy-((ri))subba,#dataa←(a)-cy-#data二.乘法乘法指令:1.乘法指令:mulabba←(a)×(b)高字节放到b中,低字节放到a中2.乘法指令:divaba←(a)÷(b)的商,(b)←(a)÷(b)的余数三.加1减1指令:1.提1指令:incaa←(a)+1incrnrn←(rn)+1incdirectdirect←(direct)+1inc@ri(ri)←((ri))+1incdptrdptr←(dptr)+12.减至1指令:decadecrndecdirectdec@ri四.十进制调制指令:daa调整累加器a的内容为bcd码逻辑操作方式指令:一.逻辑与、或、异或指令:1.逻辑与指令:anla,rnanla,directanla,@rianla,#data2.逻辑或这而令:orla,rnorla,directorla,@riorla,#dataorldirect,aorldirect,#data3.逻辑异或指令:xrla,rnxrla,directxrla,@rixrla,#dataxrldirect,axrldirect,#data二.清零、row指令:1.累加器a清零指令:crla2.累加器arow指令:cpla三.循环位移指令:1.累加器a循环左移指令:rla2.累加器a循环右移指令:rra3.累加器a连同进位位循环左移指令:rlca4.累加器a连同进位位循环右移指令:rrca控制转移指令:一.无条件迁移指令:1.绝对转移指令:ajmpaddr11(先pc+2,然后将addr11的高十位托付给pc,pc的高六位维持不变)2.长转移指令:ljmpaddr16(用addr16的值替代pc的值)3.相对迁移(长迁移)指令:sjmprel(带符号的偏移字节数)(pc+2,再加rel赋值给pc)4.间接转移指令:jmp@a+dptr(a)+(dptr)→(pc)二.条件转移指令:1.累加器判零迁移指令:jzrel先pc+2;后判断,a为0时转移,pc+rel赋值给pc;否则顺序继续执行jnzrel先pc+2,后判断,a不为0时转移,pc+rel赋值给pc;否则顺序执行2.比较转移指令:cjne目的操作数,源操作数,relcjnea,direct,rel先pc+3传回pc,再比较目的操作数和原操作数cjnea,#data,rel目>源时,程序转移,pc+rel传回pc且cy=0cjnern,#data,rel目=源时,程序顺序执行cjne@ri,#data,rel目djnzrn,rel先pc\\+2,rn-1,当rn为0时程序顺序继续执行,否则pc+rel传到pcdjnzdirect,rel先pc+3,direct-1,direct为0时程序顺序继续执行,否则pc+rel传到pc二.子程序调用、返回指令:1.绝对调用指令acall:acalladdr11先pc+2,sp+1将pc的低八位存入sp;sp+1,将pc的高八位取走sp。
51单片机汇编指令表
Rn,#data
立即数送入寄存器
8
MOV
direct,A
累加器内容送入直接地址单元
9
MOV
direct,Rn
寄存器内容送入直接地址单元
10
MOV
direct,direct
直接地址单元中的数据送入另一个直接地址单元
11
MOV
direct,@Ri
间接RAM中的数据送入直接地址单元
12
MOV
direct,#data
直接地址单元加1
16
INC
@Ri
间接RAM单元加1
17
DEC
A
累加器减1
18
DEC
Rn
寄存器减1
19
DEC
direct
直接地址单元减1
20
DEC
@Ri
间接RAM单元减1
21
INC
DPTR
地址寄存器DPTR加1
22
MUL
A,B
A乘以B,结果放在A
23
DIV
A,B
A除以B,结果放在A
ห้องสมุดไป่ตู้24
DA
A
累加器十进制调整
12
CJNE
A,#data,rel
累加器与立即数比较,不相等则转移
13
CJNE
Rn,#data,rel
寄存器与立即数比较,不相等则转移
14
CJNE
@Ri,#data,rel
间接RAM单元与立即数比较,不相等则转移
15
CJNE
Rn,rel
寄存器减1,非零转移
16
CJNE
direct,erl
直接地址单元减1,非零转移
51单片机汇编语言指令教程汇集
51单片机汇编语言指令教程汇集1.MOV指令:MOV指令用于将一个值从一个寄存器或内存位置复制到另一个寄存器或内存位置。
例如,MOVA,将常数10复制到累加器A中。
2.ADD指令:ADD指令用于将两个操作数相加,并将结果保存在目标操作数中。
例如,ADDA,B将寄存器B的值与累加器A的值相加,并将结果保存在累加器A中。
3.SUB指令:SUB指令用于将源操作数减去目标操作数,并将结果保存在目标操作数中。
例如,SUBA,B将寄存器B的值减去累加器A的值,并将结果保存在累加器A中。
4.INC指令:INC指令用于将指定的操作数加1、例如,INCA将累加器A的值加15.DEC指令:DEC指令用于将指定的操作数减1、例如,DECA将累加器A的值减16.JMP指令:JMP指令用于无条件地跳转到指定的地址。
例如,JMP1000h将跳转到地址1000h处执行指令。
9. ACALL指令:ACALL指令用于调用一个子程序,其地址由指令给出,子程序结束后返回到调用指令的下一条指令。
例如,ACALL Subroutine将调用一个名为Subroutine的子程序。
10.RET指令:RET指令用于从子程序返回到调用指令的下一条指令。
例如,RET将从子程序返回。
11.NOP指令:NOP指令用于空操作,即不执行任何操作。
它通常用于延时或填充空白。
以上是一些常用的51单片机汇编语言指令,这些指令可以用于控制I/O口、进行算术运算、执行跳转和调用子程序等。
学习并熟练掌握这些指令,对于编写高效的51单片机汇编程序非常重要。
希望本文提供的51单片机汇编语言指令教程能够帮助你入门和掌握51单片机汇编语言的基本知识。
如果你想深入学习51单片机汇编语言,建议参考相关的教材或在线资源,进行更加系统和全面的学习。
51单片机汇编指令表
以下是一些常见的51单片机(如8051系列)的汇编指令:
1. 数据传送指令:
- MOV:将一个数据或寄存器的值移动到另一个寄存器或存储器位置。
- MOVC:将数据从外部代码存储器复制到累加器或寄存器。
2. 算术运算指令:
- ADD:将累加器与另一个寄存器或存储器中的值相加。
- SUB:从累加器中减去另一个寄存器或存储器中的值。
- INC:将累加器或寄存器的值加1。
- DEC:将累加器或寄存器的值减1。
3. 逻辑运算指令:
- ANL:对累加器和另一个寄存器或存储器中的值进行逻辑与操作。
- ORL:对累加器和另一个寄存器或存储器中的值进行逻辑或操作。
- XRL:对累加器和另一个寄存器或存储器中的值进行逻辑异或操作。
- CPL:对累加器或寄存器中的值进行按位取反操作。
4. 条件分支指令:
- CJNE:比较两个值,并在不相等时跳转到指定的地址。
- DJNZ:递减累加器或寄存器,并在结果不为零时跳转到指定的地址。
5. 跳转指令:
- JMP:无条件跳转到指定的地址。
- SJMP:短跳转,跳转到相对于当前地址的指定偏移量。
- AJMP:绝对跳转,跳转到指定的地址。
- LCALL:长调用,将当前地址入栈并跳转到指定的子程序地址。
6. 位操作指令:
- SETB:将某个位设置为1。
- CLR:将某个位清零。
- JB:如果某个位为1,则跳转到指定地址。
- JNB:如果某个位为0,则跳转到指定地址。
51单片机汇编指令集(附记忆方法)
51单片机汇编指令集一、数据传送类指令(7种助记符)MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送;MOVC(Move Code)读取程序存储器数据表格的数据传送;MOVX (Move External RAM) 对外部RAM的数据传送;XCH (Exchange) 字节交换;XCHD (Exchange low-order Digit) 低半字节交换;PUSH (Push onto Stack) 入栈;POP (Pop from Stack) 出栈;二、算术运算类指令(8种助记符)ADD(Addition) 加法;ADDC(Add with Carry) 带进位加法;SUBB(Subtract with Borrow) 带借位减法;DA(Decimal Adjust) 十进制调整;INC(Increment) 加1;DEC(Decrement) 减1;MUL(Multiplication、Multiply) 乘法;DIV(Division、Divide) 除法;三、逻辑运算类指令(10种助记符)ANL(AND Logic) 逻辑与;ORL(OR Logic) 逻辑或;XRL(Exclusive-OR Logic) 逻辑异或;CLR(Clear) 清零;CPL(Complement) 取反;RL(Rotate left) 循环左移;RLC(Rotate Left throught the Carry flag) 带进位循环左移;RR(Rotate Right) 循环右移;RRC (Rotate Right throught the Carry flag) 带进位循环右移;SWAP (Swap) 低4位与高4位交换;四、控制转移类指令(17种助记符)ACALL(Absolute subroutine Call)子程序绝对调用;LCALL(Long subroutine Call)子程序长调用;RET(Return from subroutine)子程序返回;RETI(Return from Interruption)中断返回;SJMP(Short Jump)短转移;AJMP(Absolute Jump)绝对转移;LJMP(Long Jump)长转移;CJNE (Compare Jump if Not Equal)比较不相等则转移;DJNZ (Decrement Jump if Not Zero)减1后不为0则转移;JZ (Jump if Zero)结果为0则转移;JNZ (Jump if Not Zero) 结果不为0则转移;JC (Jump if the Carry flag is set)有进位则转移;JNC (Jump if Not Carry)无进位则转移;JB (Jump if the Bit is set)位为1则转移;JNB (Jump if the Bit is Not set) 位为0则转移;JBC(Jump if the Bit is set and Clear the bit) 位为1则转移,并清除该位;NOP (No Operation) 空操作;五、位操作指令(1种助记符)CLR 位清零;SETB(Set Bit) 位置1。
常用51单片机汇编指令
常用单片机汇编指令:1 .MOV A,Rn 寄存器内容送入累加器2 .MOV A,direct 直接地址单元中的数据送入累加器3 .MOV A,@Ri (i=0,1)间接RAM 中的数据送入累加器4 .MOV A,#data 立即数送入累加器5 .MOV Rn,A 累加器内容送入寄存器6 .MOV Rn,direct 直接地址单元中的数据送入寄存器7 .MOV Rn,#data 立即数送入寄存器8 .MOV direct,A 累加器内容送入直接地址单元9 .MOV direct,Rn 寄存器内容送入直接地址单元10. MOV direct,direct 直接地址单元中的数据送入另一个直接地址单元11 .MOV direct,@Ri (i=0,1)间接RAM 中的数据送入直接地址单元12 MOV direct,#data 立即数送入直接地址单元13 .MOV @Ri,A (i=0,1)累加器内容送间接RAM 单元14 .MOV @Ri,direct (i=0,1)直接地址单元数据送入间接RAM 单元15 .MOV @Ri,#data (i=0,1)立即数送入间接RAM 单元16 .MOV DPTR,#data16 16 位立即数送入地址寄存器17 .MOVC A,@A+DPTR 以DPTR为基地址变址寻址单元中的数据送入累加器18 .MOVC A,@A+PC 以PC 为基地址变址寻址单元中的数据送入累加器19 .MOVX A,@Ri (i=0,1)外部RAM(8 位地址)送入累加器20 .MOVX A,@DPTR 外部RAM(16 位地址)送入累加器21 .MOVX @Ri,A (i=0,1)累计器送外部RAM(8 位地址)22 .MOVX @DPTR,A 累计器送外部RAM(16 位地址)23 .PUSH direct 直接地址单元中的数据压入堆栈24 .POP direct 弹栈送直接地址单元25 .XCH A,Rn 寄存器与累加器交换26 .XCH A,direct 直接地址单元与累加器交换27 .XCH A,@Ri (i=0,1)间接RAM 与累加器交换28 .XCHD A,@Ri (i=0,1)间接RAM 的低半字节与累加器交换算术操作类指令:1. ADD A,Rn 寄存器内容加到累加器2 .ADD A,direct 直接地址单元的内容加到累加器3 A.DD A,@Ri (i=0,1)间接ROM 的内容加到累加器4 .ADD A,#data 立即数加到累加器5 .ADDC A,Rn 寄存器内容带进位加到累加器6 .ADDC A,direct 直接地址单元的内容带进位加到累加器7 .ADDC A,@Ri(i=0,1) 间接ROM 的内容带进位加到累加器8 .ADDC A,#data 立即数带进位加到累加器9 .SUBB A,Rn 累加器带借位减寄存器内容10. SUBB A,direct 累加器带借位减直接地址单元的内容11 .SUBB A,@Ri (i=0,1)累加器带借位减间接RAM 中的内容12 .SUBB A,#data 累加器带借位减立即数13 .INC A 累加器加114 .INC Rn 寄存器加115 .INC direct 直接地址单元加116 .INC @Ri (i=0,1)间接RAM 单元加117 .DEC A 累加器减118 .DEC Rn 寄存器减119 .DEC direct 直接地址单元减120 .DEC @Rj 间接RAM 单元减 121 .INC DPTR 地址寄存器DPTR 加 122 .MUL AB A 乘以B,结果放在A23 .DIV AB A 除以B,结果放在A24. DA A 累加器十进制调整布尔变量操作类指令:1. CLR C 清进位位2 .CLR bit 清直接地址位3 .SETB C 置进位位4 .SETB bit 置直接地址位5 .CPL C 进位位求反6 .CPL bit 置直接地址位求反7 .ANL C,bit 进位位和直接地址位相“与”8 .ANL C,/bit 进位位和直接地址位的反码相“与”9 .ORL C,bit 进位位和直接地址位相“或”10. ORL C,/bit 进位位和直接地址位的反码相“或”11 .MOV C,bit 直接地址位送入进位位12 .MOV bit,C 进位位送入直接地址位13 .JC rel 进位位为1 则转移14 .JNC rel 进位位为0 则转移15 .JB bit,rel 直接地址位为1 则转移16 .JNB bit,rel 直接地址位为0 则转移17 .JBC bit,rel 直接地址位为1 则转移,该位清零逻辑操作数指令:1. ANL A,Rn 累加器与寄存器相“与”2 .ANL A,direct 累加器与直接地址单元相“与”3 .ANL A,@Ri 累加器与间接RAM 单元相“与”4 .ANL A,#data 累加器与立即数相“与”5 .ANL direct,A 直接地址单元与累加器相“与”6 .ANL direct,#data 直接地址单元与立即数相“与”7 .ORL A,Rn 累加器与寄存器相“或”8 .ORL A,direct 累加器与直接地址单元相“或”9 .ORL A,@Ri 累加器与间接RAM 单元单元相“或”10. ORL A,#data 累加器与立即数相“或”11. ORL direct,A 直接地址单元与累加器相“或”12 .ORL direct,#data 直接地址单元与立即数相“或”13 .XRL A,Rn 累加器与寄存器相“异或”14 .XRL A,direct 累加器与直接地址单元相“异或”15 .XRL A,@Ri 累加器与间接RAM 单元单元相“异或”16 .XRL A,#data 累加器与立即数相“异或”17 .XRL direct,A 直接地址单元与累加器相“异或”18 .XRL direct,#data 直接地址单元与立即数相“异或”19 .CLR A 累加器清“0”20 .CPL A 累加器求反21 .RL A 累加器循环左移22 .RLC A 累加器带进位位循环左移23 .RR A 累加器循环右移24 .RRC A 累加器带进位位循环右移25 .SWAP A 累加器半字节交换控制转移类指令1. ACALL addr11 绝对(短)调用子程序2 .LCALL addr16 长调用子程序3 .RET 子程序返回4 .RETI 中断返回5 .AJMP addr11 绝对(短)转移6 .LJMP addr16 长转移7 .SJMP rel 相对转移8 .JMP @A+DPTR 相对于DPTR 的间接转移9. JZ rel 累加器为零转移10. JNZ rel 累加器非零转移11. CJNE A,direct,rel 累加器与直接地址单元比较,不相等则转移12 .CJNE A,#data,rel 累加器与立即数比较,不相等则转移13 .CJNE Rn,#data,rel 寄存器与立即数比较,不相等则转移14 .CJNE @Ri,#data,rel 间接RAM 单元与立即数比较,不相等则转移15 .DJNZ Rn,rel 寄存器减1,非零转移16 .DJNZ direct,erl 直接地址单元减1,非零转移17 .NOP 空操作。
51单片机汇编指令详解
MCS-51系列单片机指令以A开头的指令有18条,分别为:ACALL addr11ADD A,RnADD A,directADD A,@RiADD A,#dataADDC A,RnADDC A,directADDC A,@RiADDC A,#dataAJMP addr11ANL A,RnANL A,directANL A,@RiANL A,#dataANL direct,AANL direct,#dataANL C,bitANL C,/bit1、ACALL addr11指令名称:绝对调用指令指令代码:{A10,A9,A8,10001},A[7:0]指令功能:构造目的地址,进行子程序调用。
其方法是以指令提供的11位地址(al0~a0),取代PC的低11位,PC的高5位不变。
操作内容:PC←(PC)+2SP←(SP)+1(SP)←(PC)7~0SP←(SP)+1(SP)←(PC)15~8PC10~0←addrl0~0字节数: 2机器周期:2使用说明:由于指令只给出子程序入口地址的低11位,因此调用范围是2KB。
2、ADD A,Rn指令名称:寄存器加法指令指令代码:28H~2FH指令功能:累加器内容与寄存器内容相加操作内容:A←(A)+(Rn), n=0~7字节数: 1机器周期;1影响标志位:C,AC,OV3、ADD A,direct指令名称:直接寻址加法指令指令代码:25H指令功能:累加器内容与内部RAM单元或专用寄存器内容相加操作内容:A←(A)+(direct)字节数: 2机器周期:1影响标志位:C,AC,OV4、ADD A,@Ri指令名称:间接寻址加法指令指令代码:26H~27H指令功能:累加器内容与内部RAM低128单元内容相加操作内容:A←(A)+((Ri)), i=0,1字节数: 1机器周期:1影响标志位:C,AC,OV5、ADD A,#data指令名称:立即数加法指令指令代码:24H指令功能:累加器内容与立即数相加操作内容:A←(A)+data字节数: 2机器周期:1影响标志位:C,AC,OV6、ADDC A,Rn指令名称:寄存器带进位加法指令指令代码:38H~3FH指令功能:累加器内容、寄存器内容和进位位相加操作内容:A←(A)+(Rn)+(C), n=0~7字节数: 1机器周期:1影响标志位:C,AC,OV7、ADDC A,direct指令名称:直接寻址带进位加法指令指令代码:35H指令功能:累加器内容、内部RAM低128单元或专用寄存器内容与进位位加操作内容:A←(A)+(direct)+(C)字节数: 2机器周期:1影响标志位:C,AC,OV8、ADDC A,@Ri指令名称:间接寻址带进位加法指令指令代码:36H~37H指令功能:累加器内容、内部RAM低128单元内容及进位位相加操作内容:A←(A)+((Ri))+(C), i=0,1字节数: 1机器周期:1影响标志位:C,AC,OV9、ADDC A,#data指令名称:立即数带进位加法指令指令代码:34H指令功能:累加器内容、立即数及进位位相加操作内容:A←(A)+data+(C)字节数: 2机器周期:1影响标志位:C,AC,OV10、AJMP addr11指令名称:绝对转移指令指令代码:{A10,A9,A8,00001},A[7:0]指令功能:构造目的地址,实现程序转移。
51汇编指令表大全
累加器与立即数相“或”
ORL A,dir
累加器与直接地址单元相“或”
ORL A,@Ri
累加器与间接RAM单元相“或”
ORL A,Rn
累加器与寄存器相“或”
5
JNC rel
进位位为0则转移
ACALL 2
ANL dir,A
直接地址单元与累加器相“与”
ANL dir,#da
直接地址单元与立即数相“与”
MOV A,#da
立即数送入累加器
MOV dir,#da
立即数送入直接地址单元
MOV @Ri,#da
立即数送入间接RAM单元
MOV Rn,#da
立即数送入寄存器
8
SJMP rel
相对转移
AJMP 4
ANL C,bit
进位位和直接地址位相“与”
MOVC A,@A+PC
以PC为基地址变址寻址单元中
的数据送入累加器
累加器循环左移
ADD A,#da
立即数加到累加器
ADD A,dir
直接地址单元的内容加到累加器
ADD A,@Ri
间接RAM的内容加到累加器
ADDC A,Rn
寄存器内容加到累加器
3
JNB bit,rel
直接地址为0则转移
ACALL 1
RET 1
中断返回
RLC A
累加器带进位位循环左移
ADDC A,#da
MOV C,bit
直接地址位送入进位位
INC DPTR
地址寄存器DPTR加1
MUL AB
A乘以B
MOV @Ri,dir
直接地址单元数据送入间接RAM单元
MOV Rn,dir
51单片机汇编指令集(附记忆方法)
51单片机汇编指令集一、数据传送类指令(7种助记符)MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送;MOVC(Move Code)读取程序存储器数据表格的数据传送;MOVX (Move External RAM) 对外部RAM的数据传送;XCH (Exchange) 字节交换;XCHD (Exchange low-order Digit) 低半字节交换;PUSH (Push onto Stack) 入栈;POP (Pop from Stack) 出栈;二、算术运算类指令(8种助记符)ADD(Addition) 加法;ADDC(Add with Carry) 带进位加法;SUBB(Subtract with Borrow) 带借位减法;DA(Decimal Adjust) 十进制调整;INC(Increment) 加1;DEC(Decrement) 减1;MUL(Multiplication、Multiply) 乘法;DIV(Division、Divide) 除法;三、逻辑运算类指令(10种助记符)ANL(AND Logic) 逻辑与;ORL(OR Logic) 逻辑或;XRL(Exclusive-OR Logic) 逻辑异或;CLR(Clear) 清零;CPL(Complement) 取反;RL(Rotate left) 循环左移;RLC(Rotate Left throught the Carry flag) 带进位循环左移;RR(Rotate Right) 循环右移;RRC (Rotate Right throught the Carry flag) 带进位循环右移;SWAP (Swap) 低4位与高4位交换;四、控制转移类指令(17种助记符)ACALL(Absolute subroutine Call)子程序绝对调用;LCALL(Long subroutine Call)子程序长调用;RET(Return from subroutine)子程序返回;RETI(Return from Interruption)中断返回;SJMP(Short Jump)短转移;AJMP(Absolute Jump)绝对转移;LJMP(Long Jump)长转移;CJNE (Compare Jump if Not Equal)比较不相等则转移;DJNZ (Decrement Jump if Not Zero)减1后不为0则转移;JZ (Jump if Zero)结果为0则转移;JNZ (Jump if Not Zero) 结果不为0则转移;JC (Jump if the Carry flag is set)有进位则转移;JNC (Jump if Not Carry)无进位则转移;JB (Jump if the Bit is set)位为1则转移;JNB (Jump if the Bit is Not set) 位为0则转移;JBC(Jump if the Bit is set and Clear the bit) 位为1则转移,并清除该位;NOP (No Operation) 空操作;五、位操作指令(1种助记符)CLR 位清零;SETB(Set Bit) 位置1。
单片机指令表汇总
51单片机指令表汇总51单片机是一种广泛应用的微控制器,其指令集是进行编程的基础。
下面将51单片机的指令表进行汇总,以帮助初学者更好地理解其指令集。
一、数据传输指令1、MOV指令:将源操作数的内容传送到目标操作数。
2、XCH指令:将两个操作数的内容互换。
3、MOVC指令:从外部存储器将数据传送到目标操作数。
4、MOVX指令:将外部存储器中的数据传送到目标操作数。
5、PUSH指令:将数据压入堆栈。
6、POP指令:从堆栈中弹出数据。
二、算术运算指令1、ADD指令:将两个操作数相加,并将结果存放在目标操作数中。
2、SUB指令:从目标操作数中减去源操作数,并将结果存放在目标操作数中。
3、MUL指令:将两个操作数相乘,并将结果存放在目标操作数中。
4、DIV指令:将目标操作数除以源操作数,并将结果存放在目标操作数中。
5、ANL指令:对目标操作数和源操作数进行按位与运算,并将结果存放在目标操作数中。
6、ORL指令:对目标操作数和源操作数进行按位或运算,并将结果存放在目标操作数中。
7、XRL指令:对目标操作数和源操作数进行按位异或运算,并将结果存放在目标操作数中。
8、CPL指令:对目标操作数进行按位取反运算,并将结果存放在目标操作数中。
9、INC指令:将目标操作数加1。
10、DEC指令:将目标操作数减1。
11、ASR指令:将目标操作数右移n位,最高位用符号位补齐。
12、LSR指令:将目标操作数右移n位,最低位用0补齐。
13、ROL指令:将目标操作数循环左移n位,最高位移入最低位。
14、ROR指令:将目标操作数循环右移n位,最低位移入最高位。
单片机汇编指令表一、概述在单片机的世界里,汇编语言扮演着举足轻重的角色。
它是一种低级语言,能够直接与硬件进行交互,提供高效的代码执行效率。
下面,我们将详细列出一些常见的单片机汇编指令,以及它们的功能。
二、指令表1、MOV指令:用于将数据从一个寄存器移动到另一个寄存器。
例如,MOV R1, R2将把 R2的内容移动到 R1中。
51单片机汇编指令集(附记忆方法)
51单片机汇编指令集(附记忆方法) MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送;MOVC(Move Code)读取程序存储器数据表格的数据传送; MOVX (Move External RAM) 对外部RAM的数据传送; XCH (Exchange) 字节交换;XCHD (Exchange low-order Digit) 低半字节交换; PUSH (Push onto Stack) 入栈;POP (Pop from Stack) 出栈;ADD(Addition) 加法;ADDC(Add with Carry) 带进位加法;SUBB(Subtract with Borrow) 带借位减法;DA(Decimal Adjust) 十进制调整;INC(Increment) 加1;DEC(Decrement) 减1;MUL(Multiplication、Multiply) 乘法;DIV(Division、Divide) 除法;ANL(AND Logic) 逻辑与;ORL(OR Logic) 逻辑或;XRL(Exclusive-OR Logic) 逻辑异或;CLR(Clear) 清零;CPL(Complement) 取反;RL(Rotate left) 循环左移;RLC(Rotate Left throught the Carry flag) 带进位循环左移; RR(Rotate Right) 循环右移;RRC (Rotate Right throught the Carry flag) 带进位循环右移;SWAP (Swap) 低4位与高4位交换;ACALL(Absolute subroutine Call)子程序绝对调用; LCALL(Long subroutine Call)子程序长调用; RET(Return from subroutine)子程序返回; RETI(Return from Interruption)中断返回; SJMP(Short Jump)短转移;AJMP(Absolute Jump)绝对转移;LJMP(Long Jump)长转移;CJNE (Compare Jump if Not Equal)比较不相等则转移;- 1 -DJNZ (Decrement Jump if Not Zero)减1后不为0则转移; JZ (Jump if Zero)结果为0则转移;JNZ (Jump if Not Zero) 结果不为0则转移;JC (Jump if the Carry flag is set)有进位则转移; JNC (Jump if Not Carry)无进位则转移;JB (Jump if the Bit is set)位为1则转移;JNB (Jump if the Bit is Not set) 位为0则转移; JBC(Jump if the Bit is set and Clear the bit) 位为1则转移,并清除该位;NOP (No Operation) 空操作;CLR 位清零;SETB(Set Bit) 位置1。
51单片机的汇编指令手册-高亮+注释
51单片机的汇编指令手册1、数据传送类指令:(28条)1 MOV A,Rn ;寄存器内容送入累加器2 MOV A,direct ;直接地址单元中的数据送入累加器3 MOV A,@Ri ;间接RAM 中的数据送入累加器4 MOV A,#data ;立即数送入累加器5 MOV Rn,A ;累加器内容送入寄存器6 MOV Rn,direct ;直接地址单元中的数据送入寄存器7 MOV Rn,#data ;立即数送入寄存器8 MOV direct,A ;累加器内容送入直接地址单元9 MOV direct,Rn ;寄存器内容送入直接地址单元10 MOV direct,direct ;直接地址单元中的数据送入另一个直接地址单元11 MOV direct,@Ri ;间接RAM 中的数据送入直接地址单元12 MOV direct,#data ;立即数送入直接地址单元13 MOV @Ri,A ;累加器内容送间接RAM 单元14 MOV @Ri,direct ;直接地址单元数据送入间接RAM 单元15 MOV @RI,#data ;立即数送入间接RAM 单元16 MOV DRTR,#dat16 ;16 位立即数送入地址寄存器17 MOVC A,@A+DPTR ;以DPTR为基地址变址寻址单元中的数据送入累加器18 MOVC A,@A+PC ;以PC 为基地址变址寻址单元中的数据送入累加器19 MOVX A,@Ri ;外部RAM(8 位地址)送入累加器20 MOVX A,@DPTR ;外部RAM(16 位地址)送入累加器21 MOVX @Ri,A ;累计器送外部RAM(8 位地址)22 MOVX @DPTR,A ;累计器送外部RAM(16 位地址)23 PUSH direct ;直接地址单元中的数据压入堆栈24 POP direct弹栈送直接地址单元25 XCH A,Rn ;寄存器与累加器交换26 XCH A,direct ;直接地址单元与累加器交换27 XCH A,@Ri ;间接RAM 与累加器交换28 XCHD A,@Ri ;间接RAM 的低半字节与累加器交换2、算术操作类指令:(24条)1 ADD A,Rn ;寄存器内容加到累加器2 ADD A,direct ;直接地址单元的内容加到累加器3 ADD A,@Ri ;间接ROM 的内容加到累加器4 ADD A,#data ;立即数加到累加器5 ADDC A,Rn ;寄存器内容带进位加到累加器6 ADDC A,direct ;直接地址单元的内容带进位加到累加器7 ADDC A,@Ri ;间接ROM 的内容带进位加到累加器8 ADDC A,#data ;立即数带进位加到累加器9 SUBB A,Rn ;累加器带借位减寄存器内容10 SUBB A,direct ;累加器带借位减直接地址单元的内容11 SUBB A,@Ri ;累加器带借位减间接RAM 中的内容12 SUBB A,#data ;累加器带借位减立即数13 INC A ;累加器加114 INC Rn ;寄存器加115 INC direct ;直接地址单元加116 INC @Ri ;间接RAM 单元加117 DEC A ;累加器减118 DEC Rn ;寄存器减1 1 1219 DEC direct ;直接地址单元减120 DEC @Rj ;间接RAM 单元减 121 INC DPTR ;地址寄存器DPTR 加 122 MUL AB A ;乘以B,结果放在A23 DIV AB A ;除以B,结果放在A24 DA A ;累加器十进制调整3、布尔变量操作类指令:(17条)1 CLR C ;清进位位2 CLR bit ;清直接地址位3 SETB C ;置进位位4 SETB bit ;置直接地址位5 CPL C ;进位位求反6 CPL bit ;置直接地址位求反7 ANL C,bit ;进位位和直接地址位相“与”8 ANL C,bit ;进位位和直接地址位的反码相“与”9 ORL C,bit ;进位位和直接地址位相“或”10 ORL C,bit ;进位位和直接地址位的反码相“或”11 MOV C,bit ;直接地址位送入进位位12 MOV bit,C ;进位位送入直接地址位13 JC rel ;进位位为1 则转移14 JNC rel ;进位位为0 则转移15 JB bit,rel ;直接地址位为1 则转移16 JNB bit,rel ;直接地址位为0 则转移17 JBC bit,rel ;直接地址位为1 则转移,该位清零4、逻辑操作数指令:(25条)1 ANL A,Rn ;累加器与寄存器相“与”2 ANL A,direct ;累加器与直接地址单元相“与”3 ANL A,@Ri ;累加器与间接RAM 单元相“与”4 ANL A,#data ;累加器与立即数相“与”5 ANL direct,A ;直接地址单元与累加器相“与”6 ANL direct,#data ;直接地址单元与立即数相“与”7 ORL A,Rn ;累加器与寄存器相“或”8 ORL A,direct ;累加器与直接地址单元相“或”9 ORL A,@Ri ;累加器与间接RAM 单元单元相“或”10 ORL A,#data ;累加器与立即数相“或”11 ORL direct,A ;直接地址单元与累加器相“或”12 ORL direct,#data ;直接地址单元与立即数相“或”13 XRL A,Rn ;累加器与寄存器相“异或”14 XRL A,direct ;累加器与直接地址单元相“异或”15 XRL A,@Ri ;累加器与间接RAM 单元单元相“异或”16 XRL A,#data ;累加器与立即数相“异或”17 XRL direct,A ;直接地址单元与累加器相“异或”18 XRL direct,#data ;直接地址单元与立即数相“异或”19 CLR A ;累加器清“0”20 CPL A ;累加器求反21 RL A ;累加器循环左移22 RLC A ;累加器带进位位循环左移23 RR A ;累加器循环右移24 RRC A ;累加器带进位位循环右移25 SWAP A ;累加器半字节交换5、控制转移类指令:(17条)1 ACALL addr11 ;绝对(短)调用子程序2 LCALL addr16 ;长调用子程序3 RET ;子程序返回4 RETI ;中数返回5 AJMP addr11 ;绝对(短)转移6 LJMP addr16 ;长转移7 SJMP rel ;相对转移8 JMP @A+DPTR ;相对于DPTR 的间接转移9 JZ rel ;累加器为零转移10 CJNE rel ;累加器非零转移11 CJNE A,direct,rel ;累加器与直接地址单元比较,不相等则转移12 CJNE A,#data,rel ;累加器与立即数比较,不相等则转移13 CJNE Rn,#data,rel ;寄存器与立即数比较,不相等则转移14 CJNE @Ri,#data,rel ;间接RAM 单元与立即数比较,不相等则转移15 DJNZ Rn,rel ;寄存器减1,非零转移16 DJNZ direct,erl ;直接地址单元减1,非零转移17 NOP ;空操作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1)数据传送类指令(7种助记符)MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送;MOVC(Move Code)读取程序存储器数据表格的数据传送;MOVX (Move External RAM) 对外部RAM的数据传送;XCH (Exchange) 字节交换;XCHD (Exchange low-order Digit) 低半字节交换;PUSH (Push onto Stack) 入栈;POP (Pop from Stack) 出栈;(2)算术运算类指令(8种助记符)ADD(Addition) 加法;ADDC(Add with Carry) 带进位加法;SUBB(Subtract with Borrow) 带借位减法;DA(Decimal Adjust) 十进制调整;INC(Increment) 加1;DEC(Decrement) 减1;MUL(Multiplication、Multiply) 乘法;DIV(Division、Divide) 除法;(3)逻辑运算类指令(10种助记符)ANL(AND Logic) 逻辑与;ORL(OR Logic) 逻辑或;XRL(Exclusive-OR Logic) 逻辑异或;CLR(Clear) 清零;CPL(Complement) 取反;RL(Rotate left) 循环左移;RLC(Rotate Left throught the Carry flag) 带进位循环左移;RR(Rotate Right) 循环右移;RRC (Rotate Right throught the Carry flag) 带进位循环右移;SWAP (Swap) 低4位与高4位交换;(4)控制转移类指令(17种助记符)ACALL(Absolute subroutine Call)子程序绝对调用;LCALL(Long subroutine Call)子程序长调用;RET(Return from subroutine)子程序返回;RETI(Return from Interruption)中断返回;SJMP(Short Jump)短转移;AJMP(Absolute Jump)绝对转移;LJMP(Long Jump)长转移;CJNE (Compare Jump if Not Equal)比较不相等则转移;DJNZ (Decrement Jump if Not Zero)减1后不为0则转移;JZ (Jump if Zero)结果为0则转移;JNZ (Jump if Not Zero) 结果不为0则转移;JC (Jump if the Carry flag is set)有进位则转移;JNC (Jump if Not Carry)无进位则转移;JB (Jump if the Bit is set)位为1则转移;JNB (Jump if the Bit is Not set) 位为0则转移;JBC(Jump if the Bit is set and Clear the bit) 位为1则转移,并清除该位;NOP (No Operation) 空操作;(5)位操作指令(1种助记符)SETB(Set Bit) 位置1。
MCS-51系列单片机指令以A开头的指令有18条,分别为:ACALL addr11 ADD A,Rn ADD A,direct ADD A,@Ri ADD A,#data ADDC A,RnADDC A,direct ADDC A,@Ri ADDC A,#data AJMP addr11 ANL A,Rn ANL A,direct ANL A,@Ri ANL A,#data ANL direct,A ANL direct,#data ANL C,bit ANL C,/bit1、ACALL addr11指令名称:绝对调用指令指令代码:A10 A9 A9 1 0 0 0 1 A7 A6 A5 A4 A3 A2 A1 A0指令功能:构造目的地址,进行子程序调用。
其方法是以指令提供的11位地址(al0~a0),取代PC的低11位,PC的高5位不变。
操作内容:PC←(PC)+2SP←(SP)+1(SP)←(PC)7~0SP←(SP)+1(SP)←(PC)15~8PC10~0←addrl0~0字节数: 2机器周期:2使用说明:由于指令只给出子程序入口地址的低11位,因此调用范围是2KB。
2、ADD A,Rn指令名称:寄存器加法指令指令代码:28H~2FH指令功能:累加器内容与寄存器内容相加操作内容:A←(A)+(Rn), n=0~7字节数: 1机器周期;1影响标志位:C,AC,OV3、ADD A,direct指令名称:直接寻址加法指令指令代码:25H指令功能:累加器内容与内部RAM单元或专用寄存器内容相加操作内容:A←(A)+(direct)字节数: 2机器周期:1影响标志位:C,AC,OV4、ADD A,@Ri ’指令名称:间接寻址加法指令指令代码:26H~27H指令功能:累加器内容与内部RAM低128单元内容相加操作内容:A←(A)+((Ri)), i=0,1字节数: 1机器周期:1影响标志位:C,AC,OV5、ADD A,#data指令名称:立即数加法指令指令代码:24H指令功能:累加器内容与立即数相加操作内容:A←(A)+data字节数: 2机器周期:1影响标志位:C,AC,OV6、ADDC A,Rn指令名称:寄存器带进位加法指令指令代码:38H~3FH指令功能:累加器内容、寄存器内容和进位位相加操作内容:A←(A)+(Rn)+(C), n=0~7字节数: 1机器周期:1影响标志位:C,AC,OV7、ADDC A,direct指令名称:直接寻址带进位加法指令指令代码:35H指令功能:累加器内容、内部RAM低128单元或专用寄存器内容与进位位加操作内容:A←(A)+(direct)+(C)字节数: 2机器周期:1影响标志位:C,AC,OV8、ADDC A,@Ri指令名称:间接寻址带进位加法指令指令代码:36H~37H指令功能:累加器内容、内部RAM低128单元内容及进位位相加操作内容:A←(A)+((Ri))+(C), i=0,1字节数: 1机器周期:1影响标志位:C,AC,OV9、ADDC A,#data指令名称:立即数带进位加法指令指令代码:34H指令功能:累加器内容、立即数及进位位相加操作内容:A←(A)+data+(C)字节数: 2机器周期:1影响标志位:C,AC,OV10、AJMP addr11指令名称:绝对转移指令指令代码:A10 A9 A8 1 0 0 0 1 A7 A6 A5 A4 A3 A2 A1 A0指令功能:构造目的地址,实现程序转移。
其方法是以指令提供的11位地址,取代PC的低11位,.而PC的高5位保持不变。
操作内容:PC←(PC)+2PCl0~0←addrll字节数: 2机器周期:2使用说明:由于addrll的最小值是000H,最大值是7FFH,因此地址转移范围是2KB。
11、ANL A,Rn指令名称:寄存器逻辑与指令指令代码:58H~5FH指令功能:累加器内容逻辑与寄存器内容操作内容:A←(A)∧(Rn), n=0~7字节数: 1机器周期:112、ANL A,direct指令名称:直接寻址逻辑与指令指令代码:55H指令功能:累加器内容逻辑与内部RAM低128单元或专用寄存器内容操作内容:A←(A)∧(diret)字节数: 2机器周期:113、ANL A,@Ri指令名称:间接寻址逻辑与指令指令代码:56H~57H指令功能:累加器内容逻辑与内部RAM低128单元内容操作内容:A←(A)∧((Ri)) i=0,1字节数: 1机器周期:114、ANL A,#data指令名称:立即数逻辑与指令指令代码:54H指令功能:累加器内容逻辑与立即数操作内容:A←(A)∧data字节数: 2机器周期:115、ANL direct,A指令名称:累加器逻辑与指令指令代码:52H指令功能:内部RAM低128单元或专用寄存器内容逻辑与累加器内容操作内容:direct←(A)∧(direct)字节数: 2机器周期:116、ANL direct, #data指令名称:逻辑与指令指令代码:53H指令功能:内部RAM低128单元或专用寄存器内容逻辑与立即数操作内容:direct←(direct)∧data字节数: 3机器周期:217、ANL C,bit指令名称:位逻辑与指令指令代码:82H指令功能:进位标志逻辑与直接寻址位操作内容:C←(C)∧(bit)字节数: 2机器周期:218、ANL C,/bit指令名称:位逻辑与指令指令代码:B0H指令功能:进位标志逻辑与直接寻址位的反操作内容:C←(C)∧(bit)字节数: 2机器周期:2MCS-51系列单片机指令以C开头的指令有10条,分别为:CJNE A,dircet,rel CJNE A,#data,rel CJNE Rn,#data,rel CJNE @Ri,#data,rel CLR A CLR C CLR bit CPL A CPL C CPL bit1、CJNE A,dircet,rel指令名称:数值比较转移指令指令代码:B5H指令功能:累加器内容与内部RAM低128字节或专用寄存器内容比较,不等则转移。
操作内容:若(A)=(direct),则PC←(PC)+3,C←0若(A)>(direct),则PC←(PC)+3+rel,C←0若(A)<(direct),则PC←(PC)+3+rel,C←1字节数: 3机器周期:22、CJNE A,#data,rel指令名称:数值比较转移指令指令代码:B4H指令功能:累加器内容与立即数比较,不等则转移。
操作内容:若(A)=data,则PC←(PC)+3,C←0若(A)>data,则PC←(PC)+3+rel,C←0若(A)<data,则PC←(PC)+3+rel,C←1字节数: 3机器周期:23、CJNE Rn,#data,rel指令名称:数值比较转移指令指令代码:B8H~BFH指令功能:寄存器内容与立即数比较,不等则转移。
操作内容:若(Rn)=data,则PC←(PC)+3,C←0若(Rn)>data,则PC←(PC)+3+rel,C←0若(Rn)<data,则PC←(PC)+3+rel,C←1字节数: 3机器周期:24、CJNE @Ri,#data,rel指令名称:数值比较转移指令指令代码:B6H~B7H指令功能:内部RAM低128单元内容与立即数比较,不等则转移。
操作内容:若((Ri))=data,则PC←(PC)+3,C←0若((Ri))>data,则PC←(PC)+3+rel,C←0若((Ri))<data,则PC←(PC)+3+rel,C←1字节数: 3机器周期:25、CLR A指令名称:累加器清0指令指令代码:E4H指令功能:累加器清0操作内容:A←0字节数: 1机器周期:16、CLR C指令名称:进位标志清0指令指令代码:C3H指令功能:进位位清0操作内容:C←0字节数: 1机器周期:17、CLR bit指令名称:直接寻址位清0指令指令代码:C2H指令功能:直接寻址位清0操作内容:bit←0字节数: 2机器周期:18、CPL A指令名称:累加器取反指令指令代码:F4H指令功能:累加器取反操作内容:A←(A)字节数: 1机器周期:19、CPL C指令名称:进位标志取反指令指令代码:B3H指令功能:进位标志位状态取反操作内容:C←(c取反)字节数: 1机器周期:110、 CPL bit指令名称:直接寻址位取反指令指令代码:B2H指令功能:直接寻址位取反操作内容:bit←(bit取反)字节数: 2机器周期:1MCS-51系列单片机指令以D开头的指令有8条,分别为:DA A DEC A DEC Rn DEC direct DEC @Ri DIV AB DJNZ Rn,rel DJNZ direct,rel1、DA A指令名称:十进制调整指令指令代码:D4H指令功能:对BCD码加法运算的结果进行有条件的修正操作内容:若(A)3~0>9∨(AC)=1,则A3~0←(A)3~0+6若(A)7~4>9∨(C)=1,则A7~4←(A)7~4+6若(A)7~4=9∧(A)3~0>9,则A7~4←(A)7~4+6字节数: 1机器周期:1使用说明:DA指令不影响溢出标志2、DEC A指令名称:累加器减1指令指令代码:14H指令功能:累加器内容减1操作内容:A←(A)-1字节数: 1机器周期:13、DEC Rn指令名称:寄存器减1指令指令代码:18H~1FH指令功能:寄存器内容减1操作内容:Rn←(Rn)-1,n=0~7字节数: 1机器周期:14、DEC direct指令名称:直接寻址减1指令指令代码:15H指令功能:内部RAM低128单元及专用寄存器内容减1操作内容:direct←(direct)-1字节数: 2机器周期:15、DEC @Ri指令名称:间接寻址减1指令指令代码:16H~17H指令功能:内部RAM低128单元内容减1操作内容:(Ri)←((Ri))-1, i=0,1字节数: 1机器周期:16、DIV AB指令名称:无符号数除法指令;指令代码:84H指令功能:A的内容被B的内容除。