北航微机原理上机实验之二(4位BCD码相加)

2011- 2012 学年第一学期
微机原理实验二:4位BCD码相加班级392311(转系)学院高等工程
姓名李柏学号3903·2415
2011年12月4日
本人声明
我声明,本论文为本人独立完成的,在完成论文时所利用的一切资料均已在参考文献中列出。

学习字符型数据与数值型数据的相互转换方法,了解BCD码输入及相加的方法。

在数据段中定义3个变量x1,x2,x3,用于存储从键盘上输入的两个BCD码,要求低位数据占高位置存放,x3存放这两个BCD码的和;从键盘输入两个4位的BCD码,检查是否为数字键,非数字键不接收;将输入的2个4位字符型数据转换为4位非压缩BCD码存于数据段的变量中;将2个4位非压缩BCD码相加,将结果利用INT21H的2号功能
DATA SEGMENT ;用X1与X2定义数据段存储输入的十进制数,用X3存储运算结果.
X1 DB 4 DUP(0)
X2 DB 4 DUP(0)
X3 DB 5 DUP(0) ;两个4位数相加可以生成5位数,因此定义5个字节.
DATA ENDS
STACK SEGMENT STACK ;定义堆栈段,该定义也可不写,由系统自动分配空间.
DW 100 DUP(?)
STACK ENDS
CODE SEGMENT ;码段定义
ASSUME CS:CODE,DS:DATA,SS:STACK ;段分配伪指令
TYPEIN PROC ;定义子程序TYPEIN,处理每一个输入的字符
AGAIN:MOV AH, 8 ;使用DOS的8号功能,即【将键盘的输入存入AL且无回显】
INT 21H
CMP AL, 30H ;30H即‘0’,将键盘输入与’0’和’9’比较,一旦不在此范围内则认定输入无效
JB AGAIN
CMP AL, 39H
JA AGAIN
PUSH AX ;此处将输入值入栈保存,即保护现场,因为下文运用2号功能显示时中断指令INT 21H会破坏AL寄存器MOV DL, AL
MOV AH, 2
INT 21H ;执行2号指令,将DL中存储的AL【显示】
POP AX ;恢复现场
RET ;TYPEIN过程的返回指令
TYPEIN ENDP ;结束子程序TYPEIN的书写
MAIN PROC FAR ;远调用
PUSH DS ;以下三句为结尾返回DOS做准备
MOV AX, 0
PUSH AX
MOV AX, DATA
MOV DS, AX ;以下两句将指针对准数据段内的X1处
MOV SI, OFFSET X1
MOV CX, 4 ;设置了4次循环,为了在存储器的变量X1内存放被加数
NEXT1: CALL TYPEIN ;调用子程序TYPEIN
AND AL, 0FH;将AL高4位清零,因为输入的数字仅仅占用AL低4位就足够用,清零则是为了防止高4位对存储结果的干扰MOV [SI], AL ;将AL存入SI指向的位置,而SI在最初指向X1的EA
INC SI ;指针加1 (因为PTR BYTE)
LOOP NEXT1 ;循环执行4次,将被加数存入X1变量内,但是注意先输入的是十进制的高位,所以高位在低地址。

MOV DL, '+' ;上屏显示一个+号
MOV AH, 2
INT 21H
MOV SI, OFFSET X2 ;以下部分完全同理,输入加数,依然占用4字节,存入X2变量内
MOV CX, 4
NEXT2: CALL TYPEIN
AND AL, 0FH
MOV [SI], AL
INC SI
LOOP NEXT2 ;至此将加数存入了X2之中,以下进行加法运算
MOV SI, (OFFSET X2)-1 ;以下三句将SI,DI,BX分别对准了被加数,加数以及结果的最高位
MOV DI, (OFFSET X3)-1
MOV BX, (OFFSET X3)+4
MOV CX, 4 ;对CX赋值往往暗示将有4次循环
OR CX,CX ;清空FR标志位,只是为将CF置零
ADD1:
MOV AL, [SI] ;把被加数最高位送进AL
ADC AL, [DI] ;被加数与加数的最高为相加,并加上CF运算前那个状态的值
AAA;由于[SI]与[DI]存储的数位都代表非压缩的一个十进制数字,即各自的高4位一律0,且结果在AL内,满足AAA指令的条件MOV [BX], AL ;将AAA处理后的AL送入X3变量的相应位置保存起来
DEC SI ;以下三个指针自动减1,分别对齐下一位
DEC DI
DEC BX
LOOP ADD1 ;执行循环,将加数与被加数的4个数位的加和,也就是结果的低4位正确地存入X3相应位置之中,但是暂且未顾及最高位是否进位得1
;
MOV AL, 0 ;以下两句旨在获取次高位运算后产生的那个CF值,将这个标志位存入AL.
ADC AL, 0
MOV [BX],AL ;将其注入X3中充当加和结果的最高位(恰好存放在OFFSET X3代表的低地址之中)
MOV DL, '=' ;显示一个=号
MOV AH, 2
INT 21H
MOV BX, OFFSET X3
MOV CX, 5 ;此处5次循环是为了分别存入DL,将最终加和结果按各数位依次地上屏显示
NEXT3:MOV DL,[BX]
ADD DL,30H ;此处将0-9二进制数码转换成对应的ASCII码,只有加了这句才能正确显示各位数字
MOV AH,2
INT 21H
INC BX ;使用递增是因为这样正好符合十进制数高位在左先显示的客观事实
LOOP NEXT3
RET ;在MAIN过程中的退出
MAIN ENDP ;结束MAIN过程
CODE ENDS ;码段编写完毕
END ;全文结束标记
在代码编写中,收获较大,自认为需要格外注意以下几点:
1.在保护现场的动作中,对某寄存器压栈保护时,必须谨记堆栈是对字操作,千万不能犯PUSH AL之类的低级错误。

2.相应的过程开始结束有固定的语句,开始前先要想好如何退出,要一一对应。

3.显示数码时,务必将二进制码转成对应的ASCII,否则一定显示错误,具体做法是,ADD一个30H。

4.对一些固定技巧需要更敏感地读懂其意图,例如OR CX,CX (自己异或自己)等等等等。

合集下载

4位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 加法

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

实验四 四位二进制全加器

实验四  四位二进制全加器
图8-2
3.实验设备及材料
2.SAC-DS4数字逻辑电路实验箱 1个
3.万用表1块
4.74LS283 四位二进制全加器1片
4.实验方法步骤及注意事项
用开关按表8-1设置输入A1-A4、B1-B4、C0的状态,借助指示灯观测输出F1-F4、C4的状态,并记入表8-1中。
表8-1
输 入
输 出
A4A3A2A1
本科学生实验报告
学号姓名
学院物理与电子信息学院专业、班级10物理A
实验课程名称数字电路技术试验
教师及职称张超(讲师)
开课学期2012至2013学年上学期
填报时间2012年09月日
云南师范大学教务处编印
实验序号
4
实验名称
四位二进制全加器
实验时间
2012.10.9
实验室
同析3幢215
一.实验预习
1.实验目的
2、74LS283四位全加器特性函数
教师评语及评分:
签名:年月日
B4B3B2B1
C0
F4F3F2F1
C4
0 0 0 1
0 0 0 1
1
0 1 0 0
0 0 1 1
0
1 0 0 0
0 1 1 1
1
1 0 0 1
1 0 0 0
0
1 0 1 1
0 1 0 1
1
1 1 0 0
0 1 1 0
0
1 1 0 1
0 1 0 0
1
1 1 1 1
1 1 1 1
0
利用开关输入BCD码,借助指示灯观测输出的余3码,填入表8-2中。
0 1 0 1
0 0 1 1
0 1 1 0

四位加法器实验报告

四位加法器实验报告

四位加法器实验报告1.实验目的:掌握组合逻辑电路的基本分析与设计方法;理解半加器和全加器的工作原理并掌握利用全加器构成不同字长加法器的各种方法;学习元件例化的方式进行硬件电路设计;学会利用软件仿真实现对数字电路的逻辑功能进行验证和分析。

2.实验仪器:数字逻辑实验箱3.实验内容:A. 设计实现逐次进位加法器,进行软件仿真并在实验平台上测试。

B. 设计实现超前进位加法器,进行软件仿真并在实验平台上测试。

C.使用VHDL自带加法运算实现一个4位全加器。

4.实验代码:A. 逐次进位加法器:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity FDFA is#定义串行加法器总体接口port(A,B:in std_logic_vector(3 downto 0);Ci:in std_logic;S:out std_logic_vector(3 downto 0);Co:out std_logic);end entity;architecture struct of FDFA iscomponent fadder is#基于一位全加器port(a,b,ci:in std_logic;s,co:out std_logic);end component fadder;signal c0,c1,c2:std_logic;beginU0:fadder port map(A(0),B(0),Ci,S(0),c0);U1:fadder port map(A(1),B(1),c0,S(1),c1);U2:fadder port map(A(2),B(2),c1,S(2),c2);U3:fadder port map(A(3),B(3),c2,S(3),Co);end architecture struct;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity fadder is #定义一位全加器port(a,b,ci:in std_logic;s,co:out std_logic);end entity;architecture func of fadder isbeginco<=(a and b) or (ci and ( a xor b));s<=a xor b xor ci;end architecture func;B. 超前进位加法器:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity LAC is#定义超前进位加法器总体接口port(A,B:in std_logic_vector(3 downto 0);Ci:in std_logic;Co:out std_logic;S:out std_logic_vector(3 downto 0));end entity;architecture struct of LAC issignal wirep, wireg:std_logic_vector(3 downto 0);signal wirec:std_logic_vector(2 downto 0);component fadder is#基于一位全加器port(Ai,Bi:in std_logic;c:in std_logic;si:out std_logic;pi:out std_logic;gi:out std_logic);end component fadder;component Ker is#Ker总理进位传递信号P与进位产生信号G,以及进位信号C port(ci:in std_logic;P:in std_logic_vector(3 downto 0);G:in std_logic_vector(3 downto 0);C:out std_logic_vector(3 downto 0));end component Ker;beginU0:fadder port map(Ai=>A(0),Bi=>B(0),c=>Ci,si=>S(0),pi=>wirep(0),gi=>wireg(0));U1:fadder port map(Ai=>A(1),Bi=>B(1),c=>wirec(0),si=>S(1),pi=>wirep(1),gi=>wireg(1));U2:fadder port map(Ai=>A(2),Bi=>B(2),c=>wirec(1),si=>S(2),pi=>wirep(2),gi=>wireg(2));U3:fadder port map(Ai=>A(3),Bi=>B(3),c=>wirec(2),si=>S(3),pi=>wirep(3),gi=>wireg(3));L:Ker port map(ci=>Ci,P(0)=>wirep(0),P(1)=>wirep(1),P(2)=>wirep(2),P(3)=>wirep(3),G(0)=>wireg(0),G(1)=>wireg(1),G(2)=>w ireg(2),G(3)=>wireg(3),C(0)=>wirec(0),C(1)=>wirec(1),C(2)=>wirec(2),C(3)=>Co);end architecture struct;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity fadder is #定义一位全加器port(Ai,Bi:in std_logic;c:in std_logic;si:out std_logic;pi:out std_logic;gi:out std_logic);end entity;architecture func of fadder isbeginpi<=Ai xor Bi;gi<=Ai and Bi;si<=Ai xor Bi xor c;end architecture func;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity Ker is#定义Ker port(ci:in std_logic;P:in std_logic_vector(3 downto 0);G:in std_logic_vector(3 downto 0);C:out std_logic_vector(3 downto 0));architecture func of Ker isbeginC(0)<=G(0) or ( P(0) and ci );C(1)<=G(1) or ( P(1) and G(0) ) or ( P(1) and P(0) and ci );C(2)<=G(2) or ( P(2) and G(1) ) or ( P(2) and P(1) and G(0) ) or ( P(2) and P(1) and P(0) and ci );C(3)<=G(3) or ( P(3) and G(2) ) or ( P(3) and P(2) and G(1) ) or ( P(3) and P(2) and P(1) and G(0) ) or ( P(3) and P(2) and P(1) and P(0) and ci );end architecture func;C. VHDL自带加法运算实现4位全加器:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity VHDLAD is#定义VHDL自带加法运算实现4位全加器总体接口,如果加和比原来和少,则会进位port(A,B:in std_logic_vector(3 downto 0);Ci:in std_logic;Co:out std_logic;S:out std_logic_vector(3 downto 0));end VHDLAD;architecture bhv of VHDLAD issignal D:std_logic_vector(3 downto 0);beginprocess(A,B,Ci,D)beginD <= A + B;if(Ci = '1') thenD <= D + 1;end if;if(D >= A) thenS <= D;Co <= '0';elseS <= D;Co <= '1';end if;end process;end bhv;5.软件仿真结果说明下面图片每幅有14条信号线,从上到下依次为A的低位到高位(共4条)、B的低位到高位(共4条)、输入的进位信号、和的低位到高位(共4条)、输出进位信号。

四位BCD码

四位BCD码

BCD码:摘要:在采用可编程控制技术的电气控制系统中,控制数据可在系统运行时由外部设置、输入,文章从外部数据BCD码拨盘地址分配,到数据处理,输出控制等,以简单实例介绍了程序设计思路、技巧和参考程序。

关键词:可编程序控制器;外部输入;BCD数码;数据处理;实时控制随着工业自动化程度的不断提高,可编程序控制器(PLC)正在走入工矿企业的每一个角落,只要有控制要求的场合,就有PLC的应用。

PLC常被称为全能“工业电脑”,用它可以方便地对工业现场进行实时控制。

在工业电气控制系统中,经常遇到控制常数设定和修改的问题,例如:某加热控制系统加热时间常数的设定和改变问题。

PLC改变控制常数的常用方法有两种,其一,通过上位计算机对原程序中控制数据进行修改;其二,利用外部装置输入数据,控制系统运行。

即由外设将数据送入PLC,进行数据处理,然后对PLC内部参数进行修改,实现对工业设备的实时控制。

第二钟数据输入方法,具有不修改原程序,数据输入方法简单、操作方便,能实现实时控制等优点,不仅适用于计算机设计人员使用,而且还适用于普通操作人员。

在电气控制设备上,有着非常广泛的应用,并且许多厂家PLC产品都具有外部数据输入功能。

所以,利用PLC控制技术对外部BCD码数据进行输入,充分发挥工业控制计算机—PLC数值计算和处理能力的编程、控制方法,具有实际应用的推广意义。

这里,以SIEMENS公司PLC构成的某加热系统为例,详细、具体地对加热时间常数外部数据输入方法及用户处理程序作以介绍。

1 BCD码数据外部输入应用设计举例1.1 设计思路首先介绍SIEMENS(西门子)公司PLC S7—200的物理存储区结构,一般情况下,物理存储区是以字节为单位的,所以存储单元为字节单元,操作数长度是字或双字时,标识符后给出的存储单元参数是字或双字内的最低字节单元号。

图1(a)给出了字节、字、双字的相互关系及表示方法。

当使用数据宽度为字或双字时,应保证没有生成任何重叠的存储器字节分配,例如,字地址编码应采用MW10、MW12、MW14······等偶数字地址或MW11、MW13、MW15·······等奇数字地址,由于存储器字MW10占用MB10、MB11两个字节,而MW11则要占用MB11、MB12两字节,存在字节地址重叠单元MB11,所以字地址编码时奇偶不能兼用,以免造成数据读写错误。

4位二进制加法器实验报告

4位二进制加法器实验报告

4 位二进制加法器实验报告一、实验名称:4 位二进制加法器设计实验二、实验目的:1.进一步熟悉QuartusII 软件使用方法。

2.进一步掌握的VerilogHDL 语言描述和原理图描述的方法。

3.进一步掌握4 位二进制加法器的设计方法。

三、设计思想:用串行进位方式构成的 4 位二进制加法器如图:4 位串行进位二进制加法器是以一位二进制全加器为基础,如图,将四个一位二进制全加器串接构成一个4 位二进制加法器。

4 位二进制加法器可对两个4 位二进制数进行加法运算,同时产生进位。

当两个二进制数相加时,较高高位相加时必须加入较低位的进位项(Ci),以得到输出为和(S)和进位(C0)。

可以采用原理图的描述方法和VerilogHDL 语言描述方法。

四、实验内容:1.通过VerilogHDL 语言描述4 位二进制加法器的功能。

2.通过原理图方式描述4 位二进制加法器的功能。

3.通过波形仿真验证描述4 位二进制加法器的功能。

五、实验流程:1.采用VerilogHDL 语言描述实现4 位二进制加法器:(1).首先用VerilogHDL 语言编写二进制半加器:module halfadd(s,c,a,b);input a,b;output s,c;xor(s,a,b);and(c,a,b);endmodule按周期输入波形(2).再编写一位二进制全加器:module fulladd (s,co,a,b,cl); inputa,b,cl;output s,co;wire s1,d1,d2;halfadd ha1 (s1,d1,a,b); halfadd ha2 (s,d2,s1,cl);or g1(co,d2,d1);Endmodule按周期输入波形(2).之后编写4 位二进制加法器:module bitadd (s,c3,a,b,t1);input [3:0]a,b;input t1;output [3:0]s;output c3;wire c0,c1,c2;fulladd fa0(s[0],c0,a[0],b[0],t1);fulladd fa1(s[1],c1,a[1],b[1],c0);fulladd fa2(s[2],c2,a[2],b[2],c1);fulladd fa3(s[3],c3,a[3],b[3],c2);endmodule2.按照4 位二进制加法器的工作原理可以绘制成如下原理图:3.功能仿真波形及说明:(1).按周期输入波形:由此波形图可以分析:例如0001+0001=0010、0100+0100=1000、0110+0110=1100…对于所有的两个四位二进制相加,结果正确。

微机原理与接口技术-- 乘除指令及BCD运算程序

实验四乘除指令及BCD运算程序一、任务与目的1. 实验任务:(1) 熟悉和掌握乘除指令及BCD运算指令的用法;(2) 掌握BCD码运算程序的编写方法。

2. 实验目的:(1). 掌握有符号数与无符号数乘除指令的运算方法;(2) 熟悉BCD码运算的运算方法。

二、原理(条件)1.相关知识:(1) 无符号数与有符号数乘除指令的格式;(2) BCD码运算的调整方法。

2.实验条件:MASM汇编程序及TD调试软件。

三、内容步骤1.启动TD(Turbo Debugger)输入程序段,观察乘法指令的执行情况、标志位变化并分析结果:(1) MOV AL,0FBHMOV BL, 23HMUL BL(2) MOV AL,0FBHMOV BL,23HIMUL BL2.启动TD(Turbo Debugger)输入程序段,观察除法指令的执行情况、标志位只能16位除以8位或32除以16位变化并分析结果:(1) MOV AX,0FE7BHMOV BL, 23HDIV BL改进后:MOV AX,0FE7BHMOV DX,0000HMOV BX,0023HDIV BX(2) MOV AX,0A9HMOV BX,23HCBWIDIV BX(3) MOV AX,0D7A9HMOV BX,1123HCWDIDIV BX3.编写2个6位十进制数(6字节非压缩BCD码)加法程序,并最终把结果转换为ASCII码,存放到数据段RESULT地址所指位置区域。

XX9732+651048=? XX为组号。

参考程序如下,请在参考程序之上改写。

DATA SEGMENTFBCD1 DB 02 03 07 09 05 00FBCD2 DB 08H, 04H, 00H, 01H, 05H, 06HRESULT DB 6 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXLEA SI,FBCD1LEA DI,FBCD2LEA BX,RESULTMOV CX,6CLCNEXT:MOV AL,[SI]ADC AL,[DI]AAA ;非压缩BCD码加法调整指令MOV [BX],ALINC SIINC DIINC BXDEC CXJNZ NEXT①LEA SI,RESULTMOV CX,6TBA:MOV AL,[SI] ;把结果转换为ASCII码ADD AL ,30HMOV [SI],ALINC SIDEC CXJNZ TBA②MOV AH,4CHINT 21HCODE ENDSEND START(1)在①处设置断点,观察RESULT所在存储空间内容;(2)在②处设置断点,观察RESULT所在存储空间内容;(3)其他条件不变,改成非压缩BCD码减法,如何更改程序;回家做?加法改减法AAA非加改成AAS非(4) 其他条件不变,改成压缩BCD 码加/减法,如何更改程序。

四位加法器设计8421BCD码加法器

加法器与译码器显示器的应用
一、实验目的
用一片四位全加器74LS83和门电路设计一位8421BCD码加法器。

要求如下
1、加法器输出的和数也为8421BCD码。

2、画出逻辑图,写出设计步骤。

3、用LED数码管显示和数。

二、实验器材:
一片四位全加器74LS83、两片与非门74LS00、一片BCD-七段显示译码器74LS48、一片共阴极LED管、七个单刀单掷开关,七个20欧姆的电阻和5个1k欧姆的电阻。

三、实验原理,
由于一位8421BCD数A加一位数B有0到18这十九种结果。

而且由于显示的关系当大于9的时候要加六(0110)转换才能正常显示,当数字大于15(1111)时,也要进位,真值表如图
由真值表得,进位Y=CO+A3A4+A2A4.
由进位逻辑函数式画出与非门的逻辑图用两片74LS00代替六个与非门如图,四、实验步骤。

(1)、如图连线
(2)接上电源并测试。

(3)查看是否与数A加数B的结果符合
五、实验结论:
如果想用两个数码管显示两位数则加一个74LS48和LED数码管即可,如图。

四位二进制8421BCD码加法器

课程设计报告设计题目:四位二进制8421BCD码加法器学院: 理学院专业: 09电子信息科学与技术班级: 1班学号: 200931120102; 200931120103; 200931120105 姓名:陈俊宇陈明源邓坤勇电子邮件: 1205335255@qq。

com 时间: 2011年12月8日成绩:指导教师: 刘丹华南农业大学理学院应用物理系课程设计(报告)任务书题目四位二进制加法器任务与要求:运用电子器件和一些IC芯片设计一个四位二进制8421BCD码加法器。

用以实现两个四位二进制数8421BCD码的加法通过数码管显示相加所得的两位十进制数。

用八个开关的开闭控制电平的高低,用高电平表示1;用低电平表示0。

将输入的高电平接入74LS283加法器进行运算。

得到的结果,分别将高低位输入74LS248译码器输出到两个七段数码管.由数码管显示加法结果得到的BCD码。

学会数字信号芯片的原理和在实际中的应用.开始时间:2011年12月1日;结束时间:2011年12月13日四位二进制8421BCD码加法器学生:陈俊宇,陈明源,邓坤勇;指导老师:刘丹摘要:本设计通过八个开关将A3,A2,A1,A0和B3,B2,B1,B0信号作为加数和被加数输入四位串行进位加法器相加,将输出信号S3,S2,S1,S0和向高位的进位C3各自分别通过一个 74LS248译码器,最后分别通过数码管实现二位BCD码显示。

关键词:加法器,译码器,数码管,BCD码显示。

Abstract: the design through eight switch will A3, A2, A1, A0 and B3, B2, B1, B0 signal as addend and BeiJiaShu input four serial carry adder addition, will output signal S3, S2, S1, to carry high and S0 C3 their respective through a 74 LS248 decoder, finally, through the digital tube realize two BCD display。

练习4-四位BCD译码器

1.4 4位BCD译码器的设计4位BCD译码器可将BCD码转换成数字显示码,有4个输入引脚和7个输出引脚。

4位BCD译码器可分为共阴与共阳两种,下面以设计共阳4位BCD译码器为例来说明其设计方法。

1.实验原理共阳4位BCD译码器有4个输入端用来输入BCD码,7个输出端分别对应到七段显示4位BCD译码器应具备的脚位:输入端:D3、D2、D1、D0:输出端:S6、S5、S4、S3、S2、Sl、S0。

2.原理图输入由于原理图输入法较复杂,所以在这里不再详述。

3.文本输入(1)建立新文件:选取窗口菜单File—New,出现对话框,选Text Editor file选项,单击OK按钮,进入文本编辑画面。

(2)保存:选取窗口菜单File—save,出现对话框,键入文件名sevenBcD.vhd,单击OK按钮。

(3)指定项目名称,要求与文件名相同:选取窗口菜单File—Project—Name,键入文件名sevenBCD,单击OK按钮。

或也可以通过如下操作把当前设计项目设置成工程文件:选择菜单File|Project|Set Project to Current File命令,即将当前设计文件设置成Project。

选择此项后可以看到标题栏显示出所设文件的路径。

(4)选择实际编程器件型号:选取窗口菜单Assign—Device,出现对话框,选择ACEXlK 系列的EPlK30TCl44一3。

(5)输入VHDL源程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY sevenBCD ISPORT(D:IN STD_LOGIC_VECTOR(3 DOWNTO 0);S :OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END sevenBCD;ARCHITECTURE a OF sevenBCD ISBEGINPROCESS (D)BEGINCASE D ISWHEN 0000=>S<=“0000001”;一0WHEN 0001l=>S<=“1001111”;一1WHEN 0010=>S<=“0010010”;一2WHEN 0011=>S<=“0000110”;—3WHEN 0100=>S<:“1001100”;一4WHEN 0101=>S<=“0100lOO”;—5WHEN 0110=>S<=“0100000”;—6WHEN 0111=>S<=“0001111”;一7WHEN 1000=>S<=“0000000”;一8WHEN 1001=>S<=“0000100”;一9WHEN OTHERS=>S<=“111111l”;END CASE;END PROCESS;END a;(6)保存并查错:选取窗口菜单File—Project—Save&Check,即可针对电路文件进行检查。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档