;二进制整数(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