辛普生积分程序 内部RAM数据排序程序(升序) 外部RAM数据排序程序(升序) 外部RAM浮点数排序程序(升序) BCD小数转换为二进制小数(2位) BCD小数转换为二进制小数(N位) BCD整数转换为二进制整数(1位) BCD整数转换为二进制整数(2位) BCD整数转换为二进制整数(3位) BCD整数转换为二进制整数(N位) 二进制小数(2位)转换为十进制小数(分离BCD码) 二进制小数(M位)转换为十进制小数(分离BCD码) 二进制整数(2位)转换为十进制整数(分离BCD码) 二进制整数(2位)转换为十进制整数(组合BCD码) 二进制整数(3位)转换为十进制整数(分离BCD码) 二进制整数(3位)转换为十进制整数(组合BCD码) 二进制整数(M位)转换为十进制整数(组合BCD码) 三字节无符号除法程序(R2R3R4/R7)=(R2)R3R4 余数R7
;辛普生积分程序 ;入口: DPTR,N,COUNT ;占用资源: ACC,R3,R4,R6,R7 ;堆栈需求: 2字节 ;出口: R3,R4 SJF : MOV R7,N MOVX A,@DPTR INC DPTR MOV R4,A MOV R3,#00H DEC R7 SJF1 : MOVX A,@DPTR INC DPTR CLR C RLC A MOV R6,A CLR A RLC A XCH A,R7 JNB ACC.0,SJF2 XCH A,R6 RLC A XCH A,R6 XCH A,R7 RLC A XCH A,R7 SJF2 : XCH A,R7 XCH A,R6 ADD A,R4 MOV R4,A MOV A,R6 ADDC A,R3 MOV R3,A DJNZ R7,SJF1 SJF3 : MOVX A,@DPTR ADD A,R4 MOV R4,A CLR A ADDC A,R3 MOV R3,A MOV R7,#COUNT LCALL NMUL21 MOV A,N MOV B,#03H MUL AB MOV R7,A LCALL NDIV31 RET NMUL21 : MOV A,R4 MOV B,R7 MUL AB MOV R4,A MOV A,B XCH A,R3 MOV B,R7 MUL AB ADD A,R3 MOV R3,A CLR A ADDC A,B MOV R2,A CLR OV RET NDIV31 : MOV B,#10H NDV311 : CLR C MOV A,R4 RLC A MOV R4,A MOV A,R3 RLC A MOV R3,A MOV A,R2 RLC A MOV R2,A MOV F0,C CLR C SUBB A,R7 JB F0,NDV312 JC NDV313 NDV312 : MOV R2,A INC R4 NDV313 : DJNZ B,NDV311 RET ;内部RAM数据排序程序(升序) ;入口: R0(起始地址),N(数据个数) ;占用资源: ACC,B,R5,R6,R7 ;堆栈需求: 2字节 ;出口: R0 ISELSORT : MOV R7,N DEC R7 ISST1: MOV A,R7 MOV R6,A MOV A,R0 MOV R1,A MOV R2,A MOV B,@R1 ISST2: INC R1 MOV A,@R1 CLR C SUBB A,B JC ISST3 MOV A,R1 MOV R2,A MOV B,@R1 ISST3: DJNZ R6,ISST2 MOV A,B XCH A,@R1 MOV B,R2 MOV R1,B MOV @R1,A DJNZ R7,ISST1 RET ;外部RAM数据排序程序(升序) ;入口: ADDPH,ADDPL(起始地址),N(数据个数) ;占用资源: ACC,B,R0,R1,R5,R7 ;堆栈需求: 2字节 ;出口: ADDPH-ADDPL ESELSORT : MOV R7,N DEC R7 ESST1: MOV A,R7 MOV R6,A MOV DPL,ADDPL MOV R1,DPL MOV DPH,ADDPH MOV R0,DPH MOVX A,@DPTR MOV B,A ESST2: INC DPTR MOVX A,@DPTR CLR C SUBB A,B JC ESST3 MOV R0,DPL MOV R1,DPH MOVX A,@DPTR MOV B,A ESST3: DJNZ R6,ESST2 MOVX A,@DPTR XCH A,B MOVX @DPTR,A MOV DPL,R0 MOV DPH,R1 MOV A,B MOVX @DPTR,A DJNZ R7,ESST1 RET ;外部RAM浮点数排序程序(升序) ;入口: ADDPH,ADDPL(起始地址),N(数据个数) ;占用资源: ACC,B,R0,R1,R2,R3,R4,R5,R6,R7,NCNT ;堆栈需求: 5字节 ;出口: ADDPH,ADDPL FSORT: MOV A,N MOV NCNT,A DEC NCNT FST1 : MOV B,NCNT MOV DPL,ADDPL MOV R1,DPL MOV DPH,ADDPH MOV R0,DPH MOVX A,@DPTR MOV R2,A INC DPTR MOVX A,@DPTR MOV R3,A INC DPTR MOVX A,@DPTR MOV R4,A FST2 : INC DPTR MOVX A,@DPTR MOV R5,A INC DPTR MOVX A,@DPTR MOV R6,A INC DPTR MOVX A,@DPTR MOV R7,A PUSH B LCALL FCMP POP B JNC FST4 MOV A,DPL CLR C SUBB A,#02H MOV R1,A MOV R0,DPH JNC FST3 DEC R0 FST3 : MOV A,R5 MOV R2,A MOV A,R6 MOV R3,A MOV A,R7 MOV R4,A FST4 : DJNZ B,FST2 MOV A,DPL CLR C SUBB A,#02H MOV DPL,A JNC FST5 DEC DPH FST5 : MOV A,R2 MOVX @DPTR,A INC DPTR MOV A,R3 MOVX @DPTR,A INC DPTR MOV A,R4 MOVX @DPTR,A MOV A,R0 MOV P2,A MOV A,R5 MOVX @R1,A INC R1 MOV A,R6 MOVX @R1,A INC R1 MOV A,R7 MOVX @R1,A DJNZ NCNT,FST1 RET ;BCD小数转换为二进制小数(2位) ;入口: R0(低位首址),R7 ;占用资源: ACC,B,R5 ;堆栈需求: 2字节 ;出口: R3,R4 PDTB : CLR A MOV R3,A MOV R4,A PDB1 : MOV A,R3 MOV B,#9AH MUL AB MOV R5,B XCH A,R4 MOV B,#19H MUL AB ADD A,R4 MOV A,R5 ADDC A,B MOV R5,A MOV A,@R0 MOV B,#9AH MUL AB ADD A,R5 MOV R4,A CLR A ADDC A,B XCH A,R3 MOV B,#19H MUL AB ADD A,R4 MOV R4,A MOV A,B ADDC A,R3 MOV R3,A MOV A,@R0 MOV B,#19H MUL AB ADD A,R3 MOV R3,A DEC R0 DJNZ R7,PDB1 RET ;BCD小数转换为二进制小数(N位) ;入口: R1(低位首址),M,N ;占用资源: ACC,B,R2,R3,R7 ;堆栈需求: 2字节 ;出口: R0 PDTBMN : MOV A,R0 MOV R2,A MOV A,R1 MOV R3,A MOV B,N CLR A PDBMN1 : MOV @R0,A INC R0 DJNZ B,PDBMN1 MOV A,N SWAP A RR A MOV R7,A PDBMN2 : MOV A,R2 MOV R0,A MOV A,R3 MOV R1,A MOV B,M CLR C PDBMN3 : MOV A,@R1 ADDC A,@R1 DA A JNB ACC.4,PDBMN4 SETB C CLR ACC.4 PDBMN4 : MOV @R1,A INC R1 DJNZ B,PDBMN3 MOV B,N PDBMN5 : MOV A,@R0 RLC A MOV @R0,A INC R0 DJNZ B,PDBMN5 DJNZ R7,PDBMN2 MOV A,R2 MOV R0,A RET ;BCD整数转换为二进制整数(1位) ;入口: R0(高位地址),R7 ;占用资源: ACC,B ;堆栈需求: 2字节 ;出口: R4 IDTB1: CLR A MOV R4,A IDB11: MOV A,R4 MOV B,#0AH MUL AB ADD A,@R0 INC R0 MOV R4,A DJNZ R7,IDB11 RET ;BCD整数转换为二进制整数(2位) ;入口: R0(高位地址),R7 ;占用资源: ACC,B ;堆栈需求: 2字节 ;出口: R3,R4 IDTB2: CLR A MOV R3,A MOV R4,A IDB21: MOV A,R4 MOV B,#0AH MUL AB MOV R4,A MOV A,B XCH A,R3 MOV B,#0AH MUL AB ADD A,R3 MOV R3,A MOV A,R4 ADD A,@R0 INC R0 MOV R4,A CLR A ADDC A,R3 MOV R3,A DJNZ R7,IDB21 RET ;BCD整数转换为二进制整数(3位) ;入口: R0(高位地址),R7 ;占用资源: ACC,B ;堆栈需求: 2字节 ;出口: R2,R3,R4 IDTB3: CLR A MOV R2,A MOV R3,A MOV R4,A IDB31: MOV A,R4 MOV B,#0AH MUL AB MOV R4,A MOV A,B XCH A,R3 MOV B,#0AH MUL AB ADD A,R3 MOV R3,A CLR A ADDC A,B XCH A,R2 MOV B,#0AH MUL AB ADD A,R2 MOV R2,A MOV A,R4 ADD A,@R0 INC R0 MOV R4,A CLR A ADDC A,R3 MOV R3,A CLR A ADDC A,R2 MOV R2,A DJNZ R7,IDB31 RET ;BCD整数转换为二进制整数(N位) ;入口: R1(高位地址),M,N ;占用资源: ACC,B,R2,R7,NCNT,F0 ;堆栈需求: 2字节 ;出口: R0 IDTBMN : MOV A,R0 MOV R2,A MOV B,N CLR A IDBMN1 : MOV @R0,A INC R0 DJNZ B,IDBMN1 MOV A,R2 MOV R0,A MOV A,M MOV NCNT,A IDBMN2 : MOV R7,N CLR A CLR F0 IDBMN3 : XCH A,@R0 MOV B,#0AH MUL AB MOV C,F0 ADDC A,@R0 MOV F0,C MOV @R0,A INC R0 MOV A,B DJNZ R7,IDBMN3 MOV A,R2 MOV R0,A MOV A,@R1 INC R1 ADD A,@R0 MOV @R0,A DJNZ NCNT,IDBMN2 RET ;二进制小数(2位)转换为十进制小数(分离BCD码) ;入口: R3,R4,R7 ;占用资源: ACC,B ;堆栈需求: 3字节 ;出口: R0 PBTD : MOV A,R7 PUSH A PBD1 : MOV A,R4 MOV B,#0AH MUL AB MOV R4,A MOV A,B XCH A,R3 MOV B,#0AH MUL AB ADD A,R3 MOV R3,A CLR A ADDC A,B MOV @R0,A INC R0 DJNZ R7,PBD1 POP A MOV R7,A MOV A,R0 CLR C SUBB A,R7 MOV R0,A RET ;二进制小数(M位)转换为十进制小数(分离BCD码) ;入口: R1,M,N ;占用资源: ACC,B,R2,R3,R7,NCNT ;堆栈需求: 2字节 ;出口: R0 PBTDMN : MOV A,R0 MOV R2,A MOV A,R1 MOV R3,A MOV A,N MOV NCNT,A PBDMN1 : MOV R7,M CLR A CLR F0 PBDMN2 : XCH A,@R1 MOV B,#0AH MUL AB MOV C,F0 ADDC A,@R1 MOV F0,C MOV @R1,A INC R1 MOV A,B DJNZ R7,PBDMN2 ADDC A,#00H MOV @R0,A INC R0 MOV A,R3 MOV R1,A DJNZ NCNT,PBDMN1 MOV A,R2 MOV R0,A RET ;二进制整数(2位)转换为十进制整数(分离BCD码) ;入口: R3,R4 ;占用资源: ACC,R2,NDIV31 ;堆栈需求: 5字节 ;出口: R0,NCNT IBTD21 : MOV NCNT,#00H MOV R2,#00H IBD211 : MOV R7,#0AH LCALL NDIV31 MOV A,R7 MOV @R0,A INC R0 INC NCNT MOV A,R3 ORL A,R4 JNZ IBD211 MOV A,R0 CLR C SUBB A,NCNT MOV R0,A RET ;二进制整数(2位)转换为十进制整数(组合BCD码) ;入口: R3,R4 ;占用资源: ACC,B,R7 ;堆栈需求: 3字节 ;出口: R0 IBTD22 : MOV A,R0 PUSH A MOV R7,#03H CLR A IBD221 : MOV @R0,A INC R0 DJNZ R7,IBD221 POP A MOV R0,A MOV R7,#10H IBD222 : PUSH A CLR C MOV A,R4 RLC A MOV R4,A MOV A,R3 RLC A MOV R3,A MOV B,#03H IBD223 : MOV A,@R0 ADDC A,@R0 DA A MOV @R0,A INC R0 DJNZ B,IBD223 POP A MOV R0,A DJNZ R7,IBD222 RET ;二进制整数(3位)转换为十进制整数(分离BCD码) ;入口: R2,R3,R4 ;占用资源: ACC,R2,NDIV31 ;堆栈需求: 5字节 ;出口: R0,NCNT IBTD31 : CLR A MOV NCNT,A IBD311 : MOV R7,#0AH LCALL NDIV31 MOV A,R7 MOV @R0,A INC R0 INC NCNT MOV A,R2 ORL A,R3 ORL A,R4 JNZ IBD311 MOV A,R0 CLR C SUBB A,NCNT MOV R0,A RET ;二进制整数(3位)转换为十进制整数(组合BCD码) ;入口: R2,R3,R4 ;占用资源: ACC,B,R7 ;堆栈需求: 3字节 ;出口: R0 IBTD32 : MOV A,R0 PUSH A MOV R7,#04H CLR A IBD321 : MOV @R0,A INC R0 DJNZ R7,IBD321 POP A MOV R0,A MOV R7,#18H IBD322 : PUSH A CLR C MOV A,R4 RLC A MOV R4,A MOV A,R3 RLC A MOV R3,A MOV A,R2 RLC A MOV R2,A MOV B,#04H IBD323 : MOV A,@R0 ADDC A,@R0 DA A MOV @R0,A INC R0 DJNZ B,IBD323 POP A MOV R0,A DJNZ R7,IBD322 RET ;二进制整数(M位)转换为十进制整数(组合BCD码) ;入口: R1,M,N ;占用资源: ACC,B,R2,R3,R7 ;堆栈需求: 2字节 ;出口: R0 IBTDMN : MOV A,R0 MOV R2,A MOV A,R1 MOV R3,A MOV B,N CLR A IBDMN1 : MOV @R0,A INC R0 DJNZ B,IBDMN1 MOV A,M SWAP A RR A CLR C MOV R7,A IBDMN2 : MOV A,R2 MOV R0,A MOV A,R3 MOV R1,A MOV B,M IBDMN3 : MOV A,@R1 RLC A MOV @R1,A INC R1 DJNZ B,IBDMN3 MOV B,N IBDMN4 : MOV A,@R0 ADDC A,@R0 DA A JNB ACC.4,IBDMN5 SETB C CLR ACC.4 IBDMN5 : MOV @R0,A INC R0 DJNZ B,IBDMN4 DJNZ R7,IBDMN2 MOV A,R2 MOV R0,A RET ;三字节无符号除法程序(R2R3R4/R7)=(R2)R3R4 余数R7 ;入口: R2,R3,R4,R7 ;占用资源: ACC,B,F0 ;堆栈需求: 3字节 ;出口: (R2),R3,R4,R7,OV NDIV31 : MOV A,R2 MOV B,R7 DIV AB PUSH A MOV R2,B MOV B,#10H NDV311 : CLR C MOV A,R4 RLC A MOV R4,A MOV A,R3 RLC A MOV R3,A MOV A,R2 RLC A MOV R2,A MOV F0,C CLR C SUBB A,R7 JB F0,NDV312 JC NDV313 NDV312 : MOV R2,A INC R4 NDV313 : DJNZ B,NDV311 POP A CLR OV JZ NDV314 SETB OV NDV314 : XCH A,R2 MOV R7,A RET
|