二进制与BCD码的转换

DA 这条指令应该怎么用?直接能不能用啊?
比如十六进制24H在A里
DA A这样能转换正确吗?

如果随意对一个累加器A中的二进制数据进行“二进制转十进制”调整是没有任何实际意义的!

DA调整的对象是在ADD或ADDC之后的结果,而且是以BCD码相加以后才能够调整,否则没有实际意义!

比如,现在要执行12D+39D也就是两个十进制数相加这样一个加法(有时候程序处理的需要,数据在单片机中是以BCD码的形式存储的,也就是12H和39H(十六进制),但我们可以人为将它们看为12D和39D(十进制),而且还希望相加以后的结果为51H,也就是说符合十进制运算规则12+39=51,而不是4BH的结果),但这样的十进制加法运算在单片机中是不能够直接实现的。因为单片机只能够执行二进制加法指令,也就是所有的运算都按照二进制中的规则进行!

于是就出现了DA调整指令!

现在12H+39H,将12H放于A中,执行 ADD A,#39H指令,则结果为4BH,这不是我们希望的51H的数据形式!!这时执行DA A 指令后,就会将A中的数据调整为51H(具体调整过程和原理你可以详细看书,如果单片机书中讲的不详细,那么微机原理中一定说的非常详细),而我们按照BCD码规则就将其看为51D,符合我们的要求!

也就是说加数和被加数都是BCD码的形式,最大也只可能是99H,也就是我们十进制数中的99,只有这样才会有实际的意义!所以你说的当A=#24H的时候的情况是不会存在的,严格的说是没有意义的!

而且DA A指令只用于十进制BCD码加法指令 ADD/ADDC 以后,否则是没有实际意义的!

谢谢!
温馨提示:内容为网友见解,仅供参考
无其他回答

2进制数和BCD码什么转换?举个例子。真诚感谢。
二进制数调整BCD码的方法是将二进制码左移8次,每次移位后都检查低四位LSD+3是否大于7,如是则加3,否则不加,高4位MSD作同样处理。二进制的1111,即2#1111 ,等于10#的15。而BCD#2#1111却是一个非法数据,因为BCD码只能表示十进制的0-9之间的数,这一-串2#1111还是等于10#15。因为BCD码的...

二进制与BCD码之间的转换
一般来说,默认的BCD码是8421码,也就是说,使用4位二进制数来表示10位0-9的1位十进制数。从左到右的重量是8,4,2,1。以十进制37为例,进行转换:3=2+1=(8421码)0011,7=4+2+1=(8421码)0111。所以37转换成8421码为0011 0111。

二进制转BCD码
串行输入三位后,结果大于4 (0101)B=5(D)加3:(0101)B+(0011)B=(1000)B --十进制表示:5+3=8 再左移一位后:(1000Xn)B= (0001_000Xn)BCD 对应十进制显示:1 Xn 每四位BCD码对应一位十进制数,即:(10+Xn)D,转换成功 注:Xn为下一位串行输入的二进制数。2...

二进制码如何转换成BCD码?
可以用加3移位法转换:BCD码中只有0~9十进制数,但是在四位二进制中是16进制进1,因此在移位过程中要对二进制进行判断,当在移位之后的状态Qn+1大于9,要对Qn加6才可以。同时,也可以在移位之前进行判断,如果移位之前的Qn数据大于4,说明Qn+1会溢出,所以可以+3再进行移位,和刚才结果是一样的。

二进制数转化成BCD码是什么?
转换过程:把BCD码 0001(十进制数为十位上的 1)右移4位(其实表示当作一个个位数,或者说单纯的数值),然后乘以10 还原到十进制的权重(因为这个数本来表示的就是十进制数中的十位)。处理完十位上的数,接着处理个位上的数。因为BCD码的权重和二进制的前四位权重是一样(2^n,n为位数)...

数字电路二进制如何转换8421BCD
二进制转换8421BCD的思路如下:给定一个二进制数,要转BCD码。一个常用算法就是不断将该数除以10,以此依次分解出个位、十位、百位??上的数字,这些数字的4位二进制数就是对应的BCD。但是这样的算法需要不断做除法操作十分的麻烦。可以使用名为加三左移法来完成。这个算法基于以下的事实:一个数乘以...

关于BCD码和2进制的转换问题,高人进!
二进制 0000 0001 0110 1101 B 十六进制 0 1 6 d H 所以BCD码为 016d H 我见过的BCD码好像没有出现过a~f,这里只是例子真正的BCD吗是没有大于9的数 放进一个unsigned int型的数据里如aa=0x016d H 在机器里存储也是0000 0001 0110 1101 不懂加qq 1320249827 致楼...

bcd码与二进制怎么换算
4,5,6,7,8,9这十个数符。最常用的BCD码称为8421BCD码,8.4.2.1分别是4位二进数的位取值。BCD码与十进制数的转换,关系直观,相互转换也很简单,将十进制数75.4转换为BCD码如:75.4=(0111(0101.0100)BCD,若将BCD码10000101.0101转换为十进制数如:(10000101.0101)BCD=85.5 ...

BCD码怎样转换为二进制码
bcd码就是0-9共10个数字,对应的二进制码就是0000-1001。如7对应0111;26对应0010 0110;456对应0100 0101 0110,其文件运行如图所示。如果每位BCD码使用一个字节(8位),那么:7对应0000 0111;26对应0000 0010 0000 0110;456对应00000100 00000101 00000110。

bcd码可以转换为二进制码吗?
可以用加3移位法转换:bcd码中只有0~9十进制数,但是在四位二进制中是16进制进1,因此在移位过程中要对二进制进行判断,当在移位之后的状态Qn+1大于9,要对Qn加6才可以。例如:1000移位大于9加6为0001_0110,对应bcd码中的16。也可以在移位之前进行判断,如果移位之前的Qn数据大于4,说明Qn+1会...

相似回答