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、 单字节折半查找程序

;片内RAM初始化子程序IBCLR :MOV A,R0MOV R1,ACLR AIBC1 :MOV @R1,AINC R1DJNZ R7,IBC1RET;片外RAM初始化子程序EBCLR1 :MOV A,ADDPLMOV DPL,AMOV A,ADDPHMOV DPH,ACLR CEBC11 :MOVX @DPTR,AINC DPTRDJNZ R7,EBC11RET;片外RAM初始化子程序(双字节个单元)EBCLR2 :MOV A,ADDPLMOV DPL,AMOV A,ADDPHMOV DPH,AMOV A,R7JZ EBC21INC R6EBC21 :CLR AMOVX @DPTR,AINC DPTRDJNZ R7,EBC21DJNZ R6,EBC21RET

;内部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,IBM1RET;外部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,EBM11RET;外部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,EBM21RET;外部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,ITEM1RET;限幅滤波程序;入口 :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,ARET;中位值滤波程序;入口 :ADDPH,ADDPL,N;占用资源:ESELSORT;堆栈需求:4字节;出口 :AMEDFILT :LCALL ESELSORTMOV A,NCLR CRRC AADD A,ADDPLMOV DPL,AMOV A,ADDPHMOV DPH,AJNC MEDFT1INC DPHMEDFT1 :MOVX A,@DPTRRET;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,R4RET;N点加权平均滤波;入口 :ADDPH,ADDPL,N;占用资源:B,R3,R4;堆栈需求:2字节;出口 :AQAVFILT :CLR AMOV R3,AMOV R4,AMOV R7,NMOV P2,ADDPHMOV R1,ADDPLMOV DPTR,#QAVTABQAVFT1 :MOVC A,@A+DPTRMOV 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 :DB;一阶加权滞后滤波程序;入口 :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 :DB 80H,80H;双字节取补程序 /(R3R4)=(R3R4);入口 :R3,R4;占用资源:ACC;堆栈需求:2字节;出口 :R3,R4CMPT :MOV A,R4CPL AADD A,#01HMOV R4,AMOV A,R3CPL AADDC A,#00HMOV R3,ARET;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,BRET;双字节无符号数加法程序 (R3R4+R6R7)=(R3R4);入口 :R3,R4,R6,R7;占用资源:ACC;堆栈需求:2字节;出口 :R3,R4,CFNADD :MOV A,R4ADD A,R7MOV R4,AMOV A,R3ADDC A,R6MOV R3,ARET

;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,BRET;双字节无符号数减法程序 (R3R4-R6R7)=(R3R4);入口 :R3,R4,R6,R7;占用资源:ACC;堆栈需求:2字节;出口 :R3,R4NSUB :MOV A,R4CLR CSUBB A,R7MOV R4,AMOV A,R3SUBB A,R6MOV R3,ARET;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,BRET;单字节无符号数乘法程序 (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 OVRET;单字节无符号数乘法程序 (R2R3R4*R7)=(R5R2R3R4);入口 :R2,R3,R4,R6,R7;占用资源:ACC,B;堆栈需求:2字节;出口 :R5,R2,R3,R4NMUL31 :MOV A,R4MOV B,R7MUL ABMOV 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 OVRET;单字节无符号数乘法程序 (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,BXCH A,R2MOV B,R7MUL ABADD A,R2MOV R2,ACLR AADDC A,BXCH A,R5MOV B,R7MUL ABADD A,R5MOV R5,ACLR AADDC A,BMOV R7,ACLR OVRET;双字节无符号数乘法程序 (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 ABADD A,R5MOV 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 OVRET;双字节无符号数乘法程序 (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,R7MUL ABADD A,R5MOV R5,AMOV A,BADDC A,R1MOV R1,ACLR AADDC A,#00HXCH A,R3MOV B,R6MUL ABADD A,R1MOV R1,AMOV A,BADDC A,R3XCH A,R5MOV R3,AMOV A,R2MOV B,R7MUL ABADD A,R1MOV R1,AMOV A,BADDC A,R5MOV R5,ACLR AADDC A,#00HXCH A,R2MOV B,R6MUL ABADD A,R5MOV R5,AMOV A,BADDC A,R2XCH A,R1MOV R2,ACLR OVRET;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,ARET;单字节无符号除法程序 (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,ARET;单字节无符号除法程序 (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,ARET;双字节无符号除法程序 (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,NDV423POP ACLR OVJNZ NDV426SETB OVNDV426 :XCH A,R2MOV R7,AMOV A,R5MOV R6,APOP AMOV R1,ARET;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,ARET;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,#00HNDVMN1 :MOV R7,NCLR CNDVMN2 :MOV A,@R0SUBB A,@R1MOV @R0,AINC R0INC R1DJNZ R7,NDVMN2MOV A,R4MOV R0,AMOV A,R5MOV R1,AJC NDVMN3INC R2SJMP NDVMN1NDVMN3 :MOV R7,NCLR CNDVMN4 :MOV A,@R0ADDC A,@R1MOV @R0,AINC R0INC R1DJNZ R7,NDVMN4MOV A,#08HMUL ABMOV B,ANDVMN5 :MOV A,R3MOV R0,AMOV R7,MCLR CNDVMN6 :MOV A,@R0RLC AMOV @R0,AINC R0DJNZ R7,NDVMN6MOV F0,CMOV A,R4MOV R0,AMOV A,R5MOV R1,AMOV R7,NCLR CNDVMN7 :MOV A,@R0SUBB A,@R1MOV @R0,AINC R0INC R1DJNZ R7,NDVMN7JB F0,NDVMNBJC NDVMN8NDVMNB :MOV A,R3MOV R0,AINC @R0SJMP NDVMNANDVMN8 :MOV R7,NMOV A,R4MOV R0,AMOV A,R5MOV R1,ACLR CNDVMN9 :MOV A,@R0ADDC A,@R1MOV @R0,AINC R0INC R1DJNZ R7,NDVMN9NDVMNA :DJNZ B,NDVMN5MOV A,MCLR CSUBB A,NADD A,R3MOV R1,AMOV A,R2MOV @R1,AMOV A,R3MOV R0,ARET;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,BRET;原码有符号双字节减法程序 (R3R4-R6R7)=R3R4;入口 :R3,R4,R6,R7;占用资源:ACC,DADD;堆栈需求:6字节;出口 :R3,R4,OVDSUB :MOV A,R6CPL ACC.7MOV R6,ALCALL DADDRET;原码有符号双字节加法程序 (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 C,ACC.7MOV 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 DAB1;原码有符号双字节乘法程序 (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,R6CLR ACC.7MOV R6,ALCALL NMUL22MOV A,R5MOV C,SR0MOV ACC.7,CMOV R5,ARET;原码有符号双字节除法程序 (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 OVRET;单字节顺序查找程序;入口 :R0,R1,A,R7;占用资源:B;堆栈需求:2字节;出口 :R0,R1,AFINDB1 :MOV B,AMOV DPL,R1MOV DPH,R0FINDB11 :MOVX A,@DPTRCJNE A,B,FINDB12MOV R1,DPLMOV R0,DPHCLR ARETFINDB12 :INC DPTRDJNZ R7,FINDB11MOV A,#0FFHRET;单字节顺序查找程序;入口 :R0,R1,A,R6,R7;占用资源:B;堆栈需求:2字节;出口 :R0,R1,AFINDB2 :MOV B,AMOV DPL,R1MOV DPH,R0MOV A,R7JZ FINDB21INC R6FINDB21 :MOVX A,@DPTRCJNE A,B,FINDB22MOV R1,DPLMOV R0,DPHCLR ARETFINDB22 :INC DPTRDJNZ R7,FINDB21DJNZ R6,FINDB21MOV A,#0FFHRET;双字节字符串顺序查找程序;入口 :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,#0FFHRET;双字节字符串顺序查找程序;入口 :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,#0FFHRET;N字节字符串顺序查找程序;入口 :ADDPH,ADDPL,R0,R6,R7,N;占用资源:ACC,B,R2,NCNT;堆栈需求:2字节;出口 :ADDPH,ADDPL,AFINDN :MOV A,R0MOV R2,AMOV A,ADDPLMOV DPL,AMOV A,ADDPHMOV DPH,AMOV A,R7JZ FINDN1INC R6FINDN1 :MOV A,R2MOV R0,AMOV A,NMOV 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,#0FFHRET;单字节最值查找程序;入口 :R0,R1,R6,R7;占用资源:ACC,B;堆栈需求:2字节;出口 :R0(最大值),R1(最小值),R2,R3,R4,R5FMAMIB :MOV DPL,R1MOV DPH,R0MOVX A,@DPTRMOV R0,AMOV R1,AMOV A,DPLMOV R3,AMOV R5,AMOV A,DPHMOV R2,AMOV R4,AMOV A,R7JZ FMMB1INC R6FMMB1 :MOVX A,@DPTRMOV 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,FMMB1RET;浮点数顺序查找程序;入口 :R0,R1,R2,R3,R4,R6,R7;占用资源:B,NCNT,FCMP;堆栈需求:2字节;出口 :R0,R1,AFINDF :MOV DPL,R1MOV DPH,R0MOV A,R7MOV B,AMOV 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,#0FFHRET;浮点数最值查找程序;入口 :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 NCNTFMMF1 :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 FMMF3FMMF2 :MOV A,R0XCH A,R1MOV R0,ALCALL MOVR1LCALL FCMPMOV A,R0XCH A,R1MOV R0,AJZ FMMF3JC FMMF3LCALL MOVBMOV R3,DPLMOV R2,DPHFMMF3 :POP BDJNZ B,FMMF1DJNZ NCNT,FMMF1RET;单字节折半查找程序;入口 :A,R0,R1,R6,R7;占用资源:B,R2;堆栈需求:2字节;出口 :R0,R1SEARCHB :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 SECH1SECH3 :JZ SECH5MOV A,DPLSUBB A,#01HMOV R7,AJNC SECH4MOV R6,DPHDEC R6SECH4 :SJMP SECH1SECH5 :MOV R0,DPHMOV R1,DPLCLR ARET

本文原创来源:电气TV网,欢迎收藏本网址,收藏不迷路哦!

相关阅读

添加新评论