本帖最后由 liht1634 于 2010-4-30 10:30 编辑
下面这段程序一直没搞懂它的执行过程,望赐教!
;功能;单字节十六进制数转三位单字节BCD码
;入口:单字节十六进制数存R5
;出口:单字节BCD码存:百位R2,十位R3,个位R4
;影响单元:R0,R1,R6
HEX2BCD:
CLR A ;BCD码初始化
MOV R0, A
MOV R1, A
MOV R6, #08H ;转换单字节八进制整数
HEX2BCD_N0:
MOV A, R5
RLC A ;从高端移出待转换数的一位到CY中
MOV R5, A
MOV A, R1 ;BCD码带进位自身相加,相当于乘2
ADDC A, R1
DA A ;十进制调整
MOV R1, A
MOV A, R0
ADDC A, R0
MOV R0, A ;百位不可能超过2,故不需十进制调整
DJNZ R6, HEX2BCD_N0 ;处理完8BIT
MOV A,R1 ;压缩BCD码转单字节BCD码
ANL A,#0FH
MOV R4,A
MOV A,R1
SWAP AANL A,#0FH
MOV R3,A
MOV A,R0
ANL A,#0FH
MOV R2,A
RET |