;格式转换类BIN→BCD----
BINTOBCDA1: DB 00H, 16H, 32H, 48H, 64H, 80H, 96H, 12H
;BINTOBCDA.ASM:单字节BIN→BCD,A→A。(A.7自动去除,低7位<100)
;影响:PSW,A,B。
BINTOBCDA: PUSH DPH
PUSH DPL
PUSH ACC
SWAP A
ANL A, #C_07H
MOV DPTR, #BINTOBCDA1
MOVC A, @A+DPTR
MOV DPL, A
POP ACC
ANL A, #C_0FH
ADD A, #0
DA A
ADD A, DPL
DA A
POP DPL
POP DPH
RET
;A_TOBCD_BA.ASM:单字节BIN→BCD,A→BA。
;影响:PSW,A,B。
A_TOBCD_BA: PUSH ACC
ANL A, #C_3FH
CALL BINTOBCDA ;先处理低6位<64
;再处理高二位
POP B
ANL B, #11000000B ;只留两个可能产生>99的位
JBC B.6, A_BCD_BA1 ;需要+64
JMP A_BCD_BA2
;B.6=1则BA+64
A_BCD_BA1: ADD A, #C_64H
DA A
JNC A_BCD_BA2
INC B ;进位到百
A_BCD_BA2: JBC B.7, A_BCD_BA3 ;需要+128
JMP A_BCD_BA4
;B.7=1则BA+128
A_BCD_BA3: ADD A, #C_28H
DA A
XCH A, B ;百位交换到A
ADDC A, #C_1 ;百位+100并带进位
XCH A, B ;百位换回
A_BCD_BA4: RET |