欢迎来到天天文库
浏览记录
ID:8986796
大小:41.00 KB
页数:2页
时间:2018-04-14
《关于bcd码和十六进制数的区别》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、关于MCS-51单片机是如何将单字节二进制数转化为BCD码的问题悬赏分:20
2、解决时间:2010-5-515:15
3、提问者:匿名程序如下:BINBCD:MOVB,#100(100作为除数送入B中)DIVAB(十六进制数除以100)MOVR3,A(百位数送r3,余数放入B中)MOVA,#10(分离十位数与个位数)XCHA,B(余数放入A中,除数放入B中)DIVAB(分离出十位在A中,个位在B中)SWAPA(十位数交换到A的高4位)ADDA,B(十位数与个位数相加送入A中)END1请问这个程序求解的思路是什么?2该程序的第二句"DIVAB"的解释是十六进制数除以100,可是A中应该存放的是
4、一个八位的二进制数,这是怎么回事?3最后为什么要十位数与个位数相加,不是要分离十位数与个位数吗?最佳答案乘除法的时候可以不考虑进制的,比如说#0FFH这个十六进制数存放于A中,#100这个十进制数放于B中然后DIVAB这时A等于#02HB等于#37H等于55在然后假设A中的数为FFHBINBCD:MOVB,#100(B=100,十进制100,)DIVAB(A等于#02H,B等于#37H等于55)MOVR3,A(A=02H)MOVA,#10(A=10=0AH,B=55=37H)XCHA,B(A=55=37H,B=10=0AH)DIVAB(A=05H=5,B=5=05H)SWAPA(A=5
5、0H,B=05H)ADDA,B(A=55H,这时十位各位的BCD吗已经求出来了,将37H=55转换为55HEND1请问这个程序求解的思路是什么?思路就是对一个数求模和求于来分离百位十位和个位例如168168/100=1余6868/10=6余88/1=8余0这样就分离了百位十位和个位2该程序的第二句"DIVAB"的解释是十六进制数除以100,可是A中应该存放的是一个八位的二进制数,这是怎么回事?这个是你没理解cpu存数据的方式,A中存放的其实归根结底说是二进制数,机器只认识二进制数,对这段程序编译之后我们输入的十进制100也变成二进制数了,我们通常说十六进制数是因为十六进制数和二进制数有
6、位上的对应关系,比如11000110B=C6H也就是说二进制数每4位一段各自写成十六进制数就把二进制转换成十六进制了,3最后为什么要十位数与个位数相加,不是要分离十位数与个位数吗?我想如果你清楚BCD码的含义你就明白了BCD码就是用十六进制数来表示十进制的数例如:45H是等于十进制的69的,但如果你说他是BCD码他就代表十进制数45这样你就会发现不是每个十六进制数都是BCD码的,例如AAH就不是BCD码,因为没有AA这样的十进制数我最后总结一下,就是我们所说的十进制数也好十六进制数也好,归根到底机器都是要把他变为二进制数的,机器也只认识二进制数,这样你就好理解了,我们不会处理不同进制数
7、之间的运算,运算时必须要把他转换同进制的数,机器也是这样,只不过我们擅长的是十进制的运算,而机器擅长的是二进制运算,二进制数位数多不方便我们就找了一个帮手十六进制数希望你能看得懂
此文档下载收益归作者所有