求十六进制转换成BCD码的方法或原理 或者帮我解读一下这段

作者&投稿:司马发 (若有异议请与网页底部的电邮联系)
16进制转bcd码~

BCD码也叫8421码,是将十进制的数以8421的形式展开成二进制,大家知道十进制是0~9十个数组成,这十个数每个数都有自己的8421码: 0=0000 1=0001 2=0010 3=0011 4=0100 5=0101 6=0110 7=0111 8=1000 9=1001 举个例子: 321的8421码就是 3 2 1对应二进制码是:0011 0010 0001十进制数4000,对应的BCD码应该也是4000吧

简单,二转八从低向高位三个数得出八进制数的一位,高位不足三位用0补,二转一十六只是四位一转其余同。二转十用各位数乘该位权再相加,8421就是用四个二进制位表示一个十进制位,十进制是桥梁!

首先解释此段程序功能:

     入口参数:R6,R7,存放16位二进制数,R6为高8位。

     出口参数:R3,R4,R5,存放转换后的BCD码,R3为高位。

程序思路:

  把16位二进制数按权展开后再进行BCD码相加。如下图:

    注意此处加法是按照BCD码相加(代码中有十进制调整指令DA A)。

具体算法:

  把16位二进制数的每一位都先移入进位标志C,然后乘以2的n次方,这里n是该位的权值。(此段程序是用与自身相加的方法实现乘2操作的)。

    因为共有16位2进制数,所以需要进行16次循环(程序中用R2保存循环次数)。这样最高位(即R6的最高位)最先被移出并在第一次循环中做了乘2操作并保存在R3R4R5中以供下次累加,第二次循环时该值被再次乘2并累加,以后每次循环都相当于再次进行乘2并累加,这样最高位一共进行了16次乘2累加,也就是乘以2的16次方。同理,R6的次高位第二次被移出,所以少循环一次,相当于乘以2的15次方并累加。     

举例说明:

    设R6=00H、R7=10H,则R7中的“1”在第12次循环时被移入C中,在以后的4次循环中实现了乘以2的4次方并进行BCD码累加,具体过程如下:

   R6R7=0000 0000 0001 0000。

     R5=R4=R3=0

     第1次循环:R6最高位的0被移入C标志位后用ADDC指令与R5进行BCD码相加(如有进位则进到R4和R3中,此处无进位),R5=0

     第2次循环:0被移出后与R5进行BCD码相加,R5=0

  第3次循环:0被移出后与R5进行BCD码相加,R5=0

               ...  ...

    第11次循环:0被移出后与R5进行BCD码相加,R5=0

  第12次循环:1被移出后与R5进行BCD码相加,R5=1

  第13次循环:0被移出后与R5进行BCD码相加,R5=2

  第14次循环:0被移出后与R5进行BCD码相加,R5=4

  第15次循环:0被移出后与R5进行BCD码相加,R5=8

     第16次循环:R7最低位的0被移出后与R5进行BCD码相加,R5=16

     所以最终结果就是16(放在R5中)。

     希望能够帮到你。



R6,R7,存放 16 位二进制数,R6 为高 8 位。

 MOV A, R7 ;从高端移出待转换数的一位到CY中

 RLC A

 MOV R7, A

 MOV A, R6

 RLC A

 MOV R6, A

----以上六行,将 16 位数的最高位,移入 CY。

=========================

R3,R4,R5,存放六位压缩的 BCD 码。

    (实用五位:万千百十个。)

 MOV A, R5

 ADDC A, R5

 DA A    ;调整为压缩 BCD 吗

 MOV R5, A

----以上四行,将 R5 左移一位,并将 CY 加入空位。

----并且,将“和”调整为“压缩 BCD 码”。

 ……----左移 R4,并调整成为压缩 BCD 码。

 ……----左移 R3,并调整成为压缩 BCD 码。

----经过以上各条,就完成了一个循环。

=========================

在一个循环中:

  就把 16 位二进制数的最高位,

  移入了压缩 BCD 码的最低位。

循环 16 遍,就完成了:十六位数,转换到 BCD 码。




与16进制数bc等值的二进制数是
关系:可以用四位数的二进制数来代表一个16进制,如3A16 转为二进制为: 3为0011,A 为1010,合并起来为00111010。可以将最左边的0去掉得1110102 ,若要将二进制转为16进制,只需将二进制的位数由右向左每四位一个单位分隔,将各单位对照出16进制的值即可。所以,与十六进制数bc等值的二进制数就...

十六进制数( BC)等值的二进制数是
与十六进制数(BC)等值的二进制数是(10111100)。十六进制(英文名称:Hexadecimal),是计算机中数据的一种表示方法。同我们日常生活中的表示法不一样。它由0-9,A-F组成,字母不区分大小写。与10进制的对应关系是:0-9对应0-9;A-F对应10-15;N进制的数可以用0~(N-1)的数表示,超过9的用...

十六进制h的二进制是多少
因为每一位十六进制数对应于四位的二进制数,所以,与十六制数(10111100)H等值的二进制数是: (00010000 00010001 00010001 00000000)B 10111100就是二进制数啊; 1100=4+8=12,即C; 1011=1+2+8=11,即B 10111100等值的十六进制数是:BC。

与十六进制数(bc)等值的二进制数是( )
选B 十六进制数转换成二进制数:把每一个十六进制数转换成4位的二进制数,就得到一个二进制数。

16进制数字符BC的二进制数
0是空的意思,1就是1.当第一位增加1的时候,就要向前一位进1,以保证再第一位上只有0和1这两个数,就像在十进制中,只有0到9这10个数,而0是空,所以在二进制的第一位上,的1就类似十进制的9一样,再加1就要向前进。八进制是0~7,逢八进一 十六进制是0~9 a~f。0到9是十个数,a...

十六进制数bc转换为二进制数是什么?
十六进制数bc转换为二进制数是什么?十六进制数bc转换为二进制数是:10111100。

bc是什么意思?
1、bc为任意精度算术语言提供解释器。BC的含义是:Binary Calculator,用于实现任意精度计算(往往是高精度计算)。2、bc是网络流行词,bc是白痴拼音的首字母,意思就是白痴,在网游中经常出现。3、BC是网络中间节点时钟设备,该设备有多个1588端口,其中一个端口可作为Slave,设备系统时钟的频率和时间同步于...

与十六进制数BC等值的八进制数是?
十六进制的BC,等于八进制的274 首先转换成2进制 B=1011,C=1100 连起来为10111100,然后从后面每三位一个8进制数 10,111,100 就是274了

十六进制12BC用二进制怎么表示?求结果及过程
每一位16进制对应转换为4位二进制 不足4位的补0 也就是1 对应0001 2对应 0010 B对应1011 C对应1100 结果连接到一起0001 0010 1011 1100 可省略第一组的前导0,也就是1 0010 1011 1100

(19BC.8)16进制数转成十进制数,请问那个B和C是什么意思啊?这要怎么算...
16进制,01到09就是1到9,0A,0B到0F分别是10,11到15.10就是16……即使懂得原理,你自己手工计算转换也还是比较麻烦的,尤其是象你说的19BC这样的大数。这个可以借助进制换算工具,不用额外找,WIN系统里自带的计算器就有这功能,选择“科学型”,就会看到出现不同进制了。选择16进制后,输入19BC...

杂多县17114906071: 十六进制转化 bcd码 -
尹符柳酚: 我举个例子吧,你编程的时候照着这方法来就没错了: 假设16进制数3FH,其十进制数值为3*16+15=63,所以先进行如下过程: 63÷10=6……3 即商是6,余数是 如果将商乘以16再加上余数,就是: 6*16+3=99,其16进制数就是63H,即是十进制数63(16进制为3FH)的BCD码为63H. 如果在单片机中,程序这么写: char HEX,BCD; BCD=(HEX/10*16)+(HEX%10); 其中HEX存储十六进制数,BCD中存储的就是其BCD码.

杂多县17114906071: 怎么把16进制的0FAH转换成用BCD表示的数,转换成BCD吗是不是为250,求详细的过程 -
尹符柳酚:[答案] (0FA)H =((0*16+15)*16+10)D =(15*16+10)D =(240+10)D =(250)D =(0010 0101 0000)BCD

杂多县17114906071: 用汇编语言怎样实现16进制转换为压缩的BCD码 -
尹符柳酚: 一个十六进制数最大255,所以转换为压缩BCD码需要两个字节,转换方法是: 1、第一步,用该数除以100,结果存入高八位字节的低四位. 2、第二步用余数除以10,结果存入低八位的高四位. 3、第三遍,将余数存入低八位的低四位. 例程: H2BCD:MOV B,#100 DIV AB MOV R2,A MOV A,B MOV B,#10 DIV AB SWAP A,BANL A,#0F0H ORL A,B MOV R3,A RET

杂多县17114906071: 16位2进制数转换为BCD码. -
尹符柳酚:[答案] 先转化成10进制(用系统自带计算器就可以),然后每一位数字转化为4位的2进制数字,再全部连起来(常用的8421码). 比如1001101101100101,转化为10进制39781,然后每个数字再转化成4位,3变成0011,9变成1001……最后结果是...

杂多县17114906071: 十六进制转化为二进制与bcd码的区别 -
尹符柳酚: 十六进制:0~9、A~F. bcd码:0~9.十六进制转化为二进制,直接转换,即可.十六进制转化为bcd码,0~9,直接转换即可; 而 A~F,就要转换成两个BCD码.A ----> 10 B ----> 11 …… F ----> 15

杂多县17114906071: 十六进制转换为十进制!BCD.45?过程! -
尹符柳酚: 整数部分11*16^2 + 12*16^1 + 13*16^0 = 3021 小数部分4*(16^-1)+ 5*(16^-2)= 0.25390625 所以最后结果为3021.25390625

杂多县17114906071: 十进制126转化BCD码 -
尹符柳酚: void HextoBCD(u8 *pBuff,u8 len) //十六进制转为BCD码 { u8 i,temp; for(i=0;i{ temp=pBuff[i]/10; time[i]=pBuff[i]%10+temp*16; } }

杂多县17114906071: 1000从16进制转变成2进制 -
尹符柳酚: 1000(16)=1 0000 0000 0000(2) 方法1: 1位16进制等于4位二进制;所以 1000(16) = 0001 0000 0000 0000 = 1 0000 0000 0000(2) 方法二: 1000(16) = 1*16^3 = 4096(10) 4096(10) = 1 0000 0000 0000(2)

杂多县17114906071: 谁能给我讲讲 C语言 16进制转BCD码的原理.顺便看看这个程序.急~ 谢谢 -
尹符柳酚: 问题:1.字符串没加结束标志'\0'2. else if(ns>=n&&nt<n) for(i=0;i<n;i++) {m1[i]=s[i]; strcat(m1,t); strcpy(s,m1); } 这段错误#include"iostream.h"#include"string.h"#include"stdio.h" void mystrcat(char s[],char t[],int n) { char m1[100],m2[100]; int...

杂多县17114906071: 十六进制数5D.8A转换成BCD数
尹符柳酚: 六进制数5D.8A转换成8421-BCD码 把每一个数分别转换为4位的2进制 数 5 D .8 A = (0101 1101 .1000 1010)BCD 即(1011101.1000101)BCD

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网