二进制转换成BCD码 实验报告
EDA实验报告实验二:二进制码转换成BCD码

实验二二进制转换成BCD码
一、实验目的
设计并实现一个4位二进制码转换成BCD码的转换器。
二、实验仪器
SOPC实验箱、Quartus II软件
三、实验原理
对于不同代码之间的转换,有用硬件实现的,也有用软件实现的。
对于硬件实现,可以用一般的组合逻辑电路实现,也可以用译码器、编码器或只读存储器来实现。
本实验的原理见表3-1所示。
四、实验内容
1、启动Quartus II 建立一个空白工程,然后命名。
2、新建VHDL源程序文件并命名,输入程序代码并保存,进行综合编译,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。
3、新建仿真文件,对各模块设计进行仿真,验证设计结果。
打印仿真结果。
五、实验步骤
1.各模块程序:
1)用文本输入法实现秒的计时,程序如下:
module BCD(D,B);
output [4:0] B;
input [3:0] D;
reg [4:0] B;
always@ (D)
begin
if(D<4'b1010) begin B[3:0]=D[3:0];B[4]=1'b0;end
else begin B[3:0]=D[3:0]-4'b1010;B[4]=1'b1;end
end
endmodule
2.建立工作库文件夹,输入设计项目原理图或vorilog代码并存盘。
3.生成RTL图。
4.进行波形仿真,仿真后波形如下:
六、实验结果与现象验证
输入任何一个十六进制数产生了与二进制码转换成BCD码的转换真值表相对于的BCD码.。
(实验二)二进制码转换为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转换实验报告[本站推荐]](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教学目标:知识目标:知道二进制与十进制之间的转换方法操作目标:能在二进制与十进制之间进行进制转换教学重点:二进制与十进制之间的转换教学难点:二进制与十进制之间的转换教学过程:一、复习引入上一节课已经学习了什么是二进制以及二进制的运算。
FPGA二进制转bcd的设计和验证

二进制数转BCD码器的设计和验证FPGA/SOPC课程设计报告书课题名称:二进制转BCD码器的设计和验证姓名:学号:院系:专业:指导教师:时间:课程设计项目成绩评定表设计项目成绩评定表课程设计报告书目录设计报告书目录一、设计的任务要求 (1)二、设计的原则和技巧 (1)2.1、系统面积与速度折中(Area & speed tradeoff) (1)2.2、硬件可实现(Feasibility) (1)2.3、层次化设计(Hierarchical Design) (2)2.4、同步设计(Synchronization) (2)三、FPGA的三种建模方式 (2)3.1、数据流建模 (2)3.2、行为建模 (3)3.2、结构化建模 (3)四、选择器件 (3)五、功能模块 (3)六、时序仿真图 (6)七、心得体会 (6)八、参考文献 (6)一、设计的任务要求1、实现二进制数到8421BCD码的转换。
2、能进行二进制转8421BCD码器的验证。
3、熟悉8421BCD码的编码规则。
二、设计的原则和技巧2.1、系统面积与速度折中(Area & speed tradeoff)✧面积和速度是芯片设计中一对相互制约、影响成本和性能的指标,贯穿FPGA设计的始终。
在FPGA设计中,面积是指一个设计消耗的FPGA内部逻辑资源的数量,可以用消耗的触发器和查找表的个数或者是等效逻辑门数来衡量;✧速度是指一个设计在FPGA上稳定运行时所能达到的最高频率,由设计时序状态决定。
与设计满足的时钟周期、CLOCK SETUP TIME、CLOCK HOLD TIME和CLOCK-TO-OUTPUT DELAY等众多时序特征量密切相关。
✧关于面积和速度的折中,应在满足设计时序和工作频率要求的前提下,占用最小的芯片面积;或者在所规定的面积下,使得设计的时序余量最大,能够在更高的频率上稳定运行。
通常,在资源足够的情况下,更多是选择速度的最优,这也是FPGA的特点。
单片机二进制BCD码转换实验程序流程图

二进制BCD码转换一、实验目的1.掌握简单的数值转换算法2.基本了解数值的各种表达方法二、实验说明单片机中的数值有各种表达方式,这是单片机的基础。
掌握各种数制之间的转换是一种基本功。
我们将给定的一字节二进制数,转换成二十进制(BCD)码。
将累加器A的值拆为三个BCD码,并存入RESULT开始的三个单元,例程A赋值#123。
三、实验内容及步骤1.安装好仿真器,用串行数据通信线连接计算机与仿真器,把仿真头插到模块的单片机插座中,打开模块电源,插上仿真器电源插头(USB线)。
2.启动PC机,打开KEIL软件,软件设置为模拟调试状态。
在所建的Project文件中添加TH2.ASM源程序进行编译,编译无误后,全速运行程序,打开数据窗口(DATA) (在MEMORY#3中输入D:30H 回车),点击暂停按钮,观察地址30H、31H、32H的数据变化,30H更新为01,31H更新为02,32H更新为03。
用键盘输入改变地址30H、31H、32H的值,点击复位按钮后,可再次运行程序,观察其实验效果。
修改源程序中给累加器A的赋值,重复实验,观察实验效果。
3.打开CPU窗口,选择单步或跟踪执行方式运行程序,观察CPU窗口各寄存器的变化,可以看到程序执行的过程,加深对实验的了解。
四、流程图及源程序(见光盘中的程序文件夹)1.源程序RESULT EQU 30HORG 0000HLJMP STARTBINTOBCD:MOV B,#100DIV ABMOV RESULT,A ;除以100得百位数MOV A,BMOV B,#10DIV ABMOV RESULT+1,A ;余数除以10得十位数MOV RESULT+2,B ;余数为个位数RETSTART:MOV SP,#40HMOV A,#123CALL BINTOBCDLJMP $END2.流程图。
汇编程序设计—二进制码转换为BCD码

汇编程序设计—二进制码转换为BCD码首先,我们需要了解什么是BCD码。
BCD码(二进制编码表达式)是一种用4位二进制数字表示一个十进制数的编码方式。
它的范围是0到9,每个数字使用4位二进制进行表示,因此一个BCD码的范围是0000到1001以下是一个示例汇编程序设计,它将输入的二进制码转换为BCD码,并将结果保存在内存中。
```assemblyorg 100hsection .dataoutput resb 4 ; 输出的BCD码section .textstart:mov ax, input ; 将输入的二进制码加载到寄存器AXmov cx, 4 ; 设置循环次数为4, 一个BCD码使用4位二进制表示convert:rol ax, 1 ; 将二进制码左移1位add dl, 30h ; 将二进制码转换为对应的ASCII码,并保存在寄存器DLmov [output+cx-1], dl ; 将结果保存在内存中loop convert ; 循环exit:mov ah, 4Ch ; 设置退出系统调用功能号int 21h ; 调用系统中断```上述汇编程序设计的主要思路是,使用循环将输入的二进制码逐位转换为BCD码,并将结果保存在内存中。
在每次循环迭代中,我们使用`rol`指令将二进制码左移1位,并通过`and`指令提取最后4位二进制码。
接下来,我们通过`add`指令将二进制码转换为对应的ASCII码,并将结果保存在寄存器DL中。
最后,我们将结果存储在内存中,并通过`loop`指令继续处理下一个二进制位。
以上是一个简单的示例汇编程序设计,它将二进制码转换为BCD码。
你可以根据自己的需求进行修改和扩展。
编写和调试汇编程序需要一定的经验和知识,建议你阅读相关的汇编编程文档和教程,以便更好地理解和掌握汇编程序设计。
汇编语言8位二进制转bcd码

汇编语言8位二进制转bcd码
将8位二进制数转换为BCD码(Binary Coded Decimal)需要将每个二进制数转换为其对应的十进制数,然后将十进制数转换为BCD码。
首先,将8位二进制数分为两组,每组4位。
然后将每组4位二进制数转换为对应的十进制数。
例如,如果我们有一个8位二进制数1101 1010,将其分为1101和1010两组。
对于第一组1101:
1 2^3 + 1 2^
2 + 0 2^1 + 1 2^0 = 13。
对于第二组1010:
1 2^3 + 0 2^
2 + 1 2^1 + 0 2^0 = 10。
现在我们得到了两个十进制数13和10。
接下来将这两个十进制数分别转换为BCD码。
对于十进制数13,将其转换为BCD码:
13 = 0001 0011。
对于十进制数10,将其转换为BCD码:
10 = 0001 0000。
因此,将二进制数1101 1010转换为BCD码后得到0001 0011 0001 0000。
这样,我们就完成了将8位二进制数转换为BCD码的过程。
希望这个回答能够帮到你!如果还有其他问题,欢迎继续提问。
单片机实验报告_二进制到BCD转换

单片机实验报告成员:学号:实验时间:实验1 二进制到BCD转换一、实验目的学习星研Star16L仿真器系统的基本操作,熟悉EL-Ⅱ型通用接口板实验电路,掌握简单的数值转换算法。
二、实验仪器和设备PC机、星研Star16L仿真器系统+仿真头PODPH51(DIP)、EL-Ⅱ型通用接口板实验电路。
三、实验内容1)将给定的一个单字节二进制数(存放在R2中),转换成非压缩的二—十进制(BCD)码,并存放到R3R4R5中。
2)将给定的一个双字节二进制数(存放在R2R3中),转换成压缩的二—十进制(BCD)码,并存放到R4R5R6中。
四、参考程序清单及框图1)单字节二进制到非压缩BCD;NAME T1_1_BCDORG 0000HLJMP BCD1ORG 0100HBCD1: MOV A, R2 ;二进制数送AMOV B, #100 ;100作为除数送入BDIV ABMOV R3, A ;百位数送R3,余数在B中MOV A, #10 ;分离十位和个位数XCH A, B ;余数送A,除数10在B中DIV AB ;分离出十位在A, 个位在B中MOV R4, A ;十位送R3MOV A, BMOV R5, A ;个位送R4NOPLJMP BCD1END2)双字节二进制到压缩BCD;NAME T1_2_BCDORG 0000HLJMP BCD2ORG 0150H BCD2: CLR AMOV R4, AMOV R5, AMOV R6, AMOV R7, #16 LOOP: CLR CMOV A, R3RLC AMOV R3, AMOV A, R2RLC AMOV R2, AMOV A, R6ADDC A, R6DA AMOV R6, AMOV A, R5ADDC A, R5DA AMOV R5, AMOV A, R4ADDC A, R4DA AMOV R4, ADJNZ R7, LOOPLJMP BCD2END参考程序框图:Array单字节二进制数转换成非压缩BCD码框图五、思考题如何验证程序的正确性?答:输入数据,查看得出的结果是否与理论上的结果一致。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、实验目的(1)进一步熟练掌握8086汇编语言编译调试工具和环境的操作;(2)掌握完整8086汇编的程序设计编写方法;(3)掌握简单的数值码制转换方法;(4)掌握键盘输出的DOS功能调用方法。
二、实验要求:将AX中的一个二进制数(对应的十进制数范围是0-65535),转换成压缩性BCD码表示的十进制,并从屏幕输出转换结果。
要求用减法实现,并比较与除法方法进行运行速度比较。
三、实验及报告要求:3.1、简要说明算法,并画出正确的程序流程图;3.2、给出完整正确的源程序代码,要求给每一句伪指令或指令加上注释;3.3、分别在DOS和Windows下编译、连接源程序生成可执行文件并调试,比较两个环境下生成的机器码的长度、寄存器内容、计算结果的异同。
3.4、如何观察转换过程中标志寄存器中各标志位的结果?如何观察转换结果的变化?试改变被转换数值,对结果与编制为的变化加以说明和解释。
3.5、写出完整的实验报告,特别是“实验结果”与“实验总结体会”部分,是评分的主要依据。
3.6、实验总结中要求结合实验中的经验、教训或体会对汇编语言格式、调试方法和微机原理学习方法作出总结。
四、程序流程图减法。
即五位数先循环减10000,直到不够减了,做减法的次数就是万分位的结果;将不够减之前一次的余数恢复,再循环减去1000,直到不够减了,做减法的次数就是千分位的结果;以此类推,最后恢复的正余数就是个位的结果.除法。
即五位数先除以10000,得到的商存放万位数的变量上;再将余数除以1000,得到的商存放千位数的变量上;之后将余数除以100,得到的商存放百分位的变量上;以此类推,最后的余数存放在个位的变量上。
A 、减法结束 将余数保存到个位数 恢复正余数 恢复余数计数器清零 Y 将数减去100 计数值加1 将计数器的值保存到百分位 够减否 N 输入二进制数 Y将数减去10000计数值加1 将计数器的值保存到万分位恢复余数 够减否 计数器清零零 N计数器清零 Y 将数减去1000 计数值加1 将计数器的值保存到千分位 恢复余数够减否 计数器清零 N Y 将数减去10 计数值加1 将计数器的值保存到十分位 够减否 NB、除法五、源程序代码A、减法源程序DATA SEGMENT ; 数据段RESULT_1 DB 0RESULT_2 DB 0RESULT_3 DB 0RESULT_4 DB 0RESULT_5 DB 0DATA ENDSSTACK SEGMENT STACK ; 堆栈段STA DB 64 DUP(0);开辟100单元作为堆栈空间STACK_TOP DB 0STACK ENDSCODE SEGMENT ; 代码段ASSUME CS:CODE , DS:DATA , ES:DATA , SS:STACK START:MOV AX, DATAMOV DS, AX ; 设置数据段MOV AX, STACKMOV SS, AX ; 设置堆栈段LEA SP, STACK_TOP ; 设置栈顶指针MOV AX,25468MOV CL, 0; 计数器清零NEXT1: SUB AX, 10000; 减10000JC OVER1; 有借位说明不够减INC CL ; 否则够减,计数器加1JMP NEXT1; 无条件跳转OVER1: ADD AX,10000; 最后恢复不够减时AL的余数MOV BX,AXMOV RESULT_1,CLADD CL,30HMOV AH,02MOV DL,CLINT 21HMOV CL,0MOV AX,BXNEXT2: SUB AX, 1000; 减1000JC OVER2; 有借位说明不够减INC CL ; 否则够减,计数器加1JMP NEXT2; 无条件跳转OVER2: ADD AX,1000; 最后恢复不够减时AL的余数MOV BX,AXMOV RESULT_2,CLADD CL,30HMOV AH,02MOV DL,CLINT 21HMOV CL,0MOV AX,BXNEXT3: SUB AX, 100; 减100JC OVER3 ; 有借位说明不够减INC CL ; 否则够减,计数器加1JMP NEXT3 ; 无条件跳转OVER3: ADD AX,100; 最后恢复不够减时AL的余数MOV BX,AXMOV RESULT_3,CLADD CL,30HMOV AH,02MOV DL,CLINT 21HMOV CL,0MOV AX,BXMOV CL, 0; 计数器清零NEXT4: SUB AL, 10; 减10JC OVER4; 有借位说明不够减INC CL ; 否则够减,计数器加1JMP NEXT4; 无条件跳转OVER4: ADD AL,10; 最后恢复不够减时AL的余数MOV BL,ALMOV RESULT_4,CLADD CL,30HMOV AH,02MOV DL,CLINT 21HMOV CL,0MOV AX,BXMOV RESULT_5,ALADD AL,30HMOV AH,02MOV DL,ALINT 21HMOV AX,4C00H ; 返回DOS(两句)INT 21H ;CODE ENDSEND START ; 最后一行要按回车键B、除法源程序DATA SEGMENT ; 数据段RESULT_1 DB 1 ; 结果1为低八位,初始量为’1’RESULT_2 DB 1 ; 结果1为低八位RESULT_3 DB 1 ; 结果1为低八位RESULT_4 DB 1 ; 结果1为低八位RESULT_5 DB 1 ; 结果1为低八位DATA ENDS ; 结束数据段STACK SEGMENT STACK ; 堆栈段STA DB 64 DUP(0) ;堆栈段初始化STACK_TOP DB 0 ;栈顶初始化STACK ENDS ;结束堆栈段CODE SEGMENT ; 代码段ASSUME CS:CODE , DS:DATA , ES:DATA , SS:STACK START: ;假定为指令MOV AX, DATA ;把具体DATA送至寄存器中MOV DS, AX ; 设置数据段MOV AX, STACK ; 把STACK送至寄存器中MOV SS, AX ; 设置堆栈段LEA SP, STACK_TOP ; 设置栈顶指针MOV AX,32345 ;赋予立即数32345给AXMOV DX,0 ;余数清零MOV CX, 10000 ;赋予立即数10000给CXDIV CX ;除于CX中的立即数MOV RESULT_1, AL ; 除以10000, 得万位数MOV AX, DX ;将DX中的余数给AXMOV DX,0 ;余数清零MOV CX, 1000 ;赋予立即数1000给CXDIV CX ;除以1000MOV RESULT_2, AL ; 除以1000, 得千位数MOV AX, DX ;将DX中的余数给AXMOV DX,0 ;余数清零MOV CL, 100 ;赋予立即数100给CLDIV CL ;除以100 ;MOV RESULT_3, AL ;除以100, 得百位数MOV AL, AH ; 将AH中的余数给ALMOV AH, 0 ;余数清零MOV CL, 10 ; 赋予立即数10给CLDIV CL ;除以10MOV RESULT_4, AL ; 余数除以10, 得十位数MOV RESULT_5, AH ; 余数为个位数MOV CX,05H ;循环5次MOV AH,02H ;显示符LEA DI, RESULT_1 ;将结果1的偏移量给DI LP: MOV DL,BYTE PTR[DI] ;将[SI]中的字节内容给DL ADD DL,30H ;DL中的内容加30,显示数字INT 21H ;DOS INT 21 功能调用INC DI ;每显示一个字符,DI加1LOOP LP ;LP循环MOV AX,4C00H ; 返回DOS(两句)INT 21HCODE ENDS ;代码段结束END START ; 最后一行要按回车键六、实验结果6.1分别在DOS和Windows 下编译、连接源程序生成可执行文件并调试,比较两个环境下生成的机器码的长度、寄存器内容、计算结果的异同。
A 、减法1、Windows下的调试结果2、DOS 下的调试结果3、比较机器码的长度、寄存器内容、计算结果的异同Windows DOS寄存器内容CS F400 1419 IP 0204 0000 SS 0711 1414 SP 003A 0042 BP 0000 0000 SI 0000 0000 DI 0005 0000 DS 0710 1403 ES0700 1403 计算结果1742617426B 、除法1、Windows下的调试结果2、DOS下的调试结果3、比较机器码的长度、寄存器内容、计算结果的异同Windows DOS寄存器内容CS F400 1419 IP 0204 0000 SS 0711 1414 SP 003A 0042 BP 0000 0000 SI 0000 0000 DI 0005 0000 DS 0710 1403 ES070014036.2、如何观察转换过程中标志寄存器中各标志位的结果?如何观察转换结果的变化?试改变被转换数值,对结果与编制为的变化加以说明和解释。
A 、减法4412H 改成3012H1、DOS2、WindowsB 、除法4412H 改成3012H1、DOS2、Windows计算结果 17426 17426C、标志寄存器NV 无溢出UP 串操作指令为自动增量指令EI 允许中断请求PL 符号为正NZ 运算结果不为零NA 辅助进位无进位PO 1的个数为奇数NC 无进位七、实验总结与体会本次实验,是运用减法和除法来进行二进制转换成BCD码。
在实验前应做好充分的预习,画好流程图并编好程序,可以的话还是在实验前运行一下,若有问题可及时问老师。
而在编写程序中,应及时学会运用循环指令,注意算法,且要注意添加显示符,否则无法显示你的运算结果。
在本次试验中,因为没有很注重预习,导致实验时程序出现了差错。
课后进行了补充和修改,在DOS和EMU8086环境下能较为顺利的完成了实验内容。
八、思考题如何让你的程序自适应地处理高位为‘0’时不输出或输出空格呢?分配一个标志,在该标志不为零时,输出值是零就不输出或输出空格,标志为零时无论何值都要输出。
如果是从高位开始输出,那么只要先置标志,在输出一个非零数字或者当做到个位数的时候,把这个标志清零。