51单片机汇编程序集2.docx
《51单片机汇编程序集2.docx》由会员分享,可在线阅读,更多相关《51单片机汇编程序集2.docx(19页珍藏版)》请在冰豆网上搜索。
51单片机汇编程序集2
辛普生积分程序
内部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=(R2R3R4余数R7;辛普生积分程序
;入口:
DPTR,N,COUNT
;占用资源:
ACC,R3,R4,R6,R7
;堆栈需求:
2字节
;出口:
R3,R4
SJF:
MOVR7,N
MOVXA,@DPTR
INCDPTR
MOVR4,A
MOVR3,#00H
DECR7
SJF1:
MOVXA,@DPTRINCDPTR
CLRC
RLCA
MOVR6,A
CLRA
RLCA
XCHA,R7
JNBACC.0,SJF2
XCHA,R6
RLCA
XCHA,R6
XCHA,R7
RLCA
XCHA,R7
SJF2:
XCHA,R7
XCHA,R6
ADDA,R4
MOVR4,A
MOVA,R6
MOVR3,A
DJNZR7,SJF1
SJF3:
MOVXA,@DPTRADDA,R4
MOVR4,A
CLRA
ADDCA,R3
MOVR3,A
MOVR7,#COUNTLCALLNMUL21
MOVA,N
MOVB,#03H
MULAB
MOVR7,A
LCALLNDIV31
RET
NMUL21:
MOVA,R4MOVB,R7
MULAB
MOVR4,A
MOVA,B
XCHA,R3
MOVB,R7
MULAB
MOVR3,A
CLRA
ADDCA,B
MOVR2,A
CLROV
RET
NDIV31:
MOVB,#10HNDV311:
CLRC
MOVA,R4
RLCA
MOVR4,A
MOVA,R3
RLCA
MOVR3,A
MOVA,R2
RLCA
MOVR2,A
MOVF0,C
CLRC
SUBBA,R7
JBF0,NDV312
JCNDV313
NDV312:
MOVR2,AINCR4
NDV313:
DJNZB,NDV311RET
;内部RAM数据排序程序(升序;入口:
R0(起始地址,N(数据个数;占用资源:
ACC,B,R5,R6,R7
;堆栈需求:
2字节
;出口:
R0
ISELSORT:
MOVR7,NDECR7
ISST1:
MOVA,R7
MOVR6,A
MOVA,R0
MOVR1,A
MOVR2,A
MOVB,@R1
ISST2:
INCR1
MOVA,@R1
CLRC
SUBBA,B
JCISST3
MOVA,R1
MOVR2,A
MOVB,@R1
ISST3:
DJNZR6,ISST2
XCHA,@R1
MOVB,R2
MOVR1,B
MOV@R1,A
DJNZR7,ISST1
RET
;外部RAM数据排序程序(升序
;入口:
ADDPH,ADDPL(起始地址,N(数据个数;占用资源:
ACC,B,R0,R1,R5,R7
;堆栈需求:
2字节
;出口:
ADDPH-ADDPL
ESELSORT:
MOVR7,N
DECR7
ESST1:
MOVA,R7
MOVR6,A
MOVDPL,ADDPL
MOVR1,DPL
MOVDPH,ADDPH
MOVR0,DPH
MOVXA,@DPTR
MOVB,A
ESST2:
INCDPTR
MOVXA,@DPTR
SUBBA,B
JCESST3
MOVR0,DPL
MOVR1,DPH
MOVXA,@DPTR
MOVB,A
ESST3:
DJNZR6,ESST2
MOVXA,@DPTR
XCHA,B
MOVX@DPTR,A
MOVDPL,R0
MOVDPH,R1
MOVA,B
MOVX@DPTR,A
DJNZR7,ESST1
RET
;外部RAM浮点数排序程序(升序
;入口:
ADDPH,ADDPL(起始地址,N(数据个数
;占用资源:
ACC,B,R0,R1,R2,R3,R4,R5,R6,R7,NCNT;堆栈需求:
5字节
;出口:
ADDPH,ADDPL
FSORT:
MOVA,N
MOVNCNT,A
DECNCNT
FST1:
MOVB,NCNTMOVDPL,ADDPLMOVR1,DPL
MOVDPH,ADDPHMOVR0,DPHMOVXA,@DPTRMOVR2,A
INCDPTR
MOVXA,@DPTRMOVR3,A
INCDPTR
MOVXA,@DPTRMOVR4,A
FST2:
INCDPTRMOVXA,@DPTRMOVR5,A
INCDPTR
MOVXA,@DPTRMOVR6,A
INCDPTR
MOVXA,@DPTRMOVR7,A
PUSHB
LCALLFCMP
POPB
JNCFST4
MOVA,DPL
CLRC
SUBBA,#02H
MOVR1,A
MOVR0,DPH
JNCFST3
DECR0
FST3:
MOVA,R5MOVR2,A
MOVA,R6
MOVR3,A
MOVA,R7
MOVR4,A
FST4:
DJNZB,FST2MOVA,DPL
CLRC
SUBBA,#02H
MOVDPL,A
JNCFST5
DECDPH
FST5:
MOVA,R2MOVX@DPTR,AINCDPTR
MOVA,R3
MOVX@DPTR,A
INCDPTR
MOVA,R4
MOVX@DPTR,A
MOVA,R0
MOVP2,A
MOVA,R5
MOVX@R1,A
INCR1
MOVA,R6
MOVX@R1,A
INCR1
MOVA,R7
MOVX@R1,A
DJNZNCNT,FST1
RET
;BCD小数转换为二进制小数(2位;入口:
R0(低位首址,R7
;占用资源:
ACC,B,R5
;堆栈需求:
2字节
;出口:
R3,R4
PDTB:
CLRA
MOVR3,A
PDB1:
MOVA,R3MOVB,#9AHMULAB
MOVR5,B
XCHA,R4
MOVB,#19HMULAB
ADDA,R4
MOVA,R5
ADDCA,B
MOVR5,A
MOVA,@R0MOVB,#9AHMULAB
ADDA,R5
MOVR4,A
CLRA
ADDCA,B
XCHA,R3
MOVB,#19HMULAB
ADDA,R4
MOVR4,A
MOVA,B
MOVR3,A
MOVA,@R0
MOVB,#19H
MULAB
ADDA,R3
MOVR3,A
DECR0
DJNZR7,PDB1
RET
;BCD小数转换为二进制小数(N位;入口:
R1(低位首址,M,N
;占用资源:
ACC,B,R2,R3,R7
;堆栈需求:
2字节
;出口:
R0
PDTBMN:
MOVA,R0
MOVR2,A
MOVA,R1
MOVR3,A
MOVB,N
CLRA
PDBMN1:
MOV@R0,A
INCR0
DJNZB,PDBMN1
MOVA,N
SWAPA
RRA
MOVR7,A
PDBMN2:
MOVA,R2MOVR0,A
MOVA,R3
MOVR1,A
MOVB,M
CLRC
PDBMN3:
MOVA,@R1ADDCA,@R1
DAA
JNBACC.4,PDBMN4SETBC
CLRACC.4
PDBMN4:
MOV@R1,AINCR1
DJNZB,PDBMN3
MOVB,N
PDBMN5:
MOVA,@R0RLCA
MOV@R0,A
INCR0
DJNZB,PDBMN5
DJNZR7,PDBMN2
MOVA,R2
MOVR0,A
RET
;BCD整数转换为二进制整数(1位;入口:
R0(高位地址,R7
;占用资源:
ACC,B
;堆栈需求:
2字节
;出口:
R4
IDTB1:
CLRA
MOVR4,A
IDB11:
MOVA,R4
MOVB,#0AH
MULAB
ADDA,@R0
INCR0
MOVR4,A
DJNZR7,IDB11
RET
;BCD整数转换为二进制整数(2位;入口:
R0(高位地址,R7
;占用资源:
ACC,B
;堆栈需求:
2字节
;出口:
R3,R4
IDTB2:
CLRA
MOVR3,A
MOVR4,A
IDB21:
MOVA,R4
MOVB,#0AH
MULAB
MOVR4,A
MOVA,B
XCHA,R3
MOVB,#0AH
MULAB
ADDA,R3
MOVR3,A
MOVA,R4
ADDA,@R0
INCR0
MOVR4,A
CLRA
ADDCA,R3
MOVR3,A
DJNZR7,IDB21
RET
;BCD整数转换为二进制整数(3位;入口:
R0(高位地址,R7
;占用资源:
ACC,B
;堆栈需求:
2字节
;出口:
R2,R3,R4IDTB3:
CLRAMOVR2,A
MOVR3,A
MOVR4,A
IDB31:
MOVA,R4MOVB,#0AHMULAB
MOVR4,A
MOVA,B
XCHA,R3
MOVB,#0AHMULAB
ADDA,R3
MOVR3,A
CLRA
ADDCA,B
XCHA,R2
MOVB,#0AHMULAB
ADDA,R2
MOVR2,A
MOVA,R4
ADDA,@R0
INCR0
MOVR4,A
CLRA
ADDCA,R3
MOVR3,A
CLRA
ADDCA,R2
MOVR2,A
DJNZR7,IDB31
RET
;BCD整数转换为二进制整数(N位;入口:
R1(高位地址,M,N
;占用资源:
ACC,B,R2,R7,NCNT,F0;堆栈需求:
2字节
;出口:
R0
IDTBMN:
MOVA,R0
MOVR2,A
MOVB,N
CLRA
IDBMN1:
MOV@R0,A
INCR0
DJNZB,IDBMN1
MOVA,R2
MOVR0,A
MOVA,M
MOVNCNT,A
IDBMN2:
MOVR7,NCLRA
CLRF0
IDBMN3:
XCHA,@R0MOVB,#0AH
MULAB
MOVC,F0
ADDCA,@R0
MOVF0,C
MOV@R0,A
INCR0
MOVA,B
DJNZR7,IDBMN3MOVA,R2
MOVR0,A
MOVA,@R1
INCR1
ADDA,@R0
MOV@R0,A
DJNZNCNT,IDBMN2RET
;二进制小数(2位转换为十进制小数(分离BCD码;入口:
R3,R4,R7
;占用资源:
ACC,B
;堆栈需求:
3字节
;出口:
R0
PBTD:
MOVA,R7
PUSHA
PBD1:
MOVA,R4
MOVB,#0AH
MULAB
MOVR4,A
MOVA,B
XCHA,R3
MOVB,#0AH
MULAB
ADDA,R3
MOVR3,A
CLRA
ADDCA,B
MOV@R0,A
INCR0
DJNZR7,PBD1
POPA
MOVR7,A
MOVA,R0
CLRC
SUBBA,R7
MOVR0,A
RET
;二进制小数(M位转换为十进制小数(分离BCD码;入口:
R1,M,N
;占用资源:
ACC,B,R2,R3,R7,NCNT
;堆栈需求:
2字节
;出口:
R0
PBTDMN:
MOVA,R0
MOVR2,A
MOVA,R1
MOVR3,A
MOVA,N
MOVNCNT,A
PBDMN1:
MOVR7,M
CLRA
CLRF0
PBDMN2:
XCHA,@R1
MOVB,#0AH
MULAB
MOVC,F0
ADDCA,@R1
MOVF0,C
MOV@R1,A
INCR1
MOVA,B
DJNZR7,PBDMN2
ADDCA,#00H
MOV@R0,A
INCR0
MOVA,R3
MOVR1,A
DJNZNCNT,PBDMN1
MOVA,R2
MOVR0,A
RET
;二进制整数(2位转换为十进制整数(分离BCD码;入口:
R3,R4
;占用资源:
ACC,R2,NDIV31
;堆栈需求:
5字节
;出口:
R0,NCNT
IBTD21:
MOVNCNT,#00H
MOVR2,#00H
IBD211:
MOVR7,#0AH
LCALLNDIV31
MOVA,R7
MOV@R0,A
INCR0
INCNCNT
MOVA,R3
ORLA,R4
JNZIBD211
MOVA,R0
CLRC
SUBBA,NCNT
MOVR0,A
RET
;二进制整数(2位转换为十进制整数(组合BCD码;入口:
R3,R4
;占用资源:
ACC,B,R7
;堆栈需求:
3字节
;出口:
R0
IBTD22:
MOVA,R0
PUSHA
MOVR7,#03H
CLRA
IBD221:
MOV@R0,A
INCR0
DJNZR7,IBD221
POPA
MOVR0,A
MOVR7,#10H
IBD222:
PUSHA
CLRC
MOVA,R4
RLCA
MOVR4,A
MOVA,R3
RLCA
MOVR3,A
MOVB,#03H
IBD223:
MOVA,@R0
ADDCA,@R0
DAA
MOV@R0,A
INCR0
DJNZB,IBD223
POPA
MOVR0,A
DJNZR7,IBD222
RET
;二进制整数(3位转换为十进制整数(分离BCD码;入口:
R2,R3,R4
;占用资源:
ACC,R2,NDIV31
;堆栈需求:
5字节
;出口:
R0,NCNT
IBTD31:
CLRA
MOVNCNT,A
IBD311:
MOVR7,#0AH
LCALLNDIV31
MOVA,R7
MOV@R0,A
INCR0
INCNCNT
MOVA,R2
ORLA,R3
ORLA,R4
JNZIBD311
MOVA,R0
CLRC
SUBBA,NCNT
MOVR0,A
RET
;二进制整数(3位转换为十进制整数(组合BCD码;入口:
R2,R3,R4
;占用资源:
ACC,B,R7
;堆栈需求:
3字节
;出口:
R0
IBTD32:
MOVA,R0
PUSHA
MOVR7,#04H
CLRA
IBD321:
MOV@R0,AINCR0
DJNZR7,IBD321POPA
MOVR0,A
MOVR7,#18H
IBD322:
PUSHACLRC
MOVA,R4
RLCA
MOVR4,A
MOVA,R3
RLCA
MOVR3,A
MOVA,R2
RLCA
MOVR2,A
MOVB,#04H
IBD323:
MOVA,@R0ADDCA,@R0
DAA
MOV@R0,A
INCR0DJNZB,IBD323POPAMOVR0,ADJNZR7,IBD322RET;二进制整数(M位转换为十进制整数(组合BCD码;入口:
R1,M,N;占用资源:
ACC,B,R2,R3,R7;堆栈需求:
2字节;出口:
R0IBTDMN:
MOVA,R0MOVR2,AMOVA,R1MOVR3,AMOVB,NCLRAIBDMN1:
MOV@R0,AINCR0DJNZB,IBDMN1MOVA,MSWAPARRACLRC
MOVR7,AIBDMN2:
MOVA,R2MOVR0,AMOVA,R3MOVR1,AMOVB,MIBDMN3:
MOVA,@R1RLCAMOV@R1,AINCR1DJNZB,IBDMN3MOVB,NIBDMN4:
MOVA,@R0ADDCA,@R0DAAJNBACC.4,IBDMN5SETBCCLRACC.4IBDMN5:
MOV@R0,AINCR0DJNZB,IBDMN4DJNZR7,IBDMN2MOVA,R2MOVR0,ARET
;三字节无符号除法程序(R2R3R4/R7=(R2R3R4余数R7;入口:
R2,R3,R4,R7;占用资源:
ACC,B,F0;堆栈需求:
3字节;出口:
(R2,R3,R4,R7,OVNDIV31:
MOVA,R2MOVB,R7DIVABPUSHAMOVR2,BMOVB,#10HNDV311:
CLRCMOVA,R4RLCAMOVR4,AMOVA,R3RLCAMOVR3,AMOVA,R2RLCAMOVR2,AMOVF0,CCLRCSUBBA,R7JBF0,NDV312
JCNDV313NDV312:
MOVR2,AINCR4NDV313:
DJNZB,NDV311POPACLROVJZNDV314SETBOVNDV314:
XCHA,R2MOVR7,ARET