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