汇编语言课程设计-十进制加减法

合集下载

设计一个一位十进制加减法++数字电路课程设计报告

设计一个一位十进制加减法++数字电路课程设计报告

课程设计报告课程:微机系统与接口课程设计学号:姓名:班级:教师:******大学计算机科学与技术学院设计名称:设计一个一位十进制加减法器日期:2010年1月 23日设计内容:1、0-9十个字符和“+”“-”分别对应一个按键,用于数据输入。

2、用一个开关控制加减法器的开关状态。

3、要求在数码显示管上显示结果。

设计目的与要求:1、学习数字逻辑等电路设计方法,熟知加减法器、编码器、译码显示的工作原理及特点;2、培养勤奋认真、分析故障和解决问题的能力。

设计环境或器材、原理与说明:环境:利用多功能虚拟软件Multism8进行电路的制作、调试,并生成文件。

器材:74LS283或者4008, 4个异或门(一片74LS86)(减法);74LS08,3输入或门(加法)设计原理:图1二进制加减运算原理框图分析:如图1所示,第一步置入两个四位二进制数(要求置入的数小于1010),如(1001)2和(0111)2,同时在两个七段译码显示器上显示出对应的十进制数9和7;第二步通过开关选择运算方式加或者减;第三步,若选择加运算方式,所置数送入加法运算电路进行运算,同理若选择减运算方式,则所置数送入减法运算电路运算;第四步,前面所得结果通过另外两个七段译码器显示。

设计过程(步骤)或程序代码:实验电路:1:减法电路的实现:(1):原理:如图1所示(如下),该电路功能为计算A-B。

若n位二进制原码为N原,则与它相对应的补码为N补=2n-N原,补码与反码的关系式为N补=N反+1,A-B=A+B补-2n=A+B反+1-2n(2):因为B○+1= B非,B○+0=B,所以通过异或门74LS86对输入的数B求其反码,并将进位输入端接逻辑1以实现加1,由此求得B的补码。

加法器相加的结果为:A+B反+1,(3):由于2n=24=(10000)2,相加结果与相2n减只能由加法器进位输出信号完成。

当进位输出信号为1时,它与2n的差为0;当进位输出信号为0时,它与2n差值为1,同时还要发出借位信号。

十进制加减法电路设计

十进制加减法电路设计

燕山大学课程设计说明书题目:十进制加法器学院(系):电气工程学院年级专业:学号:学生姓名:指导教师:教师职称:燕山大学课程设计(论文)任务书院(系):电气工程学院基层教学单位:电子实验中心说明:此表一式四份,学生、指导教师、基层教学单位、系部各一份。

年月日目录第一章设计说明 (3)1.1设计思路 (3)1.2模块介绍 (3)第二章电路原理图 (8)第三章波形图 (10)第四章管脚锁定 (11)第五章电路扩展 (12)1.1设计思路 (12)1.2模块介绍 (12)1.3扩展电路原理图 (15)1.4管脚锁定 (17)第六章总结 (18)参考文献 (19)燕山大学课程设计评审意见表 (20)第一章设计说明1.1设计思路:先分别用两个7485数值比较器,将加数及被加数分别与9比较,输出的结果再与输入值分别相与,便可设置加数和被加数,当加数和被加数超过9时均按0处理,此时用两个数码管显示加数与被加数。

用得到的加数和被加数通过一个全加器74283相加,74283得出的结果小于9时可以直接输出,大于9时则需要进行加6修正,按照该要求设计一个逻辑电路,将结果与第一个74283的结果通过第二个74283的求和,得出最终,然后将最终结果通过两个数码管分别显示十位和个位,这样便可得到所要求的十进制加法器。

1.2模块介绍:1.数值比较器:功能介绍:A1-A4,B1-B4为加数,被加数的二进制表示。

B0-B3(1001)为十进制数9。

7485为四位数值比较器。

7485比较器功能表及数值比较真值表为1,7485输出端通过一个或门输出为1,再同输入值相与,最右端所接的数码管则可显示该值;若输入值大于9,则ALBO和AEBO都为0.,通过或门输出为0,再同输入值相与,最右端所接的数码管显示为0。

2. 加数+被加数显示部分:功能介绍:比较器输出的数值分别赋予“1L1”“1L2”“1L3”“1L4”,“2L1”“2L2”“2L3”“2L4”,通过译码后输出到“DS4C”、“DS3C”数码管而显示。

两个十进制数相加的汇编程序

两个十进制数相加的汇编程序

两个十进制数相加的汇编程序汇编语言是一种底层的编程语言,用于编写计算机的指令集。

在汇编语言中,可以使用指令来执行加法操作。

下面是一个用汇编语言编写的程序,用于将两个十进制数相加。

1. 首先,我们需要将两个十进制数保存在内存中。

假设第一个数为A,第二个数为B。

我们可以使用数据段来定义这两个数,并将它们存储在内存中的某个位置。

例如,我们可以将A存储在内存的地址1000处,将B存储在内存的地址1004处。

2. 接下来,我们需要使用寄存器来执行加法操作。

我们可以使用通用寄存器来保存结果。

假设我们将结果保存在寄存器AX中。

3. 首先,将A加载到AX寄存器中。

我们使用MOV指令将A从内存加载到AX 寄存器。

指令为:MOV AX, [1000]。

这将从内存地址1000处读取数据,并将其存储在AX寄存器中。

4. 接下来,将B加载到BX寄存器中。

我们使用MOV指令将B从内存加载到BX寄存器。

指令为:MOV BX, [1004]。

这将从内存地址1004处读取数据,并将其存储在BX寄存器中。

5. 现在,我们需要将AX和BX寄存器中的值相加,并将结果保存在AX寄存器中。

我们使用ADD指令执行加法操作。

指令为:ADD AX, BX。

这将将AX寄存器和BX寄存器中的值相加,并将结果存储在AX寄存器中。

6. 最后,我们可以将结果从AX寄存器中写回内存。

我们使用MOV指令将结果从AX寄存器写回内存。

指令为:MOV [1008], AX。

这将将AX寄存器中的值写回内存地址1008处。

7. 程序结束后,我们可以从内存地址1008处读取结果,并将其输出。

这是一个简单的汇编程序,用于将两个十进制数相加。

程序首先将两个数加载到寄存器中,然后执行加法操作,并将结果存储在寄存器中,最后将结果写回内存。

请注意,这只是一个示例程序,实际的汇编程序可能会更加复杂,并考虑到输入的错误处理和边界情况。

汇编语言课件十进制调整指令讲解

汇编语言课件十进制调整指令讲解

非压缩的8421码调整指令: AAA(ASCII Adjust for Addition)加法的ASCII AAS(ASCII Adjust for Subtraction)减法的ASCII AAM(ASCII Adjust for Multiplication)乘法的ASCII调整指令 AAD(ASCII Adjust for Division)除法的ASCII
1001 1011 CF=1,AF=1
1001 0101
1001 0101
- 0110 0000 CF=1调 整
35)
0011 0101 (十进制
CF=1,AF=1
0001 0010
1110 0001
-0011 0000
调整
-0110 0000
-
1
1000 0001(十进制81)
1110 0001
MOV AL,AH
ADC AL,BH ;高字节相加
DAA
;高字节调整
MOV AH,AL
MOV AL,CL
(2) DAS DAS是减法的十进制调整指令,它必须跟在SUB或
SBB指令之后,将AL寄存器中的减法运算结果调整为2 位压缩型十进制数,仍保留在AL中。
调整方法如下:
若AF=1或者(AL)的低4位是十六进制的A~F,则使AL寄 存器的内容减去06H,并将AF位置1。
非压缩的8421码用8位表示一个十进制数位, 8位中的低4位 表示8421码,而高4位则没有意义。
显然,数字的ASCII码是一种非压缩8421码。 因为数字的 ASCII码的高4位值为0011B,而低4位是以8421码表示的十进制 数位, 这符合非压缩8421码高4位无意义的规定。
相应地PC机的十进制调整指令分为两组,下面分别加以说 明:

课程设计-十进制加法计算器设计

课程设计-十进制加法计算器设计

课程设计(论文)任务书电气学院电力系统专业12(1 )班一、课程设计(论文)题目:十进制加法计算器设计二、课程设计(论文)工作自2015年1 月12 日起至2015 年1月16 日止。

三、课程设计(论文) 地点: 电气学院机房10-303四、课程设计(论文)容要求:1.课程设计的目的(1)综合运用单片机原理及应用相关课程的理论知识和实际应用知识,进行单片机应用系统电路及程序设计,从而使这些知识得到进一步的巩固,加深和发展;(2)熟悉和掌握单片机控制系统的设计方法,汇编语言程序设计及proteus 软件的使用;(3)通过查阅图书资料、以及书写课程设计报告可提高综合应用设计能力,培养独立分析问题和解决问题的能力。

2.课程设计的容及任务课程设计容:利用单片机及一些外围电路设计一个简易的十进制加法计算器,硬件电路设计大概主要包括:键盘电路,显示电路以及复位电路和晶振电路。

软件方面的设计主要包括:LED显示程序设计、数值送显示缓存程序设计、读键子程序设计、运算程序的设计。

课程设计任务:设计一个键盘显示装置,键盘上除了定义0~9共10个数字键外,还要相应的功能健,其它键不定义无响应。

利用此系统可分别输入十进制被加数和加数,实现两个数相加并将结果以十进制形式显示出来。

3.课程设计说明书编写要求(1)设计说明书用A4纸统一规格,论述清晰,字迹端正,应用资料应说明出处。

(2)说明书容应包括(装订次序):题目、目录、正文、设计总结、参考文献等。

应阐述整个设计容,要重点突出,图文并茂,文字通畅。

(3)报告容应包括方案分析;方案对比;整体设计论述;硬件设计(电路接线,元器件说明,硬件资源分配);软件设计(软件流程,编程思想,程序注释,)调试结果;收获与体会;附录(设计代码放在附录部分,必须加上合理的注释)(4)学生签名:2015年1月16 日课程设计(论文)评审意见(1)总体方案的选择是否正确;正确()、较正确()、基本正确()(2)程序仿真能满足基本要求;满足()、较满足()、基本满足()(3)设计功能是否完善;完善()、较完善()、基本完善()(4)元器件选择是否合理;合理()、较合理()、基本合理()(5)动手实践能力;强()、较强()、一般()(6)学习态度;好()、良好()、一般()(7)基础知识掌握程度;好()、良好()、一般()(8)回答问题是否正确;正确()、较正确()、基本正确()、不正确()(9)程序代码是否具有创新性;全部()、部分()、无()(10)书写整洁、条理清楚、格式规;规()、较规()、一般()总评成绩优()、良()、中()、及格()、不及格()评阅人:年月日摘要随着社会科技的发展和进步,计算器因其功能强大而早已成为人们日常生活中必不可少的工具,最简单的计算器就能实现简单的加减乘除运算,这让人们免去了复杂的计算过程,大大提高了工作效率。

汇编课程设计(有符号多位十进制数的四则运算计算器)

汇编课程设计(有符号多位十进制数的四则运算计算器)

汇编语言课程设计实验报告一、课程设计目的《汇编语言程序设计》是计算机专业一门重要的核心课程,也是一门实践性很强的课程,而课程设计则是其中一个重要的应用实践环节。

本次课程设计的目的是提高分析问题、解决问题的能力以及实际动手能力,进一步加深对汇编语言程序设计基本理论的理解,熟练掌握汇编语言程序上机调试的方法技巧、结构化程序设计技术及高级汇编语言技术,能编写较复杂的应用程序,为学习后继课程打下扎实的基础二、实验环境编译机器:IBM兼容PC操作系统:Windows XP -SP2 中文版编译工具:MASM 5.0三、课程设计内容1、编写一个有符号多位十进制数的四则运算计算器程序,所输入的算式如下例所示:-278+32=-132――12=11*-32=-1234/-18=要求程序能接收键入的算式,在接收到‘=’号时,计算并以有符号十进制数的形式显示结果,然后允许用户继续键入算式。

如果键入算式后再键入‘.’,则显示结果并结束整个程序。

(‘/’为整除)程序设计框图:程序源代码:2、已知一个由英语单词组成的字符串已按字典序排好,每个单词以空格符为结束,该串的首二字节为16位无符号二进制数,用以说明串的长度。

试编程能从键盘上输入单词(以空格字符为结束),若字符串中没有该单词,则将该单词插入该串适当的位置,使其仍保持字典序,并修改串长度,显示单词在串中位置及串长度;若字符串中有该单词,则显示字符串中所有包含该单词的单词,及其在字符串中的位置。

程序设计框图:程序代码:DATA SEGMENT; DICTIONARY 字典字符串,首两个字节为 16 位无符号二进制数,说明字符串长度。

DICTIONARY DB 00,16H,"add an book dad egg "DB 100H DUP(20H) ; 空的缓冲区。

MSG_INTRO DB "Input the Word to Search : ","$"MSG_NOTFOUND DB "Not Found, Now Insert it . ",0AH,0DH,"$"MSG_NEWDICT DB 0AH,0DH,"New Dictionary : ","$"MSG_FOUND DB 0AH,0DH,"Found Word in Dictionary : ","$"MSG_POSITION DB 0AH,0DH,"Position : ","$"MSG_DICTLENGTH D B 0AH,0DH,"New Dictionary Length : ","$"MSG_NEWLINE DB 0AH,0DH,"$"BUFFER DB 10H DUP(20H) ; BUFFER 用于保存需要查询的单词。

十进制加减法数字电路课程设计报告

十进制加减法数字电路课程设计报告

设计名称:设计一个一位十进制加减法器 设计内容:1、0-9十个字符和“+”“-”分别对应一个按键,用于数据输入。

2、用一个开关控制加减法器的开关状态。

3、要求在数码显示管上显示结果。

设计目的与要求:1、学习数字逻辑等电路设计方法,熟知加减法器、编码器、译码显示的工作原理及特点;2、培养勤奋认真、分析故障和解决问题的能力。

设计环境或器材、原理与说明:环境:利用多功能虚拟软件Multism8进行电路的制作、调试,并生成文件。

器材:74LS283或者4008, 4个异或门(一片74LS86)(减法);74LS08,3输入或门(加法)设计原理:图1分析:如图1所示,第一步置入两个四位二进制数(要求置入的数小于1010),如(1001)2和(0111)2,同时在两个七段译码显示器上显示出对应的十进制数9和7;第二步通过开关选择运算方式加或者减;第三步,若选择加运算方式,所置数送入加法运算电路进行运算,同理若选择减运算方式,则所置数送入减法运算电路运算;第四步,前面所得结果通过另外两个七段译码器显示。

设计过程(步骤)或程序代码: 实验电路:1:减法电路的实现:(1):原理:如图1所示(如下),该电路功能为计算A-B 。

若n 位二进制原码为N 原,则与它相对应的补码为N 补=2n -N 原,补码与反码的关系式为N 补=N 反+1,A-B=A+B补-2n=A+B反+1-2n(2):因为B○+1= B非,B○+0=B,所以通过异或门74LS86对输入的数B求其反码,并将进位输入端接逻辑1以实现加1,由此求得B的补码。

加法器相加的结果为:A+B反+1,(3):由于2n=24=(10000)2,相加结果与相2n减只能由加法器进位输出信号完成。

当进位输出信号为1时,它与2n的差为0;当进位输出信号为0时,它与2n差值为1,同时还要发出借位信号。

因为设计要求被减数大于或等于减数,所以所得的差值就是A-B差的原码,借位信号为0。

十进制数加减计算器的设计

十进制数加减计算器的设计

十进制数加减计算器的设计1 问题描述用汇编语言设计一个十进制数加减计算器,能够实现两个二位十进制数的加减运算,并具有友好的界面。

2 设计说明该程序数据流程图:3 详细的算法描述定义两个数据段,通过键盘输入,存储于AX ,BX 中,选择运算符号“+或-”,自动运算AX ,BX 中的数据,然后将结果转化为十进制输出。

(详细解释见源程序)4 源程序与执行结果4.1 源程序:CURS MACRO A,BMOV AH,2 ;置光标位置MOV BH,0 ;页号为0MOV DH,A ;设置光标的坐标为(A.B)MOV DL,BINT 10H ;BIOS调用ENDM;-------------------------------DISPMSG MACRO MESSAGELEA DX,MESSAGE ;传递MESSAGE的偏移地址MOV AH,9 ;显示字符串INT 21H ;DOS调用ENDM;----------------------------------CLEAR MACRO COLOR ;清屏MOV AH,6 ;屏幕初始化MOV AL,0 ;页号MOV CH,0 ;设置左上角的坐标为(0,0)MOV CL,0MOV DL,100 ;设置右上角的坐标为(100,100)MOV DH,100MOV BH,COLOR ;卷入行属性INT 10H ;BIOS调用ENDM.MODEL SMALL.STACK.DATA ;数据段定义MSG0 DB '* * * * * * * * * * * * * * * * * * * *',0DH,0AH ;,0dh,0ah,0dh,0ahDB ' * *',0DH,0AH;db '* *',0dh,0ah;db '* *',0dh,0ahDB ' * --------COUNTER-------- *',0DH,0AH ;,0dh,0ah,0dh,0ahDB ' * *',0DH,0AHDB ' * *',0DH,0AHDB ' * *',0DH,0AHDB ' * DATA1:'DB '_______________ *',0DH,0AH ;,0dh,0ah,0dh,0ah,0dhDB ' * *',0DH,0AHDB ' * *',0DH,0AHDB ' * *',0DHDB ' * DATA2:'DB '_______________ *',0DH,0AH ;,0dh,0ah,0dh,0ah,0dhDB ' * *',0DH,0AHDB ' * *',0DH,0AHDB ' * *',0DHDB ' * RESULT:'DB '_______________ *',0DH,0AH,0DH ;,0ah,0dh,0ah,0dh,0ah,0dh,0ah,0dh,0ah,0dh DB ' * *',0DH,0AHDB ' * *',0DH,0AHDB ' * *',0DH,0AHDB ' * *',0DH,0AHDB ' * *',0DH,0AHDB ' * * * * * * * * * * * * * * * * * * * *','$'MSG1 DB 'choose +,-','$'MSG2 DB 'you choose wrong','$',0AH,0DHMSG3 DB 'Press ESC to Exit!',0DH,0AH,'$'MSG4 DB 'Press any key to continue!',0DH,0AH,'$'MSG5 DB '-','$'MSG6 DB '.','$'MSG7 DB 'error input!','$'MSG8 DB 'data2 is wrong!','$'DATA1 DW ?DATA2 DW ?.CODE ;代码段从这里开始;--------------------------------------------DEC_DIV PROC NEARCWD ;将字转换为双字,AX内容符号扩展到DXDIV CXPUSH DXMOV DL,ALADD DL,30H ;将不是数字的字符转换为数字MOV AH,2 ;显示输出INT 21H ;DOS调用POP DXMOV AX,DXRETDEC_DIV ENDP;------------------------------------------CHANGE PROC NEAR ;该子程序的功能:将AX中存储的十六进制数转换为十进制数CMP AX,1000JAE C1 ;AX≥1000则转移CMP AX,100。

十进制加减法

十进制加减法

目录课程设计任务书 (2)1 问题描述 (3)2 前期分析 (3)3 课程设计 (3)3.1 总体设计 (3)3.2 模块设计 (4)3.2.1 求和模块 (4)3.2.2 输入十进制数模块 (5)3.2.3 存储器清零模块 (6)3.2.4 减法模块 (7)4 程序源代码 (7)5 调试与分析 (13)6 测试结果 (13)7 经验与体会 (15)评分表 (16)课程设计任务书学生姓名:毛习均专业班级:计算机1004班指导教师:许毅工作单位:计算机科学与技术学院题目: 十进制加减计算器初始条件:理论:完成了《汇编语言程序设计》课程,对微机系统结构和80系列指令系统有了较深入的理解,已掌握了汇编语言程序设计的基本方法和技巧.实践:完成了《汇编语言程序设计》的4个实验,熟悉了汇编语言程序的设计环境并掌握了汇编语言程序的调试方法.要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)进一步理解和掌握较复杂程序的设计方法,掌握子程序结构的设计和友好用户界面的设计.具体的设计任务及要求:1)编写程序实现十进制数的加减法;2)将计算结果在屏幕上显示;3)程序采用子程序结构,结构清晰;4)友好清晰的用户界面,能识别输入错误并控制错误的修改.在完成设计任务后,按要求撰写课程设计说明书;对课程设计说明书的具体要求请见课程设计指导书.阅读资料:1)《IBM—PC汇编语言程序设计实验教程》实验2.42)《IBM—PC汇编语言程序设计(第2版)》例6.11时间安排:设计安排一周:周1、周2:完成系统分析及设计.周3、周4:完成程序调试,和验收.周5:撰写课程设计报告.指导教师签名:年月日系主任(或责任教师)签名:年月十进制加减法计算器1问题描述用汇编语言编写一个十进制加减法计算器,此程序要求将结果显示在屏幕上,并且友好清晰的用户界面,能识别输入错误并且控制修改.在此程序中采用子结构程序使结构清晰.2前期分析此课题是做一个带显示界面的十进制加减法计算器.首先,程序中多次用到BIOS的10号类型的显示中断功能,所以,在完成此课题之前重点深入学习例行中断程序的理论知识以及用法.其次,识别输入错误的修改功能,这就需要判断错误并及时置光标到合适的位置,以便提示并修改错误.最后,对于采用子程序结构必须清晰了解课题的大体结构,然后分析与设计子程序结构.比如输入十进制数就可以采用子程序结构.3课题设计3.1总体设计图1有好用户界面3.2模块设计3.2.1求和模块如右图2,求和模块,将加数与被加数相加然后扩展为双字,最后通过求余把每一位数存储在HE存储单元里,后面把结果按位输出.图2 求和3.2.2输入十进制数模块图3输入十进制数上图3,就是输入两个十进制数,对输入的字符判断,如果是0-9之间的数,则转化为十进制数,否则提示重新输入字符.3.2.3存储单元清零模块为保证不发生内存访问冲突,每次重新计算的时候都要存储单元清零.如图4图4存储单元清零3.2.4减法模块减法模块主要是比较减数与被减数的大小,如果data1>data2就直接计算,打印结果.否者将data1压入堆栈,显示’-’,然后data1出栈、计算,打印结果.减法模块如下图5图5 减法4.程序源代码DATAS SEGMENTSTR1 DB 0AH,0DH, ' ********************************************' STR2 DB 0AH,0DH, ' * *'STR3 DB 0AH,0DH, ' * *'STR4 DB 0AH,0DH, ' * 1:Enter run *'STR5 DB 0AH,0DH, ' * *'STR6 DB 0AH,0DH, ' * other keys exit *'STR7 DB 0AH,0DH, ' * *'STR8 DB 0AH,0DH, ' * *' STR9 DB 0AH,0DH, ' * *' STR10 DB 0AH,0DH, ' ********************************************' LENGTH1 EQU $-STR1 ;至str1的字节数STR11 DB 'Enter Exit,Other keys continue!$'STR12 DB 'Please input again!$'ERR DB 'Error!Please input again!$'STR13 DB 'input data1:','$'STR14 DB 'input data2:','$'STR15 DB 'add result:','$'STR16 DB '-','$'STR17 DB 'sub result:','$'COUNT DW ?VALUE DW ?JIASHU DW ?BEIJIASHU DW ?HE DW ?SHOW MACRO M ;定义宏,显示字符串LEA DX,MMOV AH,9INT 21HENDMGUANGBIAO MACRO M1,M2MOV DH,M1 ;行(Y坐标)MOV DL,M2 ;列(X坐标)MOV BH,0 ; 显示页码MOV AH,02INT 10H ;用文本坐标下,设置光标位置ENDMQINGPING MACRO M1,M2,M3,M4,M5MOV AH,6 ;向上滚屏MOV AL,M1 ;滚动行数(0-清窗口)MOV BH,0DH ;空白区域的缺省属性MOV CH,M2 ;窗口的左上角位置,Y坐标MOV CL,M3 ;----------------,X坐标MOV DH,M4 ;窗口的右上角位置,Y坐标MOV DL,M5 ;----------------,X坐标INT 10HENDMDATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXMOV AL,3 ;80*25 16色文本MOV AH,0 ;设置显示模式为80*25彩色文本模式INT 10HMOV BP,SEG STR1 ;取段地址MOV ES,BPMOV BP,OFFSET STR1 ;取偏移地址MOV CX,LENGTH1MOV DX,0MOV BL,09H ;属性(颜色) MOV AL,0 ; 光标位置不变(1改变)属性存在BL中,2和3的属性不在BL 中GUANGBIAO 4,15MOV AH,13H ;在TELETYPE模式下显示字符串INT 10HMOV AH,1 ;键盘输入并回显INT 21HCMP AL,31H ;输入1进入加法器,输入2结束;JNZ NEXT;NEXT:;JMP LOOP8GUANGBIAO 8,20 ;确定光标位置(字符串起始位置)SHOW STR13GUANGBIAO 9,20SHOW STR14GUANGBIAO 10,20SHOW STR15GUANGBIAO 11,20SHOW STR17MOV SI,-2MOV CX,5LOOP1: ;存储器清零 ADD SI,2MOV HE[SI],0LOOP LOOP1MOV BX,0LOOP2: ;输入被加数 QINGPING 1,8,30,8,50QINGPING 1,9,30,9,50QINGPING 1,10,30,10,50QINGPING 1,11,30,11,50GUANGBIAO 8,30CALL INPUTMOV BEIJIASHU,BXLOOP3: ;输入加数 QINGPING 1,13,18,13,51QINGPING 1,12,20,12,50MOV BX,0GUANGBIAO 9,30MOV BX,0CALL INPUTMOV JIASHU,BXLOOP4:GUANGBIAO 10,30 ;相加MOV AX,BEIJIASHUADD AX,JIASHUCWDMOV DX,0 ;扩展并求结果各位数值 MOV BX,10000DIV BXMOV [HE],AXMOV AX,DX ;余数给AX CWDMOV BX,1000DIV BXMOV [HE+2],AXMOV AX,DXCWDMOV BX,100DIV BXMOV [HE+4],AXMOV AX,DXCWDMOV BX,10DIV BXMOV [HE+6],AXMOV [HE+8],DXMOV SI,-2MOV CX,5LOOP5:ADD SI,2 ;结果输出MOV DX,HE[SI]ADD DX,30HMOV AH,02INT 21HLOOP LOOP5 ;每位循环输出LOOP_I : ;JIAN FAGUANGBIAO 11,30MOV AX,BEIJIASHUCMP AX,JIASHUJAE FLAGXCHG AX,JIASHUPUSH AXMOV DX,OFFSET STR16MOV AH,09HINT 21HPOP AXFLAG:SUB AX,JIASHUCALL PRINTJMP LOOP6LOOP6:GUANGBIAO 13,19 ;退出或继续 SHOW STR11MOV AH,01INT 21HCMP AL,0DH ;回车退出 JNE LOOP7MOV AH,4CHINT 21HLOOP7:QINGPING 1,13,18,13,51GUANGBIAO 12,21SHOW STR12JMP LOOP1LOOP8:MOV AH,4CHINT 21HERROR:GUANGBIAO 12,21SHOW ERRJMP LOOP1INPUT PROC NEAR ;输入子程序LP1:MOV AH,01INT 21HCMP AL,0dH ;输入回车输入结束 JE EXITCMP AL,31HJB ERRORCMP AL,39HJA ERROR ;不是0~9之间则显示错误 SUB AL,30HCBWXCHG AX,BXMOV CX,10MUL CXADD BX,AXJMP LP1 ;跳转直到输入回车EXIT:RETINPUT ENDPPRINT PROC NEAR ;JIA FA DE SHU CHU JIE GUOPUSH AXMOV VALUE,AXMOV COUNT,0PRINT_D_LOP1:XOR DX,DXMOV AX,VALUEMOV BX,10DIV BXMOV VALUE,AXPUSH DXINC COUNTCMP VALUE,0JA PRINT_D_LOP1PRINT_D_LOP2:CMP COUNT,0JE P_EXITDEC COUNTPOP AXADD AL,30HMOV DL,ALMOV AH,02HINT 21HJMP PRINT_D_LOP2P_EXIT:POP AXRETPRINT ENDPCODES ENDSEND START5调试与分析(1)最初汇编的时候出现asm<74>:error A2053:jump out of range by 121 byte<s>,看看源程序和查资料发现是有条件跳转有界限的,无条件跳转可以“远跳”.最后通过有条件和无条件结合,解决这一问题.(2)对于减法的结果,重新输入时候没有把结果清零,我就用mov ax,0;mov,dx,0还是不行,经过调试,发现是对减法的那个结果没有清屏.而不是存储器清零的原因.(3)对于跳转指令,遇到跳转才跳转,没有的话,就是一步一步的指令顺序执行.这个好像是汇编中很简单的概念,但是有时候很容易忘记,但是经过调试发现,出现了这个简单的逻辑错误.6测试结果(1)友好界面,开始运行时的界面,当输入1就运行程序,输入其他键就退出程序,如下图6图6 开始菜单(2)程序输入34,89后得到加法结果为00123,减法结果-55结果正确,如下图7图7正确输入,输出结果(3)当输入非(0-9)的数字时,比如输入字母或者符号时,就提示“Error!please input again!”,提示重新输入,直到输入正确,如下图8图8输入错误,提示重新输入(4)最后输入正确数字后,将会看到“Enter Exit,other key continue!”如果输入enter键退出程序,否者继续运算,如下图9图9输入正确,并执行运算,enter键退出7经验与体会该开始看这个题目很简单的,但是后来发现很多的问题.比如在BIOS的10号类型的显示中断功能的应用就花费不少的时间,那里面确实有很多技巧值得深入学习.本程序的跳转出现越界的情况,最后通过查资料最终把问题解决了,说明我们不懂的问题多去深入那个问题研究.其余比较关键的就是本程序的细节问题,比如在输入时如何防止程序出错,就是在输入非数字的数据时可以提示使用者错并使其重新输入.本程序用到了课堂上几乎没有讲过的宏定义,此程序应用了宏定义,使程序更加简洁.也不失一种大胆的尝试,并且取得了很好的效果.通过本次课程设计发现自己在课堂上所学是知识只是基础部分,如果想自己做出更好的程序就需要花更多的精力在上面,通过网上找资料,我发现只要可以熟练运用汇编,我们就可以做出各种有趣或者实用的程序,那是一件非常有意义的事情.可能这也是我们学习这门课程的最终所要达到的目的.本科生课程设计成绩评定表班级:计算机1004班姓名:毛习均学号:0121010340421及格(60-69分)、60分以下为不及格指导教师签名:201 年月日........忽略此处.......。

汇编语言课程设计-十进制加减法

汇编语言课程设计-十进制加减法

目录课程设计任务书 (2)1 问题描述 (3)2 前期分析 (3)3 课程设计 (3)3.1 总体设计 (3)3.2 模块设计 (4)3.2.1 求和模块 (4)3.2.2 输入十进制数模块 (5)3.2.3 存储器清零模块 (6)3.2.4 减法模块 (7)4 程序源代码 (7)5 调试与分析 (13)6 测试结果 (13)7 经验与体会 (15)评分表 (16)课程设计任务书学生姓名:毛习均专业班级:计算机1004班指导教师:许毅工作单位:计算机科学与技术学院题目: 十进制加减计算器初始条件:理论:完成了《汇编语言程序设计》课程,对微机系统结构和80系列指令系统有了较深入的理解,已掌握了汇编语言程序设计的基本方法和技巧。

实践:完成了《汇编语言程序设计》的4个实验,熟悉了汇编语言程序的设计环境并掌握了汇编语言程序的调试方法。

要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)进一步理解和掌握较复杂程序的设计方法,掌握子程序结构的设计和友好用户界面的设计。

具体的设计任务及要求:1)编写程序实现十进制数的加减法;2)将计算结果在屏幕上显示;3)程序采用子程序结构,结构清晰;4)友好清晰的用户界面,能识别输入错误并控制错误的修改。

在完成设计任务后,按要求撰写课程设计说明书;对课程设计说明书的具体要求请见课程设计指导书。

阅读资料:1)《IBM—PC汇编语言程序设计实验教程》实验2.42)《IBM—PC汇编语言程序设计(第2版)》例6.11时间安排:设计安排一周:周1、周2:完成系统分析及设计。

周3、周4:完成程序调试,和验收。

周5:撰写课程设计报告。

指导教师签名:年月日系主任(或责任教师)签名:年月十进制加减法计算器1问题描述用汇编语言编写一个十进制加减法计算器,此程序要求将结果显示在屏幕上,并且友好清晰的用户界面,能识别输入错误并且控制修改。

在此程序中采用子结构程序使结构清晰。

十进制加法计数器课程设计

十进制加法计数器课程设计

实验十九 计数、译码、显示电路一、实验目的1、掌握中规模集成计数器74LS90的逻辑功能。

2、学习使用74LS48、BCD译码器和共阴极七段显示器。

3、熟悉用示波器测试计数器输出波形的方法。

二、 实验原理计数、译码、显示电路是由计数器、译码器和显示器三部分电路组成的,下面分别加以介绍。

1、计数器:计数器是一种中规模集成电路,其种类有很多。

如果按各触发器翻转的次序分类,计数器可分为同步计数器和异步计数器两种;如果按照计数数字的增减可分为加法计数器、减法计数器和可逆计数器三种;如果按计数器进位规律可分为二进制计数器、十进制计数器、可编程N进制计数器等多种产品。

常用计数器均有典型产品,不须自己设计,只要合理选用即可。

本实验选用74LS90二—五进制计数器,其功能如下表所示。

6263(1) R 0(1)和R 0(2)为直接复位端,R 9(1)和R 9(2)为直接置位端,可以预置数字“9”(Q D = Q A = 1,Q B = Q C = 0)。

(2) A 为二分频计数器的输入,Q A 的输出频率为CP A 的1/2。

B 为五进制计数器的输入,把Q A 输出作为五进制计数器B 的输入,即构成8421BCD 码十进制计数器。

2、 译码器:这里所说的译码器是将二进制数译成十进制数的器件。

我们选用的74LS48是BCD 码七段译码器兼驱动器。

其外引线排列图和功能表如下所示。

1234567891011121314GNDVCC 74LS48B1615CLTBI/RBORBIDAgabcdef十进制数 或功能输 入LT RBI D C B A 0123H H H H H X X X L L L L L L L H L L H L L L H H BI/RBO H H H H 输 出a b c d e f g H H H H H H L L H H L L L L H H L H H L H H H H H L L H 字 型注4567H H H H X X X X L H L L L H L H L H H L L H H H H H H H L H H L L H H H L H H L H H L L H H H H H H H H L L L L H H H X X X H L L L H L L H H L H L H H H H H H H H H H H H H L L H H L L L H H L H L L H H L L H 891011H X H L H H H H H H X X X H H L L H H L H H H H L H H H L H L L L H H H L L H L H H L L L H H H H L L L L L L L 12131415H X H H H H H 1BI RBI LTX H LX XL X X X X X X X XL L L L L L HL L L L L L L L L L L L L L H H H H H H H2 34(1) 要求输出数字0~15时,“灭灯输入”(BI )必须开路或保持高电平。

十进制加减计数器的设计

十进制加减计数器的设计

三、设计要求 (1) 要求用VHDL编写十进制加减计数器; 功能包括异步清零、置数、同步加载数据, 计数方向可设定。具体引脚定义见书 P268页。
(2) 编程并在实验箱上验证;
四、总结报告要求 (1) 写出VHDL文件; (2) 写出仿真和测试结果。 五、表1 引脚分配 1
信号 clr ena clk up_down load d3 d2 d1 引脚 37 38 59 39 41 44 46 47 d0 q3 q2 q1 q0 cout
48 128EP1K30TC144-3
加减计数器加减法计数器十进制计数器十进制加法计数器六位十进制计数器vhdl十进制计数器异步十进制计数器十进制计数器波形图十进制可逆计数器74ls90十进制计数器
实验5 十进制加减计数器的设计
一、目的 (1) 设计一个十进制加减计数器; (2) 学习用VHDL进行逻辑描述; (3) 学习设计仿真工具的使用方法。 二、说明 本设计实现一个十进制加减计数器,逻辑 功能参见数电教材。

汇编课程分析报告(有符号多位十进制数的四则运算计算器)

汇编课程分析报告(有符号多位十进制数的四则运算计算器)

汇编语言课程设计实验报告一、课程设计目的《汇编语言程序设计》是计算机专业一门重要的核心课程,也是一门实践性很强的课程,而课程设计则是其中一个重要的应用实践环节。

本次课程设计的目的是提高分析问题、解决问题的能力以及实际动手能力,进一步加深对汇编语言程序设计基本理论的理解,熟练掌握汇编语言程序上机调试的方法技巧、结构化程序设计技术及高级汇编语言技术,能编写较复杂的应用程序,为学习后继课程打下扎实的基础二、实验环境编译机器:兼容操作系统:中文版编译工具:三、课程设计内容、编写一个有符号多位十进制数的四则运算计算器程序,所输入的算式如下例所示:-+=-――=*-=-/-=要求程序能接收键入的算式,在接收到‘=’号时,计算并以有符号十进制数的形式显示结果,然后允许用户继续键入算式。

如果键入算式后再键入‘.’,则显示结果并结束整个程序。

(‘/’为整除)程序源代码:、已知一个由英语单词组成的字符串已按字典序排好,每个单词以空格符为结束,该串的首二字节为位无符号二进制数,用以说明串的长度。

试编程能从键盘上输入单词(以空格字符为结束),若字符串中没有该单词,则将该单词插入该串适当的位置,使其仍保持字典序,并修改串长度,显示单词在串中位置及串长度;若字符串中有该单词,则显示字符串中所有包含该单词的单词,及其在字符串中的位置。

程序设计框图:程序代码:; 字典字符串,首两个字节为位无符号二进制数,说明字符串长度。

," "() ; 空的缓冲区。

" : ","$"" , . ","$"," : ","$"," : ","$"," : ","$"," : ","$","$"() ; 用于保存需要查询的单词。

汇编语言 十进制加减法计算器课程设计

汇编语言 十进制加减法计算器课程设计

十进制加减法计算器单片机设计一、设计目的通过课程设计使学生更进一步掌握单片机原理与应用课程的有关知识,提高用汇编语言编程的能力,并将所学的内容加以综合。

通过查阅资料,了解所学知识的应用情况。

二、课程设计要求设计十进制加减法计算器。

要求能(不同时)显示3位输入和4位输出。

要求程序实现功能(1)十进制加减法计算:输入范围为(1~999),该程序输入两个定点数,每个3位,输出4位;A为加,B为减,C为等于,输出为四位计算结果。

数据输入采用规范化输入,即必须输入3个数才算完成一个运算数的输入,两个运算数之间输入运算符A或者B,输入完成按C显示计算结果。

(2)计算器复位功能:DEL均为清零重启,任何时候按下DEL中一个将重新开始。

三、硬件设计现实生活中人们熟知的计算器,其功能主要如下:(1)键盘输入;(2)数值显示;(3)加、减运算(此次只要求加减);(4)对错误的控制及提示。

此次计算器设计的最终结果是使其工作流程为:开机不显示,等待键入数值,键入三个数字,通过LCD显示出来,当键入+、-运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入三个数字将显示键入的数值,按等号就会在LCD上输出运算结果。

同时考虑到操作中可能出现的错误时,计算器会进行自动控制。

根据设计要求,选用8098 单片机为主控机。

通过扩展必要的外围接口电路,实现对计算器的设计。

此次设计的系统模块图如下,单片机输入模块运算模块显示模块具体设计考虑如下:1、单片机工作时电源引脚外接电源,工作电压为5V,同时本次设计通过内部振荡器和时钟发生器产生时钟信号。

2、8098单片机可寻址的存储器空间为64K空间,其内部仅带有只能用作寄存器的256个字节容量的RAM,所以在此设计过程中,需要外接存储器芯片,我们选用容量足够大的62128存储器芯片。

3、本次设计的接口电路采用8255可编程并行I/O芯片,8255A具有通常意义的接口所需要的基本功能,有着很强的适应性,此次设计中它起的作用是将显示器和键盘与单片机连接,通过向其控制寄存器送入控制字,以规定8255的工作方式和实现确定的功能,如本次设计的电路图,8255的A口、C口均工作于输出方式,而B口工作于输入方式。

汇编语言实现十进制加减计算器

汇编语言实现十进制加减计算器

学号:0120810340816课程设计题目十进制数加减计算器学院计算机科学与技术专业计算机科学与技术班级计算机0808班姓名何爽指导教师袁小玲2010 年12 月31 日课程设计任务书学生姓名:何爽专业班级:计算机0808班指导教师:袁小玲工作单位:计算机科学与技术学院题目: 十进制数加减计算器的设计初始条件:理论:学完“汇编语言程序设计”、“课程计算机概论”、“高级语言程序设计”和“数字逻辑”。

实践:计算机学院科学系实验中心提供计算机和软件平台。

如果自己有计算机可以在其上进行设计。

要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1)十进制数加减计算器的设计。

(2)程序应有操作提示、输入和输出,界面追求友好,最好是菜单式的界面。

(3)设计若干用例(测试数据),上机测试程序并分析(评价)所设计的程序。

(4)设计报告格式按附件要求书写。

课程设计报告书正文的内容应包括:在正文第一行写课程设计题目;1.需求说明(要求、功能简述)或问题描述;2.设计说明(简要的分析与概要设计);3.详细的算法描述;4.源程序与执行结果(含测试方法和测试结果);5.使用说明;6.总结,包括设计心得(设计的特点、不足、收获与体会)和展望(该程序进一步改进扩展的设想)。

时间安排:设计时间一周:周1:查阅相关资料。

周2:系统分析,设计。

周3~4:编程并上机调试。

周5:撰写课程设计报告。

设计验收安排:20周星期五8:00起到计算机学院科学系实验中心进行上机验收。

设计报告书收取时间:20周的星期五下午5:00之前。

指导教师签名: 2010年12月31日系主任(或责任教师)签名: 2010年12月31日目录1.需求说明 (4)2.设计说明 (4)2.1 简要分析 (4)2.2 概要设计 (4)2.2.1 主要模块 (4)2.2.2 主函数结构 (5)3.详细的算法描述 (6)3.1 详细的算法描述 (6)3.2 算法流程图 (11)3.2.1 程序流程图 (11)3.2.2 输入函数(inputdec)流程图 (12)3.2.3 输出函数(outputdec)流程图 (12)3.2.4 输出算术表达式函数(show)流程图 (13)4.源程序与执行结果 (13)4.1 源程序 (13)4.2 执行结果 (19)4.2.1 测试方法 (19)4.2.2 测试结果 (19)5.使用说明 (20)6.总结 (21)十进制数加减计算器的设计1.需求说明十进制数加减计算器的设计,要求完成:(1)用汇编语言正确编写程序,完成简单的十进制数的加减运算,(2)求能正确进行输入和输出操作,界面追求友好,尽量实现菜单操作(3)用若干测试用例来测试程序的正确性2.设计说明2.1 简要分析要正确、友好地完成用汇编语言设计十进制数的加减计算器,我们应该完成以下几个功能:(1)相关菜单及字符输出的设计(2)十进制数的输入(3)十进制数的输出(4)加法运算(5)减法运算(6)输出运算表达式(7)回车换行功能(因为为了控制格式,经常要用到)2.2 概要设计2.2.1 主要模块(1)菜单及字符menu db ‘|--------------------------------------|’0dh,0ahdb ‘| 1.Add |’0dh,0ahdb ‘| 2.Sub |’0dh,0ahdb ‘| 0.Exit |’0dh,0ahdb ‘|--------------------------------------|’0dh,0ahdb ‘Please input your choice:$’mess1 db 'Please input the first number: $'mess2 db 'Please input the second number: $'mess3 db 'The result is : $'mess4 db '-$'mess5 db '+$'mess6 db '=$'(2)十进制数的输入inputdec proc实现代码retinputdec endp(3)十进制数的输出outputdec proc实现代码retoutputdec endp(4)加法运算addfun proc显示mess1 ;提示输入第一个数call inputdec ;输入第一个数显示 mess2 ;提示输入第二个数call inputdec ;输入第二个数做加法运算显示mess3 ;提示输入第一个数call show ;输出运算表达式retaddfun endp(5)减法运算subtract proc显示mess1 ;提示输入第一个数call inputdec ;输入第一个数显示 mess2 ;提示输入第二个数call inputdec ;输入第二个数做减法运算显示mess3 ;提示输入第一个数call show ;输出运算表达式retsubtract endp(6)输出运表达算式函数show proccall outputdec ;输出第一个数输出运算符号call outputdec ;输出第二个数输出等号call outputdec ;输出运算结果retshow endp(7)回车换行crlf proc实现代码retcrlf endp2.2.2 主函数结构main proc显示menu ;供选择输入选项判断选项Case 1: call addfunCase 2: call subtractCase 3: 退出程序main endp3.详细的算法描述3.1详细的算法描述(1)main函数main procpush dsxor ax,axpush axmov ax,datamov ds,axks:lea dx,menu ;输出菜单项mov ah,09hint 21hmov al,0mov ah,01h ;输入选择项int 21hsub al,30hcmp al,2 ;判断选择项jz l2 ;如果输入为2 ,则跳转到l2cmp al,1jz l1 ;如果输入为1,则跳转到l1mov ah,4ch ;这两句为正常返回dos界面int 21hl1:call addfun ;调用加法函数jmp ks ;返回到菜单l2: call subtract;调用减法操作jmp ks ;返回到菜单main endp(2)addfun函数(加法运算函数)addfun proccall crlfmov bp,1 ;给下面的show输出中间的运算符做标记,1为加号 lea dx,mess1 ;给出输入第一个数的提示信息mov ah,09hint 21hcall inputdec;调用输入函数,输入第一个数mov si,bx ;第一个数保存在si中lea dx,mess2 ;给出输入第二个数的提示信息mov ah,09hint 21hcall inputdec;调用输入函数,输入第二个数mov di,bx ;第二个数保存在di中mov bx,si ;将第一个数保存到bx中,再进行操作,以免影响到的输出 add bx,di ;第一个数和第二个数相加,结果保存在bx中lea dx,mess3 ;给出输出结果的提示信息mov ah,09hint 21hcall show ;调用show函数,输出算术表达式ret ;返回函数调用处addfun endp(3)subtract函数(减法运算函数)subtract proccall crlfmov bp,2 ;给下面的show输出中间的运算符做标记,2为减号lea dx,mess1;给出输入第一个数的提示信息mov ah,09hint 21hcall inputdec;调用输入函数,输入第一个数mov si,bx ;第一个数保存在si中lea dx,mess2 ;给出输入第一个数的提示信息mov ah,09hint 21hcall inputdec;调用输入函数,输入第一个数mov di,bx ;第二个数保存在di中mov bx,sicmp bx,di ;比较第一个数和第二人数的大小js subl1 ;如果为负(第一个数小一些)则跳转sub bx,di ;否则直接进行计算,结果保存在bx中jmp subl2subl1:mov bp,3 ;为show里面是否输出负号作准备,3的时候要输出负号push di ;先将第二个操作数进栈,否则下面的减法操作会将其值改变 sub di,bxmov bx,dipop di ;第二个操作数出栈,再赋给di寄存器subl2:lea dx,mess3 ;输出运算表达式的提示mov ah,09hint 21hcall show ;调用show函数,输出运算表达式retsubtract endp(4)inputdec函数(十进制输入函数)inputdec procmov bx,0il0:mov ah,01h ;输入数字int 21hcmp al,0dh ;判断是否为回车jz iexit ;如果是回车,则返回到函数调用处sub al,30h ;得到输入数字的真实大小mov ah,0xchg bx,ax ;将bx值与ax值交换,因为下面乘以10是将ax中的值乘10 mov cx,10 ;注意,这里不能用CL,否则数较大时就会出现问题mul cx ;将ax中的值乘以10,也就是将bx中原来的值乘以10add bx,axjmp il0 ;进行输入下一数值位iexit:call crlfretinputdec endp(5)outputdec函数(十进制输出函数)outputdec procpush bpmov bp,0 ;前导0输出与否的标志,0时不输出,1时输出mov ax,bxmov dx,0 ;在进行除法之前,要对dx赋0,否则结果出错mov cx,10000div cx ;除法,字操作,商在ax中,余数在dx中mov bx,dx ;保存余数,作为下一次裤除数mov dl,alcmp dl,0 ;将万位同0比较jz ol0 ;如果万位为0则不输出万位mov bp,1 ;如果万位不为0,则应将bp设为1,以后的0都要输出or dl,30hmov ah,02hint 21h ;输出万位ol0:mov ax,bx ;输出千位的方法与万位相同mov dx,0mov cx,1000div cx ;字操作,商在ax中,余数在dx中mov bx,dx ;保存余数,作为下一次裤除数mov dl,alcmp bp,0jz ol1or dl,30hmov ah,02hint 21h ;输出千位jmp ol2ol1:cmp dl,0jz ol2mov bp,1or dl,30hmov ah,02hint 21h ;输出千位ol2:mov ax,bx ;输出百位与千位、万位方法相同mov dx,0mov cx,100div cx ;字操作,商在ax中,余数在dx中mov bx,dx ;保存余数,作为下一次裤除数mov dl,alcmp bp,0jz ol3mov bp,1or dl,30hmov ah,02hint 21h ;输出百位jmp ol4ol3:cmp dl,0jz ol4or dl,30hmov ah,02hint 21h ;输出百位ol4:mov ax,bx ;输出十位的方法与前面几位方法相同mov cl,10div cl ;字节操作,商在al中,余数在ah中mov bl,ah ;保存余数,作为下一次裤除数,也就是个位数mov dl,alcmp bp,0jz ol5mov bp,1or dl,30hmov ah,02hint 21h ;输出十位jmp ol6ol5:cmp dl,0jz ol6or dl,30hmov ah,02hint 21h ;输出十位ol6:mov dl,bl ;在上面,bl中的数直接就应该为个位,所以直接输出or dl,30hmov ah,02hint 21hpop bp ;恢复bpretoutputdec endp(6)show函数(输出运算表达式函数)show procpush bx ;把运算结果保存起来mov bx,si ;第一个数放在si中call outputdec;输出第一个数cmp bp,3 ;是否为减号jz sl0cmp bp,2 ;判断是否为减号jz sl0lea dx,mess5 ;输出加号mov ah,09hint 21hjmp sl1sl0:lea dx,mess4 ;输出减号mov ah,09hint 21hsl1:mov bx,di ;第二个数放在di中call outputdec ;输出第二个数lea dx,mess6 ;输出等号mov ah,09hint 21hcmp bp,3 ;判断是否需要输出负号 jnz sl2lea dx,mess4 ;输出负号mov ah,09hint 21hsl2:pop bx ;得到运算结果call outputdec;输出运算结果call crlfretshow endp(7)crlf函数(输出回车换行函数)crlf procpush axpush dxmov ah,02hmov dl,0dh ;输出回车int 21hmov dl,0ah ;输出换行int 21h ;ah值被改变 pop dxpop axretcrlf endp3.2 算法流程图3.2.2 十进制输入(inputdec)流程图3.2.3 十进制输出3.2.4 输出算术表达式(show)流程图4.4.1 源程序assume cs:code,ds:datadata segment ;定义数据段menu db ‘|--------------------------------------|’0dh,0ah db ‘| 1.Add |’0dh,0ah db ‘| 2.Sub |’0dh,0ah db ‘| 0.Exit |’0dh,0ahdb ‘|--------------------------------------|’0dh,0ahdb ‘Please input your choice:$’mess1 db 'Please input the first number: $'mess2 db 'Please input the second number: $'mess3 db 'The result is : $'mess4 db '-$'mess5 db '+$'mess6 db '=$'data ends ;数据段结束code segment ;定义代码段main proc ;主函数push dsxor ax,axpush axmov ax,datamov ds,axks:lea dx,menumov ah,09hint 21hmov al,0mov ah,01hint 21hsub al,30hcmp al,2jz l2cmp al,1jz l1mov ah,4chint 21hl1:call addfunjmp ksl2: call subtractjmp ksmain endp ;主函数结束addfun proc ;加法运算函数call crlfmov bp,1 ;给下面的show输出中间的运算符做标记 lea dx,mess1mov ah,09hint 21hcall inputdecmov si,bx ;第一个数保存在si中lea dx,mess2int 21hcall inputdecmov di,bx ;第二个数保存在di中mov bx,siadd bx,dilea dx,mess3mov ah,09hint 21hcall show ;输出结果retaddfun endp ;加法运算函数结束subtract proc ;减法运算函数call crlfmov bp,2 ;给下面的show输出中间的运算符做标记 lea dx,mess1mov ah,09hint 21hcall inputdecmov si,bx ;第一个数保存在si中lea dx,mess2mov ah,09hint 21hcall inputdecmov di,bx ;第二个数保存在di中mov bx,sicmp bx,dijs subl1 ;如果为负则跳转sub bx,dijmp subl2subl1:mov bp,3 ;为show里面是否输出负号作准备push disub di,bxmov bx,dipop disubl2:lea dx,mess3mov ah,09hint 21hcall showretsubtract endp ;减法运算函数结束inputdec proc ;十进制输入函数il0:mov ah,01hint 21hcmp al,0dh ;判断是否为回车jz iexitsub al,30hmov ah,0xchg bx,axmov cl,10mul cladd bx,axjmp il0iexit:call crlfretinputdec endp ;十进制输入函数结束outputdec proc ;十进制输出函数push bp ;用来做前导0的标记mov bp,0mov ax,bxmov dx,0 ;在进行除法之前,要对dx赋0,否则结果over devide mov cx,10000div cx ;字操作,商在ax中,余数在dx中mov bx,dx ;保存余数,作为下一次裤除数mov dl,alcmp dl,0jz ol0mov bp,1or dl,30hmov ah,02hint 21h ;输出万位ol0:mov ax,bxmov dx,0mov cx,1000div cx ;字操作,商在ax中,余数在dx中mov bx,dx ;保存余数,作为下一次裤除数mov dl,alcmp bp,0jz ol1or dl,30hmov ah,02hint 21h ;输出千位jmp ol2ol1:cmp dl,0jz ol2mov bp,1or dl,30hmov ah,02hint 21h ;输出千位ol2:mov ax,bxmov dx,0mov cx,100div cx ;字操作,商在ax中,余数在dx中 mov bx,dx ;保存余数,作为下一次裤除数mov dl,alcmp bp,0jz ol3or dl,30hmov ah,02hint 21h ;输出百位jmp ol4ol3:cmp dl,0jz ol4mov bp,1or dl,30hmov ah,02hint 21h ;输出百位ol4:mov ax,bxmov cl,10div cl ;字节操作,商在al中,余数在ah中 mov bl,ah ;保存余数,作为下一次裤除数mov dl,alcmp bp,0jz ol5or dl,30hmov ah,02hint 21h ;输出十位jmp ol6ol5:cmp dl,0jz ol6mov bp,1or dl,30hmov ah,02hint 21h ;输出十位ol6:mov dl,blor dl,30hmov ah,02hint 21hpop bp ;恢复bpretoutputdec endp ;十进制输出函数结show proc ;输出运算式函数push bx ;把运算结果保存起来 mov bx,si ;第一个数放在si中 call outputdeccmp bp,3 ;是否为减号jz sl0cmp bp,2jz sl0lea dx,mess5mov ah,09hint 21hjmp sl1sl0:lea dx,mess4mov ah,09hint 21hsl1:mov bx,di ;第二个数放在di中 call outputdeclea dx,mess6mov ah,09hint 21hcmp bp,3jnz sl2lea dx,mess4mov ah,09hint 21hsl2:pop bx ;得到运算结果call outputdeccall crlfretshow endp ;输出运算式函数结束crlf proc ;回车换行函数push axpush dxmov ah,02hmov dl,0dhint 21hmov dl,0ahint 21h ;ah值被改变pop dxpop axretcrlf endp ;回车换行函数结束code ends ;代码段结束end main ;程序结束4.2 执行结果4.2.1 测试方法本次测试我们采用的是通过菜单形式,输出选择项,然后根据提示信息,输入相关数字,进行举例测试。

十进制数加减计算器的设计

十进制数加减计算器的设计

十进制数加减计算器的设计1 问题描述用汇编语言设计一个十进制数加减计算器,能够实现两个二位十进制数的加减运算,并具有友好的界面。

2 设计说明该程序数据流程图:3 详细的算法描述定义两个数据段,通过键盘输入,存储于AX ,BX 中,选择运算符号“+或-”,自动运算AX ,BX 中的数据,然后将结果转化为十进制输出。

(详细解释见源程序)4 源程序与执行结果4.1 源程序:CURS MACRO A,BMOV AH,2 ;置光标位置MOV BH,0 ;页号为0MOV DH,A ;设置光标的坐标为(A.B)MOV DL,BINT 10H ;BIOS调用ENDM;-------------------------------DISPMSG MACRO MESSAGELEA DX,MESSAGE ;传递MESSAGE的偏移地址MOV AH,9 ;显示字符串INT 21H ;DOS调用ENDM;----------------------------------CLEAR MACRO COLOR ;清屏MOV AH,6 ;屏幕初始化MOV AL,0 ;页号MOV CH,0 ;设置左上角的坐标为(0,0)MOV CL,0MOV DL,100 ;设置右上角的坐标为(100,100)MOV DH,100MOV BH,COLOR ;卷入行属性INT 10H ;BIOS调用ENDM.MODEL SMALL.STACK.DATA ;数据段定义MSG0 DB '* * * * * * * * * * * * * * * * * * * *',0DH,0AH ;,0dh,0ah,0dh,0ahDB ' * *',0DH,0AH;db '* *',0dh,0ah;db '* *',0dh,0ahDB ' * --------COUNTER-------- *',0DH,0AH ;,0dh,0ah,0dh,0ahDB ' * *',0DH,0AHDB ' * *',0DH,0AHDB ' * *',0DH,0AHDB ' * DATA1:'DB '_______________ *',0DH,0AH ;,0dh,0ah,0dh,0ah,0dhDB ' * *',0DH,0AHDB ' * *',0DH,0AHDB ' * *',0DHDB ' * DATA2:'DB '_______________ *',0DH,0AH ;,0dh,0ah,0dh,0ah,0dhDB ' * *',0DH,0AHDB ' * *',0DH,0AHDB ' * *',0DHDB ' * RESULT:'DB '_______________ *',0DH,0AH,0DH ;,0ah,0dh,0ah,0dh,0ah,0dh,0ah,0dh,0ah,0dh DB ' * *',0DH,0AHDB ' * *',0DH,0AHDB ' * *',0DH,0AHDB ' * *',0DH,0AHDB ' * *',0DH,0AHDB ' * * * * * * * * * * * * * * * * * * * *','$'MSG1 DB 'choose +,-','$'MSG2 DB 'you choose wrong','$',0AH,0DHMSG3 DB 'Press ESC to Exit!',0DH,0AH,'$'MSG4 DB 'Press any key to continue!',0DH,0AH,'$'MSG5 DB '-','$'MSG6 DB '.','$'MSG7 DB 'error input!','$'MSG8 DB 'data2 is wrong!','$'DATA1 DW ?DATA2 DW ?.CODE ;代码段从这里开始;--------------------------------------------DEC_DIV PROC NEARCWD ;将字转换为双字,AX内容符号扩展到DXDIV CXPUSH DXMOV DL,ALADD DL,30H ;将不是数字的字符转换为数字MOV AH,2 ;显示输出INT 21H ;DOS调用POP DXMOV AX,DXRETDEC_DIV ENDP;------------------------------------------CHANGE PROC NEAR ;该子程序的功能:将AX中存储的十六进制数转换为十进制数CMP AX,1000JAE C1 ;AX≥1000则转移CMP AX,100JAE C2 ;AX≥100则转移CMP AX,10JAE C3 ;AX≥10则转移JMP C4 ;AX<10C1: MOV CX,1000DCALL DEC_DIVC2: MOV CX,100DCALL DEC_DIVC3: MOV CX,10DCALL DEC_DIVC4: MOV CX,1DCALL DEC_DIVRETCHANGE ENDP;-------------------------------BEGIN PROC NEARBACK: CLEAR 1EHCURS 2,20 ;设置光标为(2.20)DISPMSG MSG0 ;显示用户界面CURS 8,41 ;设置光标为(8,41),第一行MOV BX,0MOV CX,2NEWCHAR1:MOV AH,1 ;键盘输入并回显INT 21H ;DOS调用CMP AL,30H ;检查输入的字符是不是数字JAE J1 ;如果不是,则转移至J1JMP D2 ;是,转移到D2执行J1: CMP AL,39H ; 与9的ASCII侣氡JBE J2 ;如果输入的字符是0-9,则转移至J2 JMP D2 ;如果不是数字,则转移至D2J2: SUB AL,30HCBW ;AL的内容符号扩展到AHXCHG AX,BXMOV DI,10MUL DIXCHG AX,BXADD BX,AXLOOP NEWCHAR1MOV DATA1,BXCURS 11,41 ;设置光标位为(11,40),第二行MOV BX,0MOV CX,2NEWCHAR2:MOV AH,1 ;键盘输入并回显INT 21H ;DOS调用CMP AL,30H ;与0的ASCII码比较JAE J3 ;如果输入数字大于等于0则跳转至J3 JMP D2J3: CMP AL,39H ;与9比较JBE J4 ;如果小于或等于9则跳转JMP D2 ;如果输入不是数字则跳转J4: SUB AL,30H ;如果输入不是0-9,则转化成相应的字符CBW ;将AL符号扩展到AHXCHG AX,BXMOV DI,10MUL DIXCHG AX,BXADD BX,AXLOOP NEWCHAR2MOV DATA2,BXMOV AX,DATA1MOV BX,DATA2PUSH AXPUSH BXCURS 15,33 ;设置光标的位置为(15.33),第三行DISPMSG MSG1 ;显示提示信息MOV AH,1 ;接受键盘输入并回显INT 21H ;DOS调用CMP AL,'+'JE ADDI ;如果运算符为+,则计算两数之和CMP AL,'-'JE SUBT ;如果运算符为-,则计算两数之差CURS 16,25 ;设置光标为(16,25)DISPMSG MSG2 ;在屏幕上输出提示信息JMP D1;----------------------------------------;ADD THE TWO DATASADDI: POP BXPOP AXADD AX,BX ;计算两数字之和PUSH AXCURS 14,41 ;设置光标位置为(14,41)POP AXCALL CHANGE ;将结果转换为十进制数JMP D1;---------------------------------------;SUBTRACT THE TWO DATASSUBT: POP BXPOP AXCMP AX,BX ;比较两数大小JAE D0 ;如果AX>=BX则跳转XCHG AX,BXPUSH AXPUSH BXCURS 14,40 ;设置光标位置为(14,40)DISPMSG MSG5 ;在屏幕上显示负号POP BXPOP AXD0: SUB AX,BX ;计算两数之差PUSH AXCURS 14,41 ;设置光标位置为(14,41)POP AXCALL CHANGE ;将结果转换为十进制数JMP D1;---------------------------------------D1: RETD2: PUSH AXPUSH BXCURS 15,33 ;设置光标位置为(15,33)DISPMSG MSG7 ;提示输入出错POP BXPOP AXRETBEGIN ENDP;----------------------------------------MAIN PROC NEARMOV AX,@DATAMOV DS,AXMOV ES,AXPUSH DSXOR AX,AXPUSH AXMOV DATA2,0 ;将缓冲区清空MOV DATA1,0AGAIN:CALL BEGINCURS 16,23 ;设置光标位置为(16.23)DISPMSG MSG3 ;在屏幕上输出提示信息,提示退出的方法CURS 17,23 ;设置光标位置为(17.23)DISPMSG MSG4 ;在屏幕上输出提示信息,提示继续的方法MOV AH,7 ;键盘输入,无回显INT 21H ;DOS调用CMP AL,27 ;判断输入的是否为ESCJNE AGAIN ;如果不是就继续执行以上运算EXIT: MOV AX,4C00H ;如果是就退出系统INT 21H ;DOS调用MAIN ENDPEND MAIN4.2 对源程序汇编生成目标文件4.3 链接目标文件生成可执行文件“12.EXE”,并用DEBUG命令调试程序4.4 运行最终可执行程序“12.EXE”,执行结果:5 使用说明打开可执行文件“十进制加减计算器.exe”,键盘输入需要运算的两个十进制数,然后小键盘选择运算符号,则程序自动运算两个数并输出结果,并提供选择“ESC退出”、“任意键继续”。

单片机实验一 多字节十进制加法程序设计

单片机实验一 多字节十进制加法程序设计

实验一多字节十进制加法程序设计
一.实验目的:
1.熟悉仿真器的软件使用环境及单片机汇编语言编程;
2.掌握多字节十进制加法的程序设计及实现方法。

二.实验内容:
编写多字节十进制加法程序,实现下式运算:
4574+6728=11302
要求:被加数在片内RAM区20H、21H单元;分别为学号(7),学号+1(8);
加数在片内RAM区30H、31H单元;分别为学号+2(9),学号+3(10);
结果在片内RAM区20H(最高位进位)、21H(高位)、22H(低位)单元。

三.实验步骤:
1.开机启动Keil C51软件进入μVision2 集成开发环境,确认89C51处于软件仿真状态。

2.完成程序的设计、编辑、编译、连接。

3.进入DEBUG方式,打开存储器Memory 1窗口,在窗口Address栏键入D:20H;点击鼠标右键,选择最后一项Modify Memory ,输入被加数;在窗口Address 栏键入D:30H;点击鼠标右键,选择最后一项Modify Memory ,输入加数。

4.调试和运行程序并记录存储器Memory 1窗口实验结果。

四.实验程序:
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:MOV A,20H
ADD A,30H
DA A
MOV 22H,A
MOV A,21H
ADDC A,31H
DA A
MOV 21H,A
CLR A
MOV R3,00H
ADDC A,R3
MOV 20H,A
END
五.实验截图:。

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