任务八BCD码相加.
4位BCD码加法

实验二 4位BCD码加法实验目的:1.掌握BCD码加法的编程方法。
2.掌握串操作指令的使用方法。
3.掌握简单循环结构编程方法。
实验设备:计算机一台。
预装Windows XP、宏汇编MASM5。
实验内容A:编写能够实现以下要求的汇编语言程序,并上机实现。
1.编写一个4位BCD码加法程序,并将结果输出到屏幕上。
2.给出两个4位BCD码加数,手工计算出结果,再用本程序获得结果,对照二者是否相同。
注意数的高、低位在内存中的放置规则。
实验内容B:编写能够实现以下要求的汇编语言程序,并上机实现。
1.将参考程序中输出到屏幕部分修改成循环结构。
预习要求:1.阅读实验内容A的参考源程序,对其结构以及实现方法进行分析,在理解的基础上掌握编程方法。
2.根据要求,编写实验内容B的源程序。
3.编辑建立实验内容A和实验内容B的源程序文件,存入U盘保存。
4.写出预习报告,报告中应有实验内容B的源程序清单。
实验步骤:1.编辑建立实验内容A的源程序,对其进行汇编、链接获得可执行文件。
运行可执行文件,实现实验内容A的要求。
2.参考实验内容A的源程序,编辑建立实验内容B的源程序,对其进行汇编、链接获得可执行文件。
如果在汇编、链接过程中有错误产生,则根据提示信息逐一修改错误,直到无错误产生。
运行可执行文件,实现实验内容B的要求。
重要提示:1.注意参加运算的数的高位~低位的放置规则。
2.参加运算的2个数的位数必须相同。
3.对于实验内容B,以[SI]为源操作数,每循环一次SI加1。
4.循环结构所用到的计数单元,不能与循环结构中所用到的单元冲突。
实验内容A参考程序:NAME demo2DATA SEGMENTSTRI1 DB 1,7,5,2 ;第1个加数,注意低位在前STRI2 DB 3,8,1,4 ;第2个加数,注意应与第1个加数位数相同COUNT EQU $-STRI2 ;加数的位数DATA ENDSSTACK SEGMENT PARA STACK 'STACK'DB 100 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,SS:STACK,DS:DATA,ES:DATASTART PROC FARPUSH DSMOV AX,0PUSH AXGO: MOV AX,DATAMOV DS,AX ;设置源串段基址MOV ES,AX ;设置目的串段基址MOV SI,OFFSET STRI1 ;设置源串首地址MOV DI,OFFSET STRI2 ;设置目的串首地址MOV CX,COUNT ;设置串长度;CLC ;为多字节加法预清进位标志CYCLE: MOV AL,[SI]ADC AL,[DI]AAAMOV [DI],ALINC SIINC DILOOP CYCLEMOV SI,OFFSET STRI2MOV DL,[SI+3] ;输出千位ADD DL,30HMOV AH,2INT 21HMOV DL,[SI+2] ;输出百位ADD DL,30HMOV AH,2INT 21HMOV DL,[SI+1] ;输出十位ADD DL,30HMOV AH,2INT 21HMOV DL,[SI+0] ;输出个位ADD DL,30HMOV AH,2INT 21HRETSTART ENDPCODE ENDSEND START实验B参考程序DATA SEGMENTSTRI1 DB 1,7,5,2 ;第1个加数,注意低位在前STRI2 DB 3,8,1,4 ;第2个加数,注意应与第1个加数位数相同COUNT EQU $-STRI2 ;加数的位数DATA ENDSSTACK SEGMENT PARA STACK 'STACK'DB 100 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,SS:STACK,DS:DATA,ES:DATASTART PROC FARPUSH DSMOV AX,0PUSH AXGO: MOV AX,DATAMOV DS,AX ;设置源串段基址MOV ES,AX ;设置目的串段基址MOV SI,OFFSET STRI1 ;设置源串首地址MOV DI,OFFSET STRI2 ;设置目的串首地址MOV CX,COUNT ;设置串长度;CLC ;为多字节加法预清进位标志CYCLE: MOV AL,[SI]ADC AL,[DI]AAAMOV [DI],ALINC SIINC DILOOP CYCLEMOV SI,OFFSET STRI2mov bx,4lp1: MOV DL,[SI+3] ADD DL,30HMOV AH,2INT 21Hdec SIdec bxjnz lp1RETSTART ENDPCODE ENDSEND START。
BCD 加法

.CODE
初始化:
START: MOV AX,@DATA
MOV DS,AX
MOV ES,AX
NOP
MOV F1,0
;先清除显示,再接收键输入
输入加数和被加数,进行相加:
START1:
LEA DI,augend
MOV CX,4
;按键次数
CALL GetBCDKey ;得到双字节十进制数(被加数)
MOV F1,1 ;接收到第一个键,才清除显示
显示结果
双字节BCD码加法程序框图
源代码程序
定义:
.MODEL
TINY
EXTRN Display8:NEAR,GetBCDKey:NEAR
EXTRN F1:BYTE
.STACK 100 .DATA
BUFFER DB 8 DUP(?) augend DB 2 DUP(?) ;被加数 addend DB 2 DUP(?) ;加数
MOV ADC CLD LEA
BL,0 BL,0
DI,BUFFER
;进位 ;存放显示结果
相加的得数(4位)依次转为16进制保存
CALL B1toB2 ;低位 MOV AL,AH CALL B1toB2 ;高位 MOV AL,BL
STOSB
子程序
B1toB2 PROC
NEAR
PUSH AX
AND AL,0FH
LEA SI,BUFFER
CALL Display8
JMP START1
将高位0消隐
BlackDisplay PROC NEAR
STD
MOV DI,SI
BlackDisplay1:
LODSB
CMP AL,0
课题 BCD码加法器

课题BCD码加法器
一、课题目的
1.熟练掌握用VHDL语言的行为描述及构造体描述设计组合电路。
2.初步掌握真值表的设计。
二、课题原理
BCD码是一种二进制代码表达的十进制数。
BCD码与四位二进制代码关系如下表所示,从表中可以看到从0-9时,BCD码与四位二进制码相同。
从10-15后,BCD码等于四位二进制码加“0110”。
这个关系构成了四位二进制码与BCD码的转换关系,同时也是用四位二进制加法器实现BCD码加法的算法基础。
设计BCD码加法器首先要将两个BCD码输入到二进制加法器相加,得到的和数是一个二进制数,然后通过下表将四位二进制码转换成BCD码。
BCD码与四位二进制代码关系
三、课题内容
1.用VHDL语言的行为描述方式设计BCD码加法器,并用仿真文件验证设计正确性。
2.选做题(提高部分)当两数相加大于19时,输出将显示00,并且会闪动(用64Hz 频率控制闪动),另外扬声器会报警。
四、设计提示
1.用VHDL语言的构造体描述方式设计时,加“6”校正电路实现真值表的设计。
2.用VHDL语言的行为描述方式设计时,要用条件语言判断两个BCD码数相加后是否大于9,当大于9时,采取加“6”教正。
五、课题报告要求
1.叙述所设计的BCD码加法器电路工作原理。
2.写出用VHDL语言的构造体描述方式设计BCD码加法器的各模块源文件。
3.写出用VHDL语言的行为描述方式设计BCD码加法器的源文件。
4.心得体会。
八位二进制码转化为BCD码及余三码、BCD码转化余三码

河南科技大学课程设计说明书课程名称 EDA技术题目八位二进制转化为BCD码及余三码、BCD码转化为余三码学院车辆与动力工程学院班级学生姓名指导教师日期2012年7月14号八位二进制码转化为BCD码及余三码、BCD码转化余三码摘要八位二进制数转化为BCD码和余三码的转换在计算机语言中起到了非常重要的作用,通过这次的课程设计让我们更好地掌握二进制数转化为BCD 码和余三码。
二进制转化为余三码不能直接转化,只能通过BCD码为中介进而转化成余三码。
余三码(余3码)是由8421BCD码加上0011形成的一种无权码,由于它的每个字符编码比相应的8421BCD码多3,故称为余三码。
BCD码的一种。
余三码是一种对9的自补代码,因而可给运算带来方便。
其次,在将两个余三码表示的十进制数相加时,能正确产生进位信号,但对“和”必须修正。
修正的方法是:如果有进位,则结果加3;如果无进位,则结果减3。
如,(526)10进制=(0101 0010 0110)8421BCD码=(1000 0101 1001)余3码EDA技术打破了软件和硬件间的壁垒,使计算机的软件技术与硬件实现、设计效率与产品性能合二为一,它代表了电子设计技术和应用技术的发展方向。
VHDL主要用于描述数字系统的接口,结构和功能,它的语法简单易懂,移植性好。
本设计采用VHDL,Altera公司的Quartus II软件仿真,来实现八位二进制到BCD和BCD到余三码的转换。
由于八位二进制的最大范围是0~255,而八位BCD码的范围是0~99,故在转换时输入信号只能取99以内的数。
关键词:八位二进制、BCD码、余三码、VHDL目录第一章绪论 (1)§1.1 课程设计题目 (1)§1.2 设计目的 (2)§1.3 课程设计要求 (2)第二章EDA、VHDL简介 (3)§2.1 EDA简介 (3)§2.2 VHDL简介 (3)第三章设计过程 (5)§3.1设计规划 (5)§3.2各个模块设计及原理图 (5)§3.2.1八位二进制码转化为八位BCD码 (5)§3.2.2八位BCD码转化为八位余三码 (6)§3.2.3八位二进制码转化为8位余三码 (7)第四章系统仿真 (9)§4.1八位二进制码转化为八位BCD码仿真及分析 (9)§4.2八位BCD码转化为八位余三码仿真及分析 (9)§4.3八位二进制码转化为八位余三码仿真及分析 (10)第五章总结 (11)参考文献 (12)第一章绪论随着计算机科学与技术突飞猛进地发展,用数字电路进行信号处理的优势也更加突出,自20世纪70年代开始,这种用数字电路处理模拟信号的所谓“数字化”浪潮已经席卷了电子技术几乎所有的应用领域EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。
BCD码加法器

优秀工程师班第一次大作业用四位全加器构成一位 BCD 码加法器班级: 001111作者: 00111116 江新远实现方式一:器件一、问题用四位二进制全加器74LS283构成一位 8421BCD码加法电路二、 74LS283介绍74LS283是 TTL双极型并行 4 位全加器,,特色是先行禁卫,所以运算速度4 位二进制数输入A1A2A3A4B1B2B3B4很快,其外形为双列直插。
它有两组S1S2S3S4,C1一位低位向本位的进位输入,有一组二进制输出,一个最高位的进位输出,改器件所达成的 4 位二进制加法如下图。
三、解决思路用四位全加器构成一位8421BCD码的加法电路。
两位 8421BCD码相加,其和仍应为 8421BCD码,如不是 8421BCD码则结果错误。
①若和小于等于 9 结果正确,如40100+3→+ 0011BCD码加法器70111 01118421BCD796(011) 60110+ 7→+ 011113101111018421BCD61101+ 01101,0011“0011”681000+9→+ 1001171,000161,0001+01101,0111产生错误的原由是 8421BCD码为十进制,逢十进一,而四位二进制数是逢十六进一,故两者进位关系不一样。
此中恰好相差 6,故需加 6 进行修正。
这样,构成两个一位8421BCD相加时,一定由三部分构成:一部分进行加数和被加数相加;第二部分是修正鉴别,鉴别能否要加以修正,即产生修正控制信号;第三部分达成加 6 修正。
第一部分和第三部分均由 4 位全加器实现。
第二部分修正鉴别电路应在8421BCD码相加有进位信号CO产生时,或许和数在10~15的状况下产生修正控制信号 F,所以 F 应为F CO m10,11,12,13,14,15利用图所示的卡诺图将和大于9 的部分化简得出F:F CO F3 F2F3 F1CO F3 F2F3 F1依据上述剖析及 F 信号产生的逻辑表达式可获得两个一位8421BCD码相加的电路。
BCD码加减法

BCD码加减法3、BCD码的加减运算由于编码是将每个十进制数用一组4位二进制数来表示,因此,若将这种BCD码直接交计算机去运算,由于计算机总是把数当作二进制数来运算,所以结果可能会出错。
例:用BCD码求38+49。
解决的办法是对二进制加法运算的结果采用"加6修正,这种修正称为BCD调整。
即将二进制加法运算的结果修正为BCD码加法运算的结果,两个两位BCD数相加时,对二进制加法运算结果采用修正规则进行修正。
修正规则:(1)如果任何两个对应位BCD数相加的结果向高一位无进位,若得到的结果小于或等于9,则该不需修正;若得到的结果大于9且小于16时,该位进行加6修正。
(2)如果任何两个对应位BCD数相加的结果向高一位有进位时(即结果大于或等于16),该位进行加6修正.(3)低位修正结果使高位大于9时,高位进行加6修正。
下面通过例题验证上述规则的正确性。
用BCD码求35+21 BCD码求25+37 用BCD码求38+49 用BCD码求42+95用BCD码求91+83 用BCD码求94+7 用BCD码求76+45两个组合BCD码进行减法运算时,当低位向高位有借位时,由于"借一作十六"与"借一作十"的差别,将比正确的结果多6,所以有借位时,可采用"减6修正法"来修正.两个BCD码进行加减时,先按二进制加减指令进行运算,再对结果用BCD调整指令进行调整,就可得到正确的十进制运算结果。
实际上,计算机中既有组合BCD数的调整指令,也有分离BCD数的调整指令。
另外,BCD码的加减运算,也可以在运算前由程序先变换成二进制数,然后由计算机对二进制数运算处理,运算以后再将二进制数结果由程序转换为BCD码。
4、8421BCD码、余3码、格雷码用四位二进制代码来表示一位十进制数,称为二--十进制编码,简称BCD(Binary Coded Decimal)码。
实验四 8421BCD码加法乘法运算概要

Quartus Ⅱ基本应用8421BCD码加法乘法运算一、实验目的1. 用原理图输入法实现2个8421BCD的和,用数码管显示被加数、加数和加的结果。
每个8421BCD码由4个拨码开关作为输入,总共需要8个拨码开关。
输出要求在开发板数码管上显示输入的2个8421BCD 码和加的结果。
2. 用VHDL或Verilog HDL实现2个8421BCD的乘积,用数码管显示被乘数、乘数和乘的结果。
每个8421BCD码由4个拨码开关作为输入,总共需要8个拨码开关。
输出要求在开发板数码管上显示输入的2个8421BCD码和乘的结果。
二、实验设备1、计算机(Quartus Ⅱ)2、DE0开发板三、实验原理BCD代码。
Binary-Coded Decimal,简称BCD,称BCD码或二转十进制代码,亦称二进码十进数。
是一种二进制的数字编码形式,用二进制编码的十进制代码。
这种编码形式利用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行。
这种编码技巧,最常用于会计系统的设计里,因为会计制度经常需要对很长的数字串作准确的计算。
相对于一般的浮点式记数法,采用BCD码,既可保存数值的精确度,又可免却使电脑作浮点运算时所耗费的时间。
此外,对于其他需要高精确度的计算,BCD编码亦很常用。
8421码是BCD代码中最常用的一种。
在这种编码方式中每一位二值代码的1都是代表一个固定数值,把每一位的1代表的十进制数加起来,得到的结果就是它所代表的十进制数码。
由于代码中从左到右每一位的1分别表示8,4,2,1,所以把这种代码叫做8421代码。
每一位的1代表的十进制数称为这一位的权。
8421码中的每一位的权是固定不变的,它属于恒权代码。
8421BCD码乘法运算把二进制数中的“0”和“1”全部当成是十进制数中的“0”和“1”即可。
根据十进制数中的乘法运算知道,任何数与“0”相乘所得的积均为“0”,这一点同样适用于二进制数的乘法运算。
八位二进制加法器

编码器与74LS283加法器相接,通过8421BCD码加法器串接可以计算三位十进制数的加法运算,输出结果通过数码管显示
2、总体设计方案论证及选择
加法器方案设计
方案一:
当有多位数相加,则可采用并行相加串行进位的方式来完成。例如,有两个4位二进制数A3A2A1A0和B3B2B1B0相加,可以采用两片内含两个全加器或1片内含4个全加器的集成电路组成,其原理图如下图所示:
综合各个方面的,我们可以选择超前进位加法器来设计电路。
3、系统框图
输入十进制数输出四位二进制数
输出和数
输入二进制数串接
输出十进制数
4、工作原理
当输入十进制数的时候,8421BCD码编码器先开始工作,编码器先将十进制数转换成四位二进制数,输出的四位二进制数直接到达8421BCD码加法器的输入端,我们可以使用
2、总电路图:
2.1三位十进制数相加总电路图
2.2八位二进制数加法总电路图
第四章结束语
此次电子系统设计中,我们投入了最大的热情和精力,从参照资料,设计电路图,选择元器件到设计电路,每一个过程都经过了大家的共同探讨,其过程中出现了不少的问题,我们没有气馁,没有退缩,我们积极向同学和老师请教,并且一遍又一遍的重复实践,直到我们期望的结果实现。事实也证明我们的努力没有白费,认真严谨的实习态度给我们带来了成功的喜悦!通过这次电子系统设计,我们掌握了设计一个数字电路的基本方法和基本步骤,实际解决了设计中出现的问题,增强了寻找问题,解决问题的能力。此次电子设计的成功不仅帮助我们更好地掌握书本知识,尤其重要的是增强了我们的自信,培养了我们独立思考的能力。通过这次课程设计,我学到了很多,学习知识不只是一个记忆的过程,也是消化吸收的过程,只有通过实验才能检验所学知识的是否扎实牢靠。原本以为已经把课本吃的挺透的了,没想到在实际操作过程中还是出现了很多问题。最开始的时候一直没有头绪,不知道如何下手,不能把所学到的知识应用到实际的电路设计中去。在经过认真思考、仔细分析后,完成了电路,较为完整的实现了课程设计的要求。在这个过程中,最感谢的是老师和同学们的帮助,我们得以解决问题,使实验顺利进行下去。唯一美中不足的就是对比其他同学的实验,感觉我们的实验内容有一点少,涉及的知识并不是很多,不能从课程设计中学到更多的知识,颇为遗憾。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在单片机应用系统中,通常都要求进行 BCD码的运算,特别是在十进制运算的系 统中,很多的系统在人机界面的输出部分 往往都要用十进制显示,所以BCD码是很 重要的一部分。本任务通过WAVE6000软 件来观看BCD码的相加过程。
在单片机应用系统中,通常都要求进行BCD码的运算, 特别是在十进制运算的系统中,很多的系统在人机界 面的输出部分往往都要用十进制显示,所以BCD码是 很重要的一部分。本任务通过WAVE6000软件来观看 BCD码的相加过程。 【任务目的】 1、理解什么是BCD码。 2、理解BCD码相加的过程。 【任务描述】 1、通过不同数据区的数据改变观察 BCD码的情况。 2、通过WAVE6000的窗口观察BCD码相加的情
2、两个四位十进制数相加
程序中,31H与30H储存的是一个加 数,41H与40H存储的是另一个加数,都 以压缩BCD码形式存储,其中31H高四位 是千位,低四位是百位,30H高四位是十 位,低四位是个位。41H和40H同样。两 个加数相加后存储在52H、51H、50H。 其中如有进位,则万位存储在52H的低四 位,51H存千位与百位,50H存十位与个 位。
二.BCD码基本知识
BCD码有很多种表示方法,我们通常用 的BCD码是8421BCD码,我们单片机课 程当中的BCD码如不特别说明就是指 8421BCD码,8421BCD码实际就是用 0000—1001这样十个四位二进制数表示 0—9十个十进制数,但我们是以字节为 单位的,一个字节是八位二进制数,如 果高四位和第四位各存一个BCD码,这 样叫做压缩BCD码。
ADD A , 30H
;将一个加数的低位和另一个加数的低位 相加
MOV 50H , A ;将和值存至和值寄存器的低位 MOV A , 41H ; ADDC A , 31H ;将两个加数的高位相加 MOV 51H , A ;将和值的数据存至和值高位 MOV A , #0 ;如果有进位的话,将进位放至万位,即 将进位位Cy加至ACC ;既可。 ADDC A , #0 ;ACC与0带进位位相加,就把Cy加至ACC 了 MOV 52H , A ;将进位位存至52H END ;结束伪指令
四.总结
把这段程序在WAV6000中编辑、汇编, 用软件仿真运行,我们通过按F8单步执 行,来观察SFR中的累加器ACC、状态寄 存器PSW的内容(进位标志位Cy)的变 化,与DATA窗口中30H、31H、40H、 41H、50H、51H、52H几个单元中的数 据变化,来感受十六进制与十进制的数 据变化情况。
MOV 50H , A
MOV A , 41H ADDC A , 31H DA A MOV 51H , A MOV A , #0
ADDC A , #0
MOV 52H , A END
;将加完并转化完的十进制数存至和值寄 存器的低位 ; ;将两个加数的高位相加 ;将高位相加后调整 ;将处理后的数据存至和值高位 ;如果有进位的话,将进位放至万位, 即将进位位Cy加至ACC ;既可。 ;ACC与0带进位位相加,就把Cy加至 ACC了 ;将万位存至52H ;结束伪指令
参考程序如下:
ORG 0000H
;定位伪指令,指定下一条指令的地址,第一条指令必须放在 0000H MOV 30H , #78H ;第一个加数的十位与个位。具体数值可以自己修改! MOV 31H , #34H ;第一个加数的千位与百位。具体数值可以自己修改! MOV 40H , #56H ;第二个加数的十位与个位。具体数值可以自己修改! MOV 41H , #12H ;第二个加数的千位与百位。具体数值可以自己修改! MOV 50H , #0 ;将和值所要存储的数据区先清零。 MOV 51H , #0 MOV 52H , #0 MOV A , 40H ;因为加减指令必有一个为ACC暂存器,所以先将一个加数的 低 ;位送至ACC中,用于和另一个加数的低位相加。 ADD A , 30H ;将一个加数的低位和另一个加数的低位相加 DA A ;因为相加是按十六进制相加的,所以加完后要将十六进制的 数 ;转化为十进制的
一.用于加法运算的指令和状态寄存器PSW
MOV A,direct 把RAM单元的内容传送到累加器ACC中 ADD A, direct 不带进位加法 ADDC A, direct 带进位加法 DA A 十进制调整 Cy:进位标志位。在加法或减法时,当和值大于255或差值小于0 时,Cy为1否则为0。 AC:辅助进位标志位。在加法或减法时,D3向D4有进位或借位, AC为1,否则为0。 F0:用户标志位,用户可以自行定义 RS1、RS0:当前寄存器组的选择位 OV:溢出标志位。D6、D7进位或借位不同时则发生溢出,即OV 为1,否则为0. P: 奇偶标志位。当累加器ACC中1的个数为奇数时,P为1,否则 为0。
ቤተ መጻሕፍቲ ባይዱ
三.实训内容与步骤
1、两个四位十六进制数相加 程序中,31H与30H储存的是一个加 数,41H与40H存储的是另一个加数,都 以十六进制(即四位2进制)形式存储, 其中31H是高位,30H是低位。41H和40H 同样。两个加数相加后存储在52H、51H、 50H。其中如有进位,则进位位存储在 52H中,51H存高位,50H存低位。
参考程序如下: ORG 0000H ;定位伪指令,指定下一条指令的地址,第一条指 令必须放在0000H MOV 30H , #78H ;第一个加数的高位。具体数值可以自己修改! MOV 31H , #34H ;第一个加数的低位。具体数值可以自己修改! MOV 40H , #56H ;第二个加数的高位。具体数值可以自己修改! MOV 41H , #12H ;第二个加数的低位。具体数值可以自己修改! MOV 50H , #0 ;将和值所要存储的数据区先清零。 MOV 51H , #0 MOV 52H , #0 MOV A , 40H ;因为加减指令必有一个为ACC暂存器,所以先将 一个加数的低 ;位送至ACC中,用于和另一个加数的低位相加。