BCD_TEMP_1 EQU 30H
BCD_TEMP_2 EQU 31H
BCD_TEMP_3 EQU 32H
BCD_HEX_1:
MOV B,#10H ;分离十位和个位
DIV AB
MOV R5,B ;暂存个位
MOV B,#10 ;将十位转换成十六进制
MUL AB
ADD A,R5 ;按十六进制加上个位
RET
BH2功能 : 三字节BCD码整数转换成三字节十六进制整数
入口条件: 待转换的三字节BCD码整数在30H,31H,32H中。
出口信息: 转换后的三字节十六进制整数仍在30H,31H,32H中。
BCD_HEX_3:
MOV A,BCD_TEMP_1 ;将低字节转换成十六进制
LCALL BCD_HEX_1
MOV BCD_TEMP_1,A
MOV A,BCD_TEMP_2 ;将高字节转换成十六进制
LCALL BCD_HEX_1
MOV B,#100 ;扩大一百倍
MUL AB
ADD A,BCD_TEMP_1 ;和低字节按十六进制相加
MOV BCD_TEMP_1,A
CLR A
ADDC A,B
MOV BCD_TEMP_2,A
MOV R7,BCD_TEMP_3 ;扩大一万倍
MOV R4,#10H
MOV R3,#27H
LCALL NMUL21 ;单字节无符号数乘法程序,结果在R2R3R4
MOV R7,BCD_TEMP_1
MOV R6,BCD_TEMP_2
MOV R5,#00H
LCALL NADD3 ;和低双字节按十六进制相加
MOV BCD_TEMP_1,R4
MOV BCD_TEMP_2,R3
MOV BCD_TEMP_3,R2
RET
;三字节无符号数加法程序 (R2R3R4+R5R6R7)=(R2R3R4)
;入口 :R2,R3,R4,R5,R6,R7
;占用资源:ACC
;堆栈需求:2字节
;出口 :R2,R3,R4,CF
NADD3: MOV A,R4
ADD A,R7
MOV R4,A
MOV A,R3
ADDC A,R6
MOV R3,A
MOV A,R2
ADDC A,R5
MOV R2,A
RET
;单字节无符号数乘法程序 (R3R4*R7)=(R2R3R4)
;入口 :R3,R4,R7
;占用资源:ACC,B
;堆栈需求:2字节
;出口 :R2,R3,R4
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