;格式轉換類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 |