c51 c语言 16位二进制转换为bcd码,16位二进制转换为BCD码的C51汇编程序

16位二进制转BCD码的程序算法及51汇编实现:

n=b15~b0

n=[b15~b8]*256+[b7~b0]

=[b15~b12]*4096+[b11~b0]

,高四位[b15~b12]取值范围为0~15,代表了4096的个数

n=[b15~b12]*4000+{[b15~b12]*(100-4)+[b11~b0]}

用x 代表[b15~b12],有:

n=x*4000+{x*(100-4)+[b11~b0]

即:n=4*x(千位)+x(百位)+[b11~b0]-4*x

上式中后面的位:[b11~b0]-4*x,如果小于356,就直接转换成BCD码,如果

数值较大,就要把11~7位看成128的个数y,在百位中加上y,在十位加上3*y,并在

[b6~b0]中减去2*y

就有:

n=n=4*x(千位)+(x+y)(百位)+3*y(十位)+[b6~b0]-2*y

由此,就可以明确由高9位[b15~b7]变换出来十进制的各个位的数值,可能大于9,到最后整理一下即可。

剩下的低7位变成BCD 码已经很简单了。

这是别人的思路,容易理解,但用汇编也不太好写,期待有人能写出来,下面是我同学的一个算法:

高八位减一,让第八位加上256,(存放压缩BCD码的三个字节百位加2,十位加5,各位加6)

ORG 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值