智能仪表多字节二进制数转换BCD码
二进制,十进制,十六进制,ASCII,BCD码的转换,单片机

1.在片内RAM 30H单元有-个8位二进制数,将其转换成压缩BCD码,存于片内RAM 41H(高位)40H(低位)中。
方法:2^8=256,所以8位二进制A<=256,A/100商是百位数,存放到41h单元,余数再除以10,再得商是10位数,高低位互换,) ORG 0100HSTART:MOV A,30H ;取来8位二进制数MOV B,#100DIV AB ;除以100MOV 41H,A ;商是百位数,存放到41h单元MOV A,B ;取回余数MOV B,#10DIV AB ;再除以10SWAP A ;商是10位数,高低位互换ORL A,BMOV 40H,A ;将十位数与个位位数存入40hSJMP $END2.一个字节(8位)BCD码转换为二进制数(方法:先将高半字节乘以10,再加上低半字节)设待转换的BCD码存放于R2中DTOB:MOV A,R2ANL A,#0F0HSWAP AMOV B,#0AHMUL ABMOV R3,AMOV A,R2ANL A,#0FHADD A,R3RET3.二进制数转换为ASCII码设(30H)=4BH,将高4位的ASCII码放在31H单元,低4位的ASCII码放在32H单元,程序具有通用性,向入口参数30H存入任何数,都能将其变成相应的ISCII 码.ORG 0000HLJMP MAINORG 0030HMAIN:MOV SP,#60HMOV 30H,#4BHMOV R2,30HMOV A,R2ANL A,#0FHCJNE A,#0AH,NEQNEQ: JC LOOPADD A,#37HJMP LOOP3LOOP:ADD A,#30HLOOP3:MOV 31H,AMOV A,R2SWAP AANL A,#0FHCJNE A,#0AH,NE1NE1: JC LOOP1ADD A,#37HJMP LOOP4LOOP1:ADD A,#30HLOOP4:MOV 32H,AA1: SJMP A1END4.已知R0的低半个字节为一个四位的二进制数,要求将其转换为ASCAII码后送回R0中。
二进制转BCD码

⼆进制转BCD码应⽤:⽤fpga实现对数码管显⽰,以前通常的⽅法是进⾏整除和取余进⾏运算,但是fpga并不擅长乘法除法运算,所以可以⽤BCD码来转换。
BCD码:通俗的可以理解为⽤四位⼆进制数表⽰⼀位⼗进制数字。
例如,256就可以⽤bcd码表⽰为:0010_1001_0110因此在数码管显⽰中,也就是把256各位分出来,就可以⽤bcd码来表⽰,下⾯说⼀种⼆进制转换bcd码的⽅法。
加3移位法:bcd码中只有0~9⼗进制数,但是在四位⼆进制中是16进制进1,因此在移位过程中要对⼆进制进⾏判断,当在移位之后的状态Qn+1⼤于9,要对Qn加6才可以。
例如1000移位⼤于9加6为0001_0110,对应bcd码中的1我们也可以在移位之前进⾏判断,如果移位之前的Qn数据⼤于4,说明Qn+1会溢出,所以可以+3再进⾏移位,例如1000⼤于4,加3为1011然后再进⾏移位0001_0110,16和刚才结果是⼀样的。
简单的说,判断的⽬的是防⽌下⼀次移位,发⽣数据溢出的情况思路:代码可以总结为三个部分:移位,加⼆进制数,判断(最后⼀次不需要判断)例如15 --- 1111(1)移位 0000_0000 加 0000_0001 判断 0000_0001(2)移位 0000_0010 加 0000_0011 判断 0000_0011(3)移位 0000_0110 加 0000_0111 判断 0000_1010(4)移位 0001_0100 加 0001_0101/*********************************功能:实现对6位⼗进制数以内的bcd码转换time: 2017/4/29vision:1.0*********************************/`define data_in_num 19`define data_bcd_num 23module pro_bcd(clk,rst_n,data_in,data_bcd);input clk;input rst_n;input [`data_in_num :0] data_in;output [`data_bcd_num:0] data_bcd; reg [`data_bcd_num:0] data_bcd_r;reg [1:0] state;reg [5:0] shift_cn if(!rst_n)begindata_bcd_r <= 0;state <= 0;shift_cnt <= 0;endelsecase(state)2'd0:beginshift_cnt <= 0;data_bcd_r <= 0;state <= state + 1;end2'd1:begin //移位if(shift_cnt < `data_in_num + 1)begin data_bcd_r <= data_bcd_r<<1;shift_cnt <= shift_cnt + 1;state <= state + 1;endelse state <= 0;end2'd2:begin //相加data_bcd_r <= data_bcd_r + data_in[`data_in_num + 1 - shift_cnt];state <= state + 1;end2'd3:begin //判断if(data_bcd_r[3:0] > 4 ) //1data_bcd_r <= data_bcd_r + 3;if(data_bcd_r[7:4]>4) //2data_bcd_r[7:4] <= data_bcd_r[7:4] + 3;if(data_bcd_r[11:8]>4) //3data_bcd_r[11:8] <= data_bcd_r[11:8] + 3;if(data_bcd_r[15:12]>4) //4data_bcd_r[15:12] <= data_bcd_r[15:12] + 3;if(data_bcd_r[19:16]>4) //5data_bcd_r[19:16] <= data_bcd_r[19:16] + 3;if(data_bcd_r[`data_bcd_num:20]>4) //6data_bcd_r[`data_bcd_num:20] <= data_bcd_r[`data_bcd_num:20] + 3;state <= 1;enddefault:state <= 0;endcaseassign data_bcd = (state == 3)&&(shift_cnt == `data_in_num + 1) ? data_bcd_r : data_bcd;endmodule。
(实验二)二进制码转换为BCD码实验报告

实验二二进制码转换为BCD码一、实验目的1、掌握数码转换基本方法,加深对数码的理解。
2、用于十进制BCD码显示。
二、实验内容将AX的内容转换为十进制BCD码。
三、实验程序框图四、实验步骤脱机模式:(1)在P.态,按SCAL键,输入2CE0,按EXEC键。
(2)复位RST键,由于AX中给定数为0FFFF,查看BCD码结果保留在4100H~4104H 单元中,故其值应为06、05、05、03、05。
联机模式:(1)在PC机和实验系统联机状态下,运行该实验程序,可用鼠标左键单击菜单栏“文件”或工具栏“打开图标”,弹出“打开文件”的对话框,然后打开8kAsm文件夹,点击S2.ASM 文件,单击“确定”即可装入源文件,再单击工具栏中编译,即可完成源文件自动编译、装载目标代码功能,再单击“调试”中“连续运行”或工具图标运行,即开始运行程序。
(2)复位“系统复位”键,由于AX中给定数为0FFFF,查看BCD码结果保留在4100H~4104H单元中,故其值应为06、05、05、03、05。
注:操作过程参照“实验一二进制多位加法运算”。
五、实验程序清单X:\DICE-8086K3微机原理与接口实验箱CDROM\CODE\86kasm\S2.ASM;将AX拆为5个BCD码,并存入Result开始的5个单元DATA SEGMENT AT 0 ;S2.ASM,BIN-->BCDORG 4000HRESULT DB 5 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATAORG 2CE0HSTART PROC NEARMOV AX, DATAMOV DS, AXMOV DX,0000HMOV AX, 65535MOV CX, 10000DIV CXMOV RESULT, AL ; 除以 10000, 得WAN位数MOV AX,DXMOV DX,0000HMOV CX, 1000DIV CXMOV RESULT+1, AL ; 除以 1000, 得QIAN位数MOV AX,DXMOV DX,0000HMOV CX, 100DIV CXMOV RESULT+2, AL ; 除以 100, 得BAI位数MOV AX,DXMOV DX,0000HMOV CX, 10DIV CXMOV RESULT+3, AL ; 除以 10, 得SHI位数MOV RESULT+4, DL ; 得GE位数JMP $CODE ENDSEND START。
二进制转BCD码需要几步?

二进制转BCD码需要几步?Hi,大家好!我是至芯科技的李老师。
今天讲课的题目比较有意思,它是一个小问题:把二进制变成BCD码需要几步?请大家思考一下。
有同学可能回答需要三步,为什么啊?因为啊,把大象放进冰箱里需要三步,第一步,把冰箱门打开,第二步,把大象放进去,第三步,把冰箱门关上。
类似的,把二进制变成BCD码,也需要三步。
blablablabla ......当然啦,这是开玩笑了。
不过,歪打正着,答案确实是三步。
究竟是怎么回事呢?我们下面细细说来,原理说透之后,我们演示一下具体的Verilog实现过程。
首先,看一下下面这张表格,把二进制(8’hFF)转换为BCD (12’h255)的步骤列表。
什么是二进制转BCD?有什么用?4位二进制是16进制数,而生活中常用的数制是10进制数。
怎么样用计算机来理解、表达生活中的10进制数?这就需要进行16进制数与10进制数的相互转换了。
而BCD码(Binary-Coded Decimal)正是计算机常用的一种表达方式。
它是一种以二进制表示的十进制数码。
比如说,至芯科技ZX-1开发板上的六位数码管显示数字可以是16进制的000000~FFFFFF,但是更为方便的方法是000000~999999。
六位数码管显示六位数字用十六进制,比如说是0F423F,谁也不知道是多少,但是它对应的十进制数999999,大家肯定很熟悉。
很多场合,我们和机器之间沟通用10进制更方便,但计算机是用01编码的。
需要进行人机之间的沟通和转换。
解决的方法就是用二进制的方式来存储、计算数值,但是用10进制的方式来显示这些数值,BCD码就起到了桥梁的作用。
注意,16进制属于二进制的一种形式,希望大家理解这点,包括8进制也是。
当然,道理容易明白。
但究竟机器又是怎样实现二进制和BCD码的转换的呢?注意,转换是双向的,既可以把二进制转换成BCD码,也可以把BCD码转换成二进制数。
可以想象BCD码转成二进制相对比较简单。
二进制转BCD码

library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity transform2_to_10 isport( RST,CLK:in std_logic;start:in std_logic;binary_operands:in std_logic_vector(7 downto 0);--待转换的二进制数LED_baiwei:out std_logic_vector(3 downto 0);--百位LED_shiwei:out std_logic_vector(3 downto 0);--十位LED_gewei:out std_logic_vector(3 downto 0);--个位out_all:out std_logic_vector(19 downto 0);aa:out std_logic_vector(7 downto 0);cb,cc,ca:out std_logic_vector(3 downto 0);dd:out std_logic_vector(19 downto 0));end ;architecture behave of transform2_to_10 isbeginprocess(RST,CLK,binary_operands)variable operands:std_logic_vector(7 downto 0);--存放输入操作数variable MA:std_logic_vector(3 downto 0);--暂存个位的二进制数variable MB:std_logic_vector(3 downto 0);--暂存十位的二进制数variable MC:std_logic_vector(3 downto 0);--暂存百位的二进制数variable post:std_logic_vector(19 downto 0);--将二进制操作数、个位、十位、百位的二进制数集总variable Q:std_logic_vector(3 downto 0);--计数移位的脉冲数beginif RST='1'then operands:="00000000";MA:="0000";MB:="0000";MC:="0000";post:="00000000000000000000" ;elsif CLK'event and CLK='1'thenif start='1'then operands:=binary_operands;MA:="0000";MB:="0000";MC:="0000";post:=MC&MB&MA&operands(7 downto 0);out_all(7 downto 0)<=post(7 downto 0);--dd:="00000000";elseif Q<=8 thenif Q=8 then Q:="0000";LED_gewei<=MA; LED_shiwei<=MB;LED_baiwei<=MC;else Q:=Q+1;end if;post(19 downto 8):=MC&MB&MA;post(19 downto 0):=post(18 downto 0)&'0'; dd<=post(19 downto 0); --dd 为观测信号aa<=post(7 downto 0);out_all(19 downto 8)<=post(19 downto8);--out_all(19 downto 8)为观测信号MA(3 downto 0):= post(11 downto 8);ca<=post(11 downto 8);--ca观测信号MB(3 downto 0):= post(15 downto 12);cb<=post(15 downto 12);--cb观测信号MC(3 downto 0):= post(19 downto 16);cc<=post(19 downto 16);--cc观测信号if MA>=5 then MA:=MA+3;end if;if MA>=5 then MA:=MA+3;end if;if MB>=5 then MB:=MB+3;end if;if MC>=5 then MC:=MC+3;end if;end if;end if;end if;end process;end ;实现思想:使用俗称的移位加3法则,规则是:1、将该二进制数左移一位;2、对于25位的二进制数,最大8位十进制数,从千万位开始,分别是千万,百万,十万,万,千,百,十,个位,所以如果转换为BCD码,共需要32位二进制序列缓冲,每4位为一组,按上述顺序排列;3、如果移位后,该组的数据如果大于等于5,则对该组数据加3处理;4、左移一位;5、回第三步循环,直到所有数据移位完毕看下表的一个8位二进制转BCD,引申一下即可,原理是一样的Operation | Hundreds| Tens | Units | Binary | HEX | | | | F F |Start | | | | 1 1 1 1 1 1 1 1 |Shift1 | | |1 | 1 1 1 1 1 1 1 |Shift2 | | | 1 1 | 1 1 1 1 1 1 |Shift3 | | | 1 1 1 | 1 1 1 1 1 |Add3 | | | 1 0 1 0 | 1 1 1 1 1 | Shift4 | | 1 | 0 1 0 1 | 1 1 1 1 | Add3 | | 1 | 1 0 0 0 | 1 1 1 1 | Shift5 | | 1 1 | 0 0 0 1 | 1 1 1 | Shift6 | | 1 1 0 | 0 0 1 1 | 1 1 | Add3 | | 1 0 0 1 | 0 0 1 1 | 1 1 | Shift7 | 1 | 0 0 1 0 | 0 1 1 1 | 1 | Add3 | 1 | 0 0 1 0 | 1 0 1 0 | 1 | Shift8 | 1 0 | 0 1 0 1 | 0 1 0 1 | | BCD | 2 | 5 | 5 | |。
二进制到BCD转换实验报告[本站推荐]
![二进制到BCD转换实验报告[本站推荐]](https://img.taocdn.com/s3/m/616743020a4c2e3f5727a5e9856a561252d321fc.png)
二进制到BCD转换实验报告[本站推荐]第一篇:二进制到BCD转换实验报告[本站推荐]二进制到BCD转换实验报告班级姓名学号日期一、实验目的:1.掌握简单的数值转换算法2.基本了解数值的各种表达方法二、实验要求:将给定的一个二进制数,转换成十进制(BCD)码。
三、实验内容:1、给累加器赋值,如#1232、将累加器的内容拆分为三个BCD码,并存入Result开始的三个单元。
四、程序及运行结果截图DATASEGMENT RESULT_1DBRESULT_2DBRESULT_3DBDATAENDSSTACKSEGMENTATACK STADBDUP(0)STACK_TOP DB0 STACKENDSCODESEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START: MOVAX,DATA MOVDS,AX MOVAX,STACK MOVSS,AX LEASP,ATACK_TOP MOVAX,123H MOVCL,100 DIVCL MOVRESULT_1,ALMOVCL,8 SHRAX,CL MOVCL,10 DIVCL MOVRESULT_2,AL MOVRESULT_3,AHADDRESULT_1,30H ADDRESULT_2,30H ADDRESULT_3,30HMOVDL, RESULT_1 MOVAH,02H INT21HMOVAX,4C00H INT21H CODEENDSENDSTART五、实验过程中遇到的主要问题;将 A 拆为三个 BCD 码, 并存入 Result 开始的叁个单元Result equ20horgljmp StartBinT oBCD:movb, #100divabmovResult, a;除以 100, 得百位数mova, bmovb, #10divabmovResult+1, a;余数除以 10, 得十位数movResult+2, b;余数为个位数retStart:movsp, #40hmova, #123call BinT oBCDljmp $end六、实验后的心得体会第二篇:二进制与十进制的转换二进制与十进制的转换2007年07月06日星期五 13:21教学目标:知识目标:知道二进制与十进制之间的转换方法操作目标:能在二进制与十进制之间进行进制转换教学重点:二进制与十进制之间的转换教学难点:二进制与十进制之间的转换教学过程:一、复习引入上一节课已经学习了什么是二进制以及二进制的运算。
微机原理实验-二进制到BCD转换

开课学院及实验室:实验中心
学 院 机电 年级、专 业、班 微机原理实验
2013 年 11 月 4 日
姓名 学号 成绩 指导 教师
实验课程名称 实验项目名称 一、实验目的
二进制到 BCD 转换
二、实验原理(实验相关基础知识、理论) 三、实验过程原始记录(程序界面、代码、设计调试过程描述等) 四、实验结果及总结 一、实验目的
给出要转换的二进制数
将数除以 100,得百位数
保存百位数
将余数再除以 10,得十位数
; 余数除以 10, 得十位数 ; 余数为个位数
保存十位数
余数为个位数,将其保存
实验步骤: (1) 进 入 Wave6000 , 输 入 程 序 并 检 查 , 保 存 程 序 。 (2) “ 编 译 ” 程 序 。 (3) 在 指 令 “ jmp $” 处 设 断 点 。 (4) “ 全 速 执 行 ” 程 序 。 (5) 在 “ 数 据 窗 口 ( MEMOREY ) ” 查 看 0400H 、 0401H 、 0402H 三 个 单 元 的 内 容 , 记 录 并 分 析实验结果。
1.将给定的一个二进制数转换成二十进制(BCD)码。 2. 掌握简单的数值转换算法。 3. 基本了解数值的各种表达方法。
二、实验原理(实验相关基础知识、理论)
定义:用4位二进制数来表示1位十进制数中的0~9这10个数码,简称 BCD 码 即 BCD 代码。Binary-Coded Decimal ,简称 BCD,称 BCD 码或二-十进制代码,亦称二进 码十进数。是一种二进制的数字编码形式,用二进制编码的十进制代码。这种编码形式利 用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行。 这种编码技巧,最常用于会计系统的设计里,因为会计制度经常需要对很长的数字串作准 确的计算。相对于一般的浮点式记数法,采用 BCD 码,既可保存数值的精确度,又可免却 使电脑作浮点运算时所耗费的时间。此外,对于其他需要高精确度的计算,BCD 编码亦很 常用。 由于十进制数共有0、1、2、„„、9十个数码,因此,至少需要4位二进制码来表示1位 十进制数。4位二进制码共有2^4=16种码组,在这16种代码中,可以任选10种来表示10个十 进制数码,共有 N=16!/(16-10) !约等于2.9乘以10的10次方种方案。常用的 BCD 代码列 于末。 常用 BCD 编码方式 最常用的 BCD 编码,就是使用"0"至"9"这十个数值的二进码来表示。这种编码方式,在 中国大陆称之为“8421码”。除此以外,对应不同需求,各人亦开发了不同的编码方法, 以适应不同的需求。这些编码,大致可以分成有权码和无权码两种: 有权 BCD 码,如:8421(最常用)、2421、5421„ 无权 BC 从“ 数 据 窗 口 ( MEMOREY ) ” 查 看 到 0400H 、 0401H 、 0402H 三 个 单 元 的 内 容 分 别 为 :
BCD与二进制相互转换(含Verilog代码)(一)

BCD与二进制相互转换(含Verilog代码)(一)BCD码转二进制:所谓BCD码,就是用四位的二进制表示十进制,什么意思呢,举例说明。
1:00012:00103:00114:01005:01016:01107:01118:10009:1001123:0001 0010 0011(BCD码)123:0000 0111 1011(二进制码)一。
为什么要转换进制?我们可以用BCD码来表示十进制,比如157,123,用BCD码来表示分别是(0001 0101 0111)(0001 0010 0011),可是BCD码不能够直接进行运算,157+123=280,而括号里面的两个BCD码相加之和显然不是280的二进制。
所以就需要先将BCD码转换成二进制,经过换算之后再转换成BCD码。
(有些人会问,为什么要转来转去呢,因为计算机只识别二进制,而有时我们需要输出BCD码)二。
转换原理首先我们看二进制与十进制的转换,例1001(二进制),转换成十进制是1*2^3+0*2^2+0*2^1+1*2^0=9(十进制)。
n位的二进制转换过程为a(n-1)*2^(n-1)+a(n-2)*2^(n-2)+........+a(0)*2^0转换一下形式。
(((a(n-1)*2+a(n-2))*2+a(n-3))*2........+a(0)通过上面的形式发现,我们可以通过×2+b的方式来实现转换。
而×2在可以通过左移一位来实现,下面来谈谈这个b如上所述,BCD码用四位二进制表示0-9,而四位二进制可以表示数的范围为0-15,每进一位就会丢掉6,那么就要加上6/2=3(左移一位),那么在什么条件下左移呢?那就要看在什么情况下会进制,BCD码是二进制编码的十进制,那么就是逢十进一,10/2=5.因此得到条件,即判断每四位是否大于4,因为5-9进一位溢出。
我们来整理一下,二进制转BCD的方法是通过左移,然后每四位判断是否大于4,满足则加3.利用组合逻辑实现的代码如下:利用时序逻辑实现的代码如下:我们可以根据不同的情况选择不同的实现方式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
智能仪表多字节二进制数转换BCD码
作者:湖南大学电气与信息工程系邓勇刘琪来源:《电子产品世界》
摘要:多字节无符号二进制数转BCD码在以单片机为核心的智能仪表中应用很普遍。
本文介绍一种新的转换方法,并给出三字节二进制数转BCD码的源程序,该程序执行时间仅为原来的1.3%,效率提高显著。
关键词:多字节二进制整数 BCD码转换
一、引言
在以MCS-51单片机为核心的智能仪表系统中,常遇到二进制整数转换为BCD码的情况。
国内许多单片机书籍都对此进行了介绍并给出了子程序,但效率不高。
本文参考文献作者剖析了二进制整数转BCD码的子程序,分析了程序效率低的原因,给出了改进后的源程序,效率有所提高。
以3字节
的二进制整数为例,程序
执行时间由2.856ms减小到
2.410ms。
还有没有其它的
办法进一步大幅度减少转
换设计时间?本文介绍一
种新的程序设计思路,给
出的源程序将3字节二进
制整数转BCD码执行时间
仅为0.374ms。
二、改进思路
由进制数转BCD码的原理可知,这一转换的实现的过程是(以3字节为例):首先把结果单元(这里是4个字节)清零,然后将待转换的二进制数的最高位移入进位位C,把结果单元的值进行乘2加C运算的值又作为结果单元的值,循环24次后得出转换的BCD码。
如果能完全避开效率运行的时间。
这可用下例来说明:
设结果单元某时的值为3456H,分别存放在R1、R2中,用如下的程序来完成结果单元乘2加(设C的当前值为1):
MOV A,R1
ADDC A,ACC
DA A
MOV R1,A
MOV A,R2
ADDC A,ACC
DA A
MOV R2,A
程序中使用ADDC A,ACC指令完成乘2加C的工作,经过执行上面的程序,进位位C 的值为0,R1、R2单元中的内容分别为69H、13H,该值即为结果单元的值。
这样就使程序避免了循环而又实现了结果单元乘2加C的功能。
这个例子的结果单元为2字节,随着进一步的运算,结果单元会变为3字节并最终变为4字节(以二进制数是3字节为例)。
只要在程序中加以适当的控制,则可避免过多的运算,从而使转换的速度加快。
三、源程序
程序名:FBCD
程序功能:将三字节二进制数转换为BCD码。
程序入口:20H,21H,22H,
存放被转换的三字节二进制数。
程序出口为R1,R2,R3,R4,存放转换的BCD码的结果(见程序清单)。
四、结语
为了尽可能地减少转换时间,使用了一些小技巧。
例如:在程序开始转换二进制数前3位时,考虑到这3位在进行乘2加C的操作时不会有进位位,则使用3条RL A,完成了前3位的转换。
该程序完成3字节二进制无符号整数转BCD码所需时间仅为374微秒,转换时间缩短为原来的13%,效率提高是显著的。
另外,该程序比较灵活,程序中标注(****)处,已完成了2字节二进制整数转三字节的BCD码,程序执二字节二进制数转BCD码所需时间仅为194微秒,使用一条MOV R1,A指令,则转换结果按由高到低的次序依次存放在R1,R2,R3中。
当然,很容易在此程序基础之上,实现4字节或更高字节无符号二进制整数向BCD码的转换。