51单片机二进制数转换成十进制数一段精典小程序,谁来帮我分析一下,再下新就是搞不明白为什么!!!!

16位二进制数转换成十进制BCD码,,设R6R7的内容为16进制数,要求转换结果存入R2R3R4
程序如下:MOV
ORG 8000H
BCDT: MOV R5,#16;设置计数值
CLR A
MOV R2,A;存放结果寄存器清0
MOV R3,A
MOV R4,A
LOOP:CLR C
MOV A,R7;取被转换二进制数乘2
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV A,R4;乘2加b后经十进制调整后转换成BCD码存R2R3R4
ADDC A,R4
DA A
MOV R4,A
MOV A,R3
ADDC A,R3
DA A
MOV R3,A
MOV A,R2
ADDC A,R2
DA A
MOV R2,A
ADDC A,R2
DA A
MOV R2,A
DJNZ R5,LOOP
RET
END

就这个书本上的程序,小弟看不懂为什么,烦请为小弟讲述具体过程,原理,带实例,和图更佳,万谢!

不推荐把这个程序弄懂,它只是一个转换程序,知道怎么用就行了,而且在汇编中才用。
想花时间看懂的话,注意看明白 RLC A,这句语言还影响了标志C位,C位带到了下面的ADDC进位了计算。

以1101为例转化为BCD值,RLC A 是把16位2进制向高端移出一位,举例的数为0000000000001101前位全为0不管它,我们从1101开始。
1101第一位是1,1移动到C位经过ADDC A R4 运算 R4=0x01;
1101第二位是1,1移动到c 位经过ADDC A R4 运算 R4=0x03;
1101第三位是0,0移动到c 位经过ADDC A R4 运算 R4=0x06;
1101第四位是1,1移动到C位经过ADDC A R4 运算 R4=0x13;
1101 “=”13
温馨提示:答案为网友推荐,仅供参考
相似回答