我需要把四字节的BCD码转换为四字节的十六进制数。可是没有思路。下面是双字节的BCD码转换为双字节的十六进制数:
;标号: BH2 功能:双字节BCD码整数转换成双字节十六进制整数
; 入口条件:待转换的双字节BCD码整数在R2、R3中。
; 出口信息:转换后的双字节十六进制整数仍在R2、R3中。
; 影响资源:PSW、A、B、R2、R3、R4 堆栈需求: 4字节
BH2: MOV A,R3 ;;将低字节转换成十六进制
LCALL BCDH
MOV R3,A
MOV A,R2 ;;将高字节转换成十六进制
LCALL BCDH
MOV B,#100 ;;扩大一百倍
MUL AB
ADD A,R3 ;;和低字节按十六进制相加
MOV R3,A
CLR A
ADDC A,B
MOV R2,A
RET
标号:BCDH 功能:单字节BCD码整数转换成单字节十六进制整数
; 入口条件:待转换的单字节BCD码整数在累加器A中。
; 出口信息:转换后的单字节十六进制整数仍在累加器A中。
; 影响资源:PSW、A、B、R4 堆栈需求: 2字节
BCDH: MOV B,#10H ;;分离十位和个位
DIV AB
MOV R4,B ;;暂存个位
MOV B,#10 ;;将十位转换成十六进制
MUL AB
ADD A,R4 ;;按十六进制加上个位
RET
我按照BH2的方法先将四个字节分别转换,再把第二字节×100+第三字节×128+第四字节×192 是错误的。请大家给个正确思路。
【请教】51汇编子程序的问题