汇编语言课程设计报告——实现加减乘除四则运算的计算器汇总
汇编语言程序设计————计算器
课程设计说明书题目: 表达式计算器学号:班级: 计算机创新实验班姓名:廖福轩目录一.设计内容 (2)二.设计方案 (2)1、主程序模块、 (2)2、赋权值模块、 (2)3、加减乘除运算子程序模块、 (2)4、调用赋权宏子程序模块、 (2)5、回车换行宏模块、 (2)6、9号功能显示字符串宏模块、 (2)三.设计框图 (3)四.程序代码 (4)五.运行结果 (9)六.设计总结 (9)计算器汇编语言程序设计一.设计内容从键盘输入一个十进制两位数的四则运算表达式,如23*56-(8*19)/6+67-8=,编程计算表达式的值,输出十进制结果(有可能就是三位或四位十进制),+-*/位置任意。
并要求程序能反复执行直道对“还要继续不?(y/n)”之类的提示回答“n”或“N”为止。
四则运算主要包括以下几个模块:(1)主程序模块、(2)赋权宏模块、(3)加减乘除运算子程序模块、(4)调用赋权宏子程序模块、(5)回车换行宏模块、(6)9号功能显示字符串宏模块、二.设计方案1、主程序模块、主程序初始化数据段,调用显示宏show显示界面,输入字符或数字并判断,调用子程序dyfq调用赋权宏fq为符号赋权,从而判断优先级,调用加减乘除运算子程序ys对判断出的相应运算符进行运算,输出运算结果,判断就是否继续,继续则返回输入,不继续则退出程序、2、赋权宏模块、通过定义宏fq,定义了变元a,b进行参数传递,并使用替换运算符&使变元a与标号s对应、接着给对应的符号赋予权值,将其权值存入ch中、3、加减乘除运算子程序模块、运算模块实现了将ax入栈保存,然后将ax,bx赋值为0,判断cl中的符号就是否为乘号*,若为乘号*则将number中的数字与其下一位的数字相乘,并把结果存入该位置,类似的若不为乘号*则接着判断就是否为除号/,若为除号/则进行除法运算,然后判断就是否为加法,为加法则进行加法运算,接着判断就是否为减法,为减法则进行减法运算并将结果存入当前的计算的第二个数的位置、4、调用赋权宏子程序模块、该模块实现了调用赋权宏fq为(,),*,/,+,-,=等符号分别赋权值为5,1,4,4,3,3,0、从而可以通过设定的权值来判断优先级、5、回车换行宏模块、通过2号功能的输出功能,将0dh赋予dl输出,再调用2号功能,将0ah赋予dl输出,从而实现回车换行功能、6、9号功能显示字符串宏模块、通过定义宏show,用9号显示功能,通过变元str将字符串显示出来。
PIC16F877A简单计算器设计报告 汇编语言 四位无符号整数加减乘除
课程设计报告课程名称:单片机原理与接口技术课程设计设计题目:简单计算器院系:机电工程学院班级:2010级电气工程及其自动化专业姓名:学号:指导教师:史丽萍,闫广明,张波,张扬,王冠然设计时间:2013年12月一、设计方案描述与论证我们所设计的是一个简单计算器,它具有四位数以内的整数加减乘除运算。
可以在输入错误的时候退格,也可以初始化。
在初始化的状态下可以进行关机以减少耗能。
显示使用的数码管扫描显示的方法来显示数字,所以我们每一次运算前我们都需要将个位、十位、百位和千位相结合。
我们使用的是4×4的键盘,检测的时候是进行键盘扫描来完成确定哪一个键被摁下,然后是否释放。
键盘被摁下后,先判断是什么键。
如果是数字键,则进行数的输入,首先先把百位的数值赋给千位,十位赋给百位,个位赋给十位,然后把摁下键的对应数赋给个位。
如果是算法键,则将对应的算法寄存地址赋上相应算法的值,并且在下一次输入数字时把十位、百位和千位清零以完成下一次的赋值,而这一次的值将转换为一个数储存在相应的地址中。
当按下的是退格键,则将十位赋值给个位,百位赋值给十位,千位赋值给百位然后千位清零。
当按下的是等号键的时候,将前一次储存的数取出与这一次的数进行相应的运算然后将得到的二进制数拆分为个位、十位、百位和千位然后扫描显示就可以。
复位键是使用的中断,当个位、十位、百位和千位都不为零的时候按下将会初始化计算器的所有数据,如果个位、十位、百位和千位均为零这进入休眠状态等待下一次中断的唤醒。
二、硬件设计部分我们使用的是PIC16F877A单片机,使用四位的八段数码管,4×4的键盘和一个独立的中断键。
八段数码管我们使用的是共基极的接法,所以当给出低电平的时候导通,给出高电平的时候关断。
我们以RD端口来控制段选,分别以RB0控制a、RB1控制b、RB2控制c、RB3控制d、RB4控制e、RB5控制f、RB6控制g和RB7控制dp。
以RD1、RD2、RD3和RD4端口分别控制位选的千位、百位、十位和个位。
汇编语言程序设计实验报告四(算术运算程序实验)
汇编语言程序设计实验报告四(算术运算程序实验)汇编语言程序设计实验报告四(算术运算程序实验)一、实验目的1、熟悉算术运算指令的功能与应用。
2、学习编写加法和乘法运算程序。
二、实验内容1、二进制运算计算23579+7684和0A5H+34H(1)原始数据分别存于A、B、C、D开始听内存单元中,运算结果分别存E、G开始的内存单元中。
(低位数在低字节中)(2)前两个数据在程序中用十进制表示,后两个数据在程序中用十六进制表示。
(3)十进制数定义成字变量,用16位加法。
十六进制数定义成字节变量,用8位加法。
2、多字节加法在内存中以FIRST和SECOND开始的单元中分别存放有两个10位压缩型十进制数(BCD 码),低位在前。
求这两个数的压缩十进制数和,并存到THIRD 开始的单元中。
(1)压缩十进制数亦称组合十进制数,一个字节存放二位BCD 码。
(2)两个加数可直接直接在程序中设置。
3、二进制乖法(1)在内存DATA1和DA TA2单元中分别存放着两个8位无符号二进制数A和B 。
求AXB,结果存于DATA3开始的内存单元中。
(2)在FIRST和SECOND开始的内存单元中,分别存放着两个16位带符号二进制数D和E,求DXE,结果存于THIRD开始的内存单元中。
三、实验准备1、仔细阅读本实验教材。
2、认真预习加法、乖法和十进制调整指令。
精心设计运算使用的实验数据。
(注意:应准备多组不同数据以备实验。
)3、根据实验内容,分别画出各个程序的流程图,并在实验前编好各个源程序。
四、实验步骤1、二进制数运算(1)题目的具体要求,将原始数据及存放结果的内存单元分别定义成字变量或字节变量。
(2)辑程序,把编写好的源程序建立为汇编语言源程序文件并存盘。
(3)对源程序文件进行汇编、连接,且修改至无错误,然后运行程序。
(4)利用调试程序观察运行结果。
如果有错,分析并找出错误原因,改写程序并重新调试。
2、多字节加法程序(1)在FIRST 和SECOND开始的内存单元中建立各为10位的压缩型BCD码的数据区,数据要选择得当。
汇编语言课程设计_四则运算计算器设计
目录1 设计目的 (1)2 概要设计 (1)2.1 系统总体分析 (1)2.2 主模块框图及说明 (2)3 详细设计 (3)3.1 主模块及子模块说明 (3)3.2 各模块详细设计 (3)3.2.1 判定运算符模块设计 (3)3.2.2取运算数模块 (3)3.2.3计算模块 (4)3.2.4结果处理模块 (5)3.2.5输出模块 (5)3.2.6错误处理模块 (6)4 程序调试 (7)4.1 运行界面分析 (7)4.2 调试过程及分析 (7)5 心得体会 (8)5.1 设计体会 (8)5.2 系统改进 (8)参考文献 (10)附录 (11)实现加减乘除四则运算的计算器1 设计目的汇编语言是继机器语言后出现的计算机程序设计语言,是计算机所能提供给用户使用的最快而又最有效的语言,也是能够利用计算机所有硬件特征并能够直接控制硬件的惟一语言。
因而了解之一语言的特性,并熟练掌握这一语言并应用于开发中便是计算机专业学生所必需掌握的技能之一。
本课程设计通过加减乘除四则运算计算器的设计,增强对于汇编语言寄存器、指令、伪指令、中断等的理解。
可通过编写的汇编程序完成基本的加减乘除四则运算。
主要功能:能实现加减乘除的计算;该程序接受的是16进制数;执行时,需在文件名后直接跟上计算表达式,如在命令提示符下执行结果如下:C:\tasm>js 3+252 概要设计2.1 系统总体分析四则运算计算器应当实现对用户输入表达式的处理。
根据用户输入的表达式,完成加减乘除四则运算。
程序自动判定表达式输入,并完成对于输入的16进制数的转换,同时计算结果并以10进制数输出。
对于异常情况程序应当进行处理,保证程序的正确运行。
设计一个计算器,在DOS界面下输入<程序名> <表达式>可直接输出运算结果。
例如在DOS界面中输入JS 3+6,可直接输出9。
程序接受16进制数输入,以十进制数输出运算结果。
对于输出错误情况,程序自动给出错误提示,若输入的格式有误,程序给出“JS <Expression> [10]”(即输入样例)提示,若输入的表达式有误,程序给出“Error in expression !”(即表达式错误)提示。
汇编课程设计(有符号多位十进制数的四则运算计算器)
汇编语言课程设计实验报告一、课程设计目的《汇编语言程序设计》是计算机专业一门重要的核心课程,也是一门实践性很强的课程,而课程设计则是其中一个重要的应用实践环节。
本次课程设计的目的是提高分析问题、解决问题的能力以及实际动手能力,进一步加深对汇编语言程序设计基本理论的理解,熟练掌握汇编语言程序上机调试的方法技巧、结构化程序设计技术及高级汇编语言技术,能编写较复杂的应用程序,为学习后继课程打下扎实的基础二、实验环境编译机器: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 用于保存需要查询的单词。
汇编语言课程设计四则运算计算器
*******************实践教学*******************兰州理工大学技术工程学院2013年春季学期汇编语言实训课程设计题目:四则运算计算器专业班级:计算机科学与技术姓名:___郭利强_____学号: 11730108指导教师:刘树群成绩:计算机科学与技术专业(11级)汇编语言实训课程设计任务书题目:四则运算计算器班级: 11计算机科学与技术1班学生姓名:郭利强学号: 11730108 题目类型:软件工程(R)指导教师:刘树群一.题目简介四则运算计算器,主要是为了解决数学中的加、减、乘、除四则运算的问题。
通过该题目的设计过程,可以培养学生结构化程序设计的思想,加深对汇编语言基本语言要素和流程结构的理解,针对汇编语言中的重点和难点内容进行训练,独立完成有一定工作量的程序设计任务,同时强调好的程序设计风格。
得到软件工程的综合训练,提高解决实际问题的能力。
二.设计任务1、查阅文献资料,一般在5篇以上;2、要求可以进行四则运算;3、完成软件结构设计和算法设计;4、完成系统的软件开发和测试工作;5、撰写设计说明书;6、做好答辩工作。
三.主要内容、功能及技术指标1、实现功能及指标:①使用Win32的窗口程序模式,实现四则运算程序的设计与开发;②界面友好。
2、问题分析及解决方案框架确定:充分地分析和理解问题本身,弄清要求做什么。
在确定解决方案框架过程中,综合考虑系统功能,考虑怎样使系统结构清晰、合理、简单和易于调试。
最后确定每个过程和函数的简单功能,以及过程(或函数)之间的调用关系,并画出函数之间的调用关系图。
3、详细设计和编码:定义相应的存储结构,确定各个函数的算法,并画出流程图,在此基础上进行代码设计,每个明确的功能模块程序一般不超过200行,否则要进一步划分。
4、上机前程序静态检查:上机前程序静态检查可有效提高调试效率,减少上机调试程序时的无谓错误。
静态检查主要有两种途径:用一组测试数据手工执行程序;通过阅读或给别人讲解自己的程序而深入全面地理解程序逻辑。
汇编语言简单计算器程序课程设计报告
汇编语言课程设计报告( 2010 -- 2011 年度第 2 学期)课题名称: 实现加减乘除四则运算的计算器专业 计算机科学与技术学生姓名 汤浩军班级 B 计算机091学号 0910704117指导教师 王 志 宏完成日期2011年6月24日目录1设计目的 (1)2概要设计 (2)2.1 系统总体分析 (2)2.2 主模块框图及说明 (2)3 详细设计 (4)3.1 主模块及子模块说明 (4)3.2 各模块详细设计 (4)4.程序调试 (6)4.1 运行界面分析 (6)4.2 算法的分析 (6)4.3 调试过程及分析 (6)5小结 (7)5.1 设计总结 (7)参考文献 (8)源程序清单 (9)1设计目的通过本次的课程设计,加深对汇编语言的了解,应用《汇编语言程序设计教程》等所学相关知识及查阅资料,完成加减乘除计算器的设计,以达到理论与实践更好的结合,进一步提高自身的水平和对汇编语言的认识。
2概要设计2.1 系统总体分析本次设计的加减乘除四则运算的计算器,主要是为了解决数学中的加、减、乘、除四则运算的问题。
由于在设计过程中考虑到了可能会多次计算数据,为此本次课程设计的这个计算器可以一次运行,多次使用。
2.2 主模块框图及说明本程序的功能结构图如图2-1:图 2-1功能结构图程序流程图如图2-2:图2-2流程图3 详细设计3.1 主模块及子模块说明主模块:主要完成程序的主体框架结构,提供人-程序的交互。
子模块:主要完成对数据的加工,处理。
3.2 各模块详细设计主模块:首先提供一个主界面,提示用户按要求输入具体的数据和所要进行的操作,输入完毕后给出结果。
如果输入过程中发现非法输入,则立即给与提示,程序自动刷新界面,提示继续输入。
整个过程按“ESC”结束。
流程图如下图3-1:图3-1 主模块流程图子模块:完成对数据的进一步加工处理,转换格式并得出结果。
首先根据输入调用对应的“+”、“-”、“*”、“/”四大函数模块,这是本程序的核心模块,其他部分的一些小模块都是为这几大模块服务的,大致的流程图如下图3-2:Y图3-2 子模块流程图4.程序调试4.1 运行界面分析运行界面如图4-1图4-1 运行界面在NUM1这一行会提示输入第一个数据,NUM2这一行提示输入第二个数据,输入完成两个数据后程序会提示允许输入运算符,输入无误后在RESULT行显示结果。
汇编计算器程序实验报告
《汇编语言程序设计》综合程序设计实验报告题目:计算器一、项目简介在我们生活中无时不刻不用到计算,虽说计算并不是很麻烦,但有的时候复杂的运算仍需要花费我们大量的时间去解决。
所以要有这样一个程序解决这个问题。
基于这个目的,而且在这个学期中,我们又接触到了汇编语言,运用汇编语言编写了计算器,来解决这个实际并且经常遇到的问题。
改程序主要针对加减乘除运算,可以进行相对复杂的问题,包含括号的相关运算。
该问题主要注意四则运算的优先级问题:惩处运算比加减运算优先级高,统计运算按从左到右的顺序计算,含有括号是应该先计算括号里面的内容。
二、小组成员具体分工徐其仲:调试汇编语言环境,设计汇编程序功能李秦:实现程序功能,撰写实验报告三、需求分析与设计问题:利用汇编语言编写计算器内容:从键盘输入一个四则运算表达式,按=号输出计算结果,并当结束时询问:是否继续?如果按q或Q,则退出,按其余任意键则继续。
计算器主要包括以下几个模块:(1)主程序模块主程序模块首先实现调用子程序clear清屏,初始化数据段,调用显示宏show显示界面,将寄存器ax,bx,cx,dx初始化赋初值为0,调用回车换行宏,输入字符或数字并判断调用子程序dyfq调用赋权宏fq为符号赋权,从而判断优先级,调用加减乘除子程序match对判断出的相应运算符进行运算,输出运算结果,判断是否继续,继续则返回输入,不则退出程序。
(2)赋权宏模块通过定义宏fq,定义了变元a,b进行参数传递,并使用替换运算符&使变元a与标号s对应,接着给对应的符号赋予权值,将其权值存入ch中。
(3)加减乘除运算子程序模块运算模块实现了将ax入栈保存,然后将ax,bx赋值为0,判断cl中的符号是否为乘号,若为乘号,则将number中的数字与其下一位的数字相乘,并把结果存入该位置。
类似的若不为乘号则接着判断。
(4)调用赋权宏子程序模块该模块实现了赋权宏fq为(,),*,、,+,-,=等符号分别赋权值为5,1,4,4,3,3,0.从而可以通过设定的权值来判断优先级(5)清屏子程序模块本模块先将即将用到的ax,bx,cx,dx寄存器入栈保存,通过ah=06h屏幕上卷功能,用bh=07h将屏幕设置为黑底白字,给dh,dl赋值将其清屏位置设定在30行80列范围,从而实现了清屏功能,然后再讲ax,bx,cx,dx寄存器出栈(6)回车换行宏模块通过2号功能的输出功能,将0dh赋予dl输出,再调用2号功能,将0ah 赋予dl输出,从而实现回车换行功能。
汇编课程分析报告(有符号多位十进制数的四则运算计算器)
汇编语言课程设计实验报告一、课程设计目的《汇编语言程序设计》是计算机专业一门重要的核心课程,也是一门实践性很强的课程,而课程设计则是其中一个重要的应用实践环节。
本次课程设计的目的是提高分析问题、解决问题的能力以及实际动手能力,进一步加深对汇编语言程序设计基本理论的理解,熟练掌握汇编语言程序上机调试的方法技巧、结构化程序设计技术及高级汇编语言技术,能编写较复杂的应用程序,为学习后继课程打下扎实的基础二、实验环境编译机器:兼容操作系统:中文版编译工具:三、课程设计内容、编写一个有符号多位十进制数的四则运算计算器程序,所输入的算式如下例所示:-+=-――=*-=-/-=要求程序能接收键入的算式,在接收到‘=’号时,计算并以有符号十进制数的形式显示结果,然后允许用户继续键入算式。
如果键入算式后再键入‘.’,则显示结果并结束整个程序。
(‘/’为整除)程序源代码:、已知一个由英语单词组成的字符串已按字典序排好,每个单词以空格符为结束,该串的首二字节为位无符号二进制数,用以说明串的长度。
试编程能从键盘上输入单词(以空格字符为结束),若字符串中没有该单词,则将该单词插入该串适当的位置,使其仍保持字典序,并修改串长度,显示单词在串中位置及串长度;若字符串中有该单词,则显示字符串中所有包含该单词的单词,及其在字符串中的位置。
程序设计框图:程序代码:; 字典字符串,首两个字节为位无符号二进制数,说明字符串长度。
," "() ; 空的缓冲区。
" : ","$"" , . ","$"," : ","$"," : ","$"," : ","$"," : ","$","$"() ; 用于保存需要查询的单词。
微机设计报告(四则运算器)
学院:班级:姓名:学号:课程设计题目:四则运算计算器课程名称:汇编语言与微机原理评阅成绩:评阅意见:成绩评定教师签名:日期:年月目录概述 (1)一、设计要求 (1)二、设计思想 (1)三、程序工作原理 (2)四、程序流程图及说明 (3)五、程序源代码 (7)六、程序运行示例 (18)七、设计过程中遇到的问题及解决方法 (18)八、设计心得 (19)九、参考文献 (19)四则运算计算器概述此计算器,可以实现从键盘输入一个十进制的四则运算表达式,如:-3+4*(5-6)-8/2,编程计算表达式的值,输出十进制结果。
表达式和结果可以是三位或四位十进制,也可以是带负数的十进制数,并且+-*/()位置任意摆放(只要符合数学上的运算逻辑)。
一、设计要求用汇编语言设计一个程序,用来实现计算器的四则运算功能。
需要实现在屏幕要显示输入的表达式,以及运算结果。
例如:-3+4*(5-6)-8/2计算表达式的结果,并将该表达式及结果显示出来;设计要求如下:(1)由键盘作为输入部分。
(2)能进行四则混合运算,并且能计算带括号和负数的数学表达式。
(3)按ESC 键则退出计算器菜单界面并返回dos 系统,否则继续输入表达式,求得对应的结果。
二、设计思想根据题目的要求,可以把整个源程序大致划分六大步骤。
(1)首先键盘输入合法中缀算术表达式,并将其存储到S1中。
(2)然后调用子程序CHANGE将中缀式转化为后缀式。
(3)调用子程序CALCULATE对后缀表达式进行有符号数的运算,并将最终结果存放在栈中。
(4)POP AX,AX->STORAGE,即用STORAGE 存放最终运算结果。
(5)调用子程序OUTPUT将运算结果输出。
(6)通过用键盘输入ESC退出DOS程序。
三、程序工作原理步骤一的原理:此处用系统功能1号调用,每次从键盘输入一个字符,就将其存入到数组S1中,然后在判断此字符是否为回车,如果不是,则循环,继续输入字符,否则,程序往下执行。
汇编语言程序设计————计算器
目录一.设计内容 (2)二.设计方案 (2)1.主程序模块. (2)2.赋权值模块. (2)3.加减乘除运算子程序模块. (2)4.调用赋权宏子程序模块. (2)5.回车换行宏模块. (2)6.9号功能显示字符串宏模块. (2)三.设计框图 (3)四.程序代码 (4)五.运行结果 (9)六.设计总结 (9)计算器汇编语言程序设计一.设计内容从键盘输入一个十进制两位数的四则运算表达式,如23*56-(8*19)/6+67-8=,编程计算表达式的值,输出十进制结果(有可能是三位或四位十进制),+-*/位置任意。
并要求程序能反复执行直道对“还要继续吗?(y/n)”之类的提示回答“n”或“N”为止。
四则运算主要包括以下几个模块:(1)主程序模块.(2)赋权宏模块.(3)加减乘除运算子程序模块.(4)调用赋权宏子程序模块.(5)回车换行宏模块.(6)9号功能显示字符串宏模块.二.设计方案1.主程序模块.主程序初始化数据段,调用显示宏show显示界面,输入字符或数字并判断,调用子程序dyfq调用赋权宏fq为符号赋权,从而判断优先级,调用加减乘除运算子程序ys对判断出的相应运算符进行运算,输出运算结果,判断是否继续,继续则返回输入,不继续则退出程序.2.赋权宏模块.通过定义宏fq,定义了变元a,b进行参数传递,并使用替换运算符&使变元a与标号s对应.接着给对应的符号赋予权值,将其权值存入ch中.3.加减乘除运算子程序模块.运算模块实现了将ax入栈保存,然后将ax,bx赋值为0,判断cl中的符号是否为乘号*,若为乘号*则将number中的数字与其下一位的数字相乘,并把结果存入该位置,类似的若不为乘号*则接着判断是否为除号/,若为除号/则进行除法运算,然后判断是否为加法,为加法则进行加法运算,接着判断是否为减法,为减法则进行减法运算并将结果存入当前的计算的第二个数的位置.4.调用赋权宏子程序模块.该模块实现了调用赋权宏fq为(,),*,/,+,-,=等符号分别赋权值为5,1,4,4,3,3,0.从而可以通过设定的权值来判断优先级.5.回车换行宏模块.通过2号功能的输出功能,将0dh赋予dl输出,再调用2号功能,将0ah赋予dl输出,从而实现回车换行功能.6.9号功能显示字符串宏模块.通过定义宏show,用9号显示功能,通过变元str将字符串显示出来。
VB课程设加减乘除计算器设计报告
加减乘除计算器设计报告学院机械工程班级机设054 学号050389 姓名成绩一、设计思路1.要达到的目的主要是培养学生利用系统提供的基本控件进行创新性设计,理解Visual Basic语言中面向对象的程序设计。
培养学生综合利用Visual Basic语言进行程序设计的能力。
2.关键问题的解决先使用Command命令按钮,命令按钮控件数组,文本框等基本控件设计窗体,再根据下面方法编制程序:1.连续输入新操作数的若干个数字时,采用txtDisplay.Text=txtDisplay.Text&Format$(Index)txtDisplay.Text= txtDisplay.Text&cmdNumber(Index).CaptiontxtDisplay.Text =txtDisplay.Text&Index2.对于正整数运算单击操作数的输入,需要设置一个逻辑变量,使其逻辑值为ture,准备新操作数的输入。
3. 当一个对象(本题指文本框)具有焦点时,在键盘上按键操作出发下面事件过程Private Sub Form_KeyPress(KeyAscii As Integer),在该过程中调用txtDisplay_KeyPressKeyAscii根据KeyAscii对应的字符,调用相应过程。
二、模块之间的调用关系,或程序流程图三、部分程序关键源代码及注释。
Private Sub Command10_Click()‘清空Text1,使操作数空Text1.Text=””num=””End SubPrivate Sub Command11_Click()If Text1.Text<>””ThenText1.Text=-1*Text1.Text 定义负号num=Text1.TextEnd IfEnd SubPrivate Sub Command2_Click(Index As Integer)num1=numText1.Text=””num=””C=IndexEnd SubPrivate Sub Command3_Click()EndEnd SubPrivate Sub Command4_Click()Text1.Text=Sqr(Val(Text1.Text)) ‘提示:当输入负,那么错,根号不可为负End SubPrivate Sub Command5_Click()Text1.Text=Val(Text1.Text)*Val(Text1.Text)End Sub三、设计方案的完善及目前存在的问题1.设计方案要完善的地方①增加高级函数运算功能②精炼程序2. 目前存在的问题①无法运算高级函数问题②退格键清除完数字报错四、本次设计的收获及心得体会通过几天辛苦的设计培养了我利用系统提供的基本控件进行创新性设计,理解Visual Basic语言中面向对象的程序设计。
简易计算器的汇编语言程序设计报告
陕西理工学院--VF课程设计报告设计内容:计算器程序设计学院信息:管理学院班级:会计1204班制作人员:史凡史明坤学号:1220034149指导教师:周作涛目录一、程序功能设计界面............... 错误!未定义书签。
二、程序流程图及其说明.............. 错误!未定义书签。
1 程序流程图 (4)2 流程图说明..................... 错误!未定义书签。
三、程序调试 (5)1.初始界面 (5)2.加法运算实现界面............... 错误!未定义书签。
3.除法运算实现................... 错误!未定义书签。
4.减法运算....................... 错误!未定义书签。
5. 乘法运算实现.................. 错误!未定义书签。
6.清屏后的界面................... 错误!未定义书签。
四、心得体会 (6)五、参考文献 (9)六、附录(代码) ...................... 错误!未定义书签。
一、程序基本概况1 程序界面该课程设计的任务是做一个简易计算器,可以实现加减乘除四则运算。
我们要解决的问题有:以什么方式输入数字、判断是进行什么运算、运算过程中的进位和借位问题以及如何实现清屏等问题。
首先我们要解决的是输入问题,这里我们用vf的自定义的按钮来进行个人输入;然后我们要进行的是判断是进行何种运算,到底是“+、-、*、/”中的哪一种。
当点击ON/c时,则清屏。
点击退格时则消减一位数字。
具体界面如下图:2程序功能介绍本次设计的为简易计算器程序,可以进行简单的四则运算,并对计算的结果及过程能及时并准确的显示。
二、初步设计构想本次课程设计以设计简易计算器为主,功能较为简单,内容相对较少,但其界面必须清晰明了,不能过于繁琐,应由一个text文本框以及相关按钮组成,按钮方面应人性化对按钮进行全面分析设计,使使用者能更好更简洁的使用相关操作。
汇编课程设计报告-四则运算
课程设计报告一.课程设计的性质和目的性质:《汇编语言》是计算机科学与技术专业及网络工程本科学生必修的专业课程。
目的要求:进行程序设计方法和技能的基本训练,巩固在课堂上学到的有关程序设计的基本知识和基本方法,通过实际动手能力的培养,进一步熟悉汇编语言的结构和使用方法,达到能独立阅读、编制和调试一定规模的汇编语言程序的水平。
二.课程设计的要求1.遵循模块化、结构化的程序设计方法。
2.要求程序必须正确。
3.程序简明易懂,多运用输入输出提示,出错信息及必要的注释。
4.要求程序结构合理,语句使用得当。
5.适当追求编程技巧和程序运行效率。
三.主要仪器设备及软件计算机、MASM汇编软件。
四.设计题目四则运算:从键盘输入一个十进制两位数的四则运算表达式,如23*56-(8*19)/6+67-8=,编程计算表达式的值,输出十进制结果(有可能是三位或四位十进制),+-*/位置任意。
并要求程序能反复执行直道对“还要继续吗?(y/n)”之类的提示回答“n”或“N”为止。
五.题目分析根据题目的要求,可以把整个源程序大致划分为几个基本结构,程序加法、减法、乘法、除法、显示结果五个部分,首先用1号功能以输入字符的形式接收输入的算式,再判断输入字符ASCII码,如果是+、-、*、/、=或数字,则跳转到相应功能模块,并把输入的字符转为数值传入BX寄存器,在各功能模块中继续用1号功能输入字符,执行以上操作,将输入号符转为数据存入DX中,由于*、/优先级要高,加、减模块的实现中要根据输入运算符号进行将BX入栈操作,如果是相同优先级运算符,则直接将BX,DX中的数据进行相应运算,输入=则输出运算结果,这时输出字符串Continue?,用户输入y/n执行继续计算和退出操作六.运行结果输入要计算的式子,按等号输出结果,计算机提示是否继续输入,输入字符y,继续输入,键入n退出程序,如果键入字符为其他,则反回提示输入如图:七.程序流程主程序流程八.代码根据题目的要求,可以把整个源程序大致划分为几个基本结构,程序加法、减法、乘法、除法、显示结果五个部分1、源程序:ASSUME CS:CODES,DS:DATAS,SS:STACKSNEXTLINE MACRO ;显示换行宏MOV AH,2MOV DL,10INT 21HMOV AH,2MOV DL,13INT 21HENDMSTART:MOV AX,DATASMOV DS,AXMOV BX,0INPUT1:MOV AH,1 ;从键盘输入一个字符INT 21HCMP AL,'+' ;判断是否为+JZ ADDITIONCMP AL,'-' ;判断是否为-JZ SUBTRATIONCMP AL,'*' ;判断是否为*JZ MULTIPLICATIONCMP AL,'/' 判断是否为/JZ DIVISIONCMP AL,'=' 判断是否为=JZ RESULTCMP AL,58 判断输入是否为数字JS L1JMP INPUT1L1:CMP AL,47节JNS L2JMP INPUT1L2:SUB AL,48 如果输入为数字,将数值计入BX MOV CL,ALMOV AX,BXMOV CH,10MUL CHADD AL,CLMOV BX,AXJMP INPUT1MOV DX,0INPUT2:MOV AH,1 从键盘输入字符INT 21HCMP AL,'+' 判断是否为+JZ L23CMP AL,'-' 判断是否为-JZ L24CMP AL,'*' 判断是否为*JZ L25CMP AL,'/' 判断是否为/JZ L26CMP AL,'=' 判断是否为=JZ L27CMP AL,58 判断是否为数字JS L21JMP INPUT2L21:CMP AL,47JNS L22JMP INPUT2 如果不是数字,则跳转到INPUT2 L22:SUB AL,48 将输入字符转换为数值MOV CL,ALMOV AX,DXMOV CH,10MUL CHADD AL,CLMOV DX,AXJMP INPUT2L23:ADD BX,DX 执行加运算JMP ADDITIONL24:ADD BX,DXJMP SUBTRATIONL25:ADD BX,DXJMP MULTIPLICATIONL26:ADD BX,DXJMP DIVISIONL27:ADD BX,DXSUBTRATION: 如果输入-,则执行减法 MOV DX,0INPUT3:MOV AH,1INT 21HCMP AL,'+' 判断是否为+JZ L33CMP AL,'-' 判断是否为-JZ L34CMP AL,'*' 判断是否为*JZ L35CMP AL,'/' 判断是否为/JZ L36CMP AL,'=' 判断是否为=JZ L37CMP AL,58 判断是否为数字JS L31JMP INPUT3L31:CMP AL,47JNS L32JMP INPUT3L32:SUB AL,48 将字符转换为数值MOV CL,ALMOV AX,DXMOV CH,10MUL CHADD AL,CLMOV DX,AXJMP INPUT3L33:SUB BX,DX 执行减法操作JMP ADDITIONL34:SUB BX,DXJMP SUBTRATIONL35:SUB BX,DXJMP MULTIPLICATIONL36:SUB BX,DXSUB BX,DX JMP RESULTMULTIPLICATION: MOV DX,0 INPUT4: MOV AH,1 INT 21HCMP AL,'+' JZ L43 CMP AL,'-' JZ L44 CMP AL,'*' 判断是否为* JZ L45CMP AL,'/' 判断是否为/ JZ L46CMP AL,'=' 判断是否为= JZ L47CMP AL,58 判断是否为数字 JS L41 JMP INPUT4 L41:CMP AL,47 JNS L42 JMP INPUT4 L42:SUB AL,48 将字符转换为数值 MOV CL,ALMOV AX,DX 将字输入数字加入数值 MOV CH,10 MUL CH ADD AL,CL MOV DX,AX JMP INPUT4 L43:MOV AX,BX 将BX 移入AXMUL DX 与DX 中的数进行乘运算 MOV BX,AX 将AX 中的数值返回BX JMP ADDITION L44:MOV AX,BX 将BX 移入AXMUL DX 与DX 中的数进行乘运算 判断是否为+ 判断是否为-JMP SUBTRATIONL45:MOV AX,BX 将BX移入AXMUL DX 与DX中的数进行乘运算 MOV BX,AX 将AX中的数值返回BX JMP MULTIPLICATIONL46:MOV AX,BX 将BX移入AXMUL DX 与DX中的数进行乘运算 MOV BX,AX 将AX中的数值返回BX JMP DIVISIONL47:MOV AX,BX 将BX移入AXMUL DX 与DX中的数进行乘运算 MOV BX,AX 将AX中的数值返回BX JMP RESULTDIVISION:MOV DX,0INPUT5:MOV AH,1INT 21HCMP AL,'+' JZ L53CMP AL,'-' JZ L54CMP AL,'*' JZ L55CMP AL,'/' JZ L56CMP AL,'=' JZ L57CMP AL,58 JS L51JMP INPUT5 L51:CMP AL,47 JNS L52JMP INPUT5 L52:SUB AL,48 MOV CL,AL MOV AX,DX MOV CH,10 判断是否为+ 判断是否为- 判断是否为* 判断是否为/ 判断是否为= 判断是否为数字ADD AL,CLMOV DX,AXJMP INPUT5L53:MOV AX,BXDIV DXMOV AH,0MOV BX,AXJMP ADDITIONL54:MOV AX,BXDIV DLMOV AH,0MOV BX,AXJMP SUBTRATIONL55:MOV AX,BXDIV DLMOV AH,0MOV BX,AXJMP MULTIPLICATIONL56:MOV AX,BXDIV DLMOV AH,0MOV BX,AXJMP DIVISIONL57:MOV AX,BXDIV DLMOV AH,0MOV BX,AXJMP RESULTRESULT:显示结果MOV CH,10MOV CL,100R1: 将BX中的计算结果以十进制输出 MOV AX,BXDIV CLMOV DL,ALMOV DH,AHMOV AL,AHMOV AH,0MOV BX,AXADD DL,48INT 21HMOV AH,0MOV AL,CLDIV CHMOV CL,ALCMP CL,1JZ R2JMP R1R2:MOV DL,DHADD DL,48MOV AH,2INT 21HS2:NEXTLINELEA DX,STRING 询问是否继续输入MOV AH,9INT 21HMOV AH,1INT 21HCMP AL,'y' 输入y则跳转到S1JE S1CMP AL,'n' 输入n则跳转到S3,即结束程序JE S3JNE S2S3:MOV AH,4CHINT 21HCODES ENDS九.心得体会程序的主要功能是实现四则运算,整个程序中主要分为,输入算式,加法,减法,乘法,除法和以十进制显示结果这几个部分本程序基本实现了四则运算的功能,但还没能实现带有括号的四则运算,还有在除法运算中不能运算较大的数,会产生溢出现象一开始的时候自己编出来的程序有很多问题,尤其是在循环程序上,因此查阅了不少资料,也请教了好几个同学帮着修改,调试了好久才能正常运行。
汇编语言课程设计任务书--简易计算器,实现整数(2个字节的无符号数)的四则运算
简易计算器,实现整数(2个字节的无符号数)的四则运算
指导教师
谷赫
答疑教师
谷赫
设计时间
2011年12月31日-----2012年1月6日
设计要求
一、设计目的
1.对已学过的汇编语言程序设计知识进行综合运用;
2.能按要求设计出可执行的汇编源程序并进行调试。
二、设计任务
1、通过键盘输入操作数和运算符后,显示出算式和运算结果。
知识改变生活精品word文档值得下载值得拥有知识改变生活精品word文档值得下载值得拥有汇编语言程序设计课程设计任务书简易计算器实现整数2个字节的无符号数的四则运算指导教师设计时间2011年12月31日2012设计要求一设计目的1
《汇编语言程序设计》课程设计任务书
专业
计算机科学与技术
班级
电算B10209
01月04日:根据流程图,编写汇编语言源程序。
01月05日:调试汇编语言源程序,完成基本功能,得出最后结果。
01月06日:准备资料,进行答辩。
注:上交设计报告。重点阐述程序的有关算法说明、程序的流程图以及子程序的功能和参数的说明及程序代码。
系(教研室)主任签字:年月日
2、分析问题,给出程序流程图。
3、适当的使用子程序。
4、调试汇编语言源程序。
三、知识点掌握掌握并深入理解汇编语言程序 Nhomakorabea计方法;
掌握汇编语言提供的指令及其使用方法;
掌握中断的基本概念,并熟悉DOS功能调用的使用方法;
学会汇编语言源程序调试的全过程。
四、时间安排
12月31日:收集资料,进行问题分析,得到程序流程图。
汇编--计算器
目录一、计算器的具体功能.......................................... 错误!未定义书签。
二、软件设计流程极其描述.................................. 错误!未定义书签。
三、源程序代码 (12)四、课程设计体会 (23)五、参考文献 (23)附录 (23)一、计算器的具体功能1、输入一个正数后按回车可以直接输出该正数;2、输入一个负数后按回车可以直接输出该负数;3、可以进行有符号数的加运算;4、可以进行有符号数的减运算;5、可以进行有符号数的加、减运算;6、可以进行有符号数的乘运算;7、可以进行有符号数的除运算;8、可以进行有符号数的乘、除运算;9、可以进行有符号数的加、减、乘、除四则运算;10、支持使用括号改变运算顺序;11、输入一个数值不是很大的合法的算术表达式并按回车,可以得到正确的结果。
二、软件设计流程极其描述《一》、软件设计简要流程下页所示:以上为主流程图以上为中缀表达式转化为后缀表达式的流程图。
其每次向S2中输入一个字符,DI就会加1。
当压入‘(’后,再压入0作为运算符优先级的判断;当压入‘+’或‘-’后,再压入01作为运算符优先级的判断;当压入‘*’或‘/’后,再压入02作为运算符优先级的判断。
以上为计算后缀表达式数值的流程图以上为输出运算结果程序的流程图《二》、简要流程中五大步骤的具体描述1、步骤(一):从键盘输入合法中缀算术表达式,并将其存储到S1中此处用系统功能1号调用,每次从键盘输入一个字符,就将其存入到数组S1中,然后在判断此字符是否为回车,如果不是,则循环,继续输入字符,否则,程序往下执行。
2、步骤(二):调用子程序CHANGE将中缀式转化为后缀式此处最核心的就是中缀表达式转化为后缀表达式的算法。
具体思路为:用一个栈来存储与运算符号.先将字符’@’压入栈中,并假设其优先级为0.然后遍历S1中的字符,遇到数字直接存入S2中并且输完数字后向S2中输入一空格以备计算结果时用。
重庆交通大学汇编语言计算器实验报告
重庆交通⼤学汇编语⾔计算器实验报告重庆交通⼤学设计性实验报告班级: 计信2013级2班学号: 631306060207 姓名:李国昊实验项⽬名称:计算器实验项⽬性质:设计性实验实验所属课程: c#课程实训实验室(中⼼): B01 407 指导教师:何伟实验完成时间: 2015 年 6 ⽉ 6 ⽇⼀、实验⽬的学⽣靠所学知识在c#语⾔环境下独⽴完成计算器的设计与功能的实现。
⼆、实验内容及要求实现计算器的基本加、减、乘、除,清零、三⾓函数、指数、开⽅、数制转换等功能。
三、实验设备及软件使⽤c#进⾏编程四、实验过程及步骤1、设计主界⾯2、设计各部分窗体3、⽤内置函数编写代码并实现各部分功能4、调试程序五、主要代码及运⾏结果//进制转换namespace TaskFour{public partial class FrmMtoN : Form{public FrmMtoN()}private void Form1_Load(object sender, EventArgs e) {radioButton1.Checked = true;textBox1.Text = "0";label2.Text = "⼆t进?制?:阰0000";label3.Text = "⼋?进?制?:阰0000";}public string MToN(string src,int m,int n){src = src.ToUpper();double srcInt = 0;int temp=0;string dest = "";string strDest="";for (int i = 0; i < src.Length; i++){string srci = "";switch (src[i]){case'A': srci = "10"; break;case'B': srci = "11"; break;case'C': srci = "12"; break;case'D': srci = "13"; break;case'E': srci = "14"; break;case'F': srci = "15"; break;default: srci = src[i].ToString(); break;}temp = int.Parse(srci);srcInt = srcInt + temp*Math.Pow(m, src.Length-i-1); } //srcInt 把?原-来ぁ鋗进?制?转羇换?为a⼗?进?制? while ((int)srcInt!=0){switch (temp.ToString()){case"10": stemp = "A"; break;case"11": stemp = "B"; break;case"12": stemp = "C"; break;case"13": stemp = "D"; break;case"14": stemp = "E"; break;case"15": stemp = "F"; break;default: stemp = temp.ToString(); break;}dest += stemp;srcInt = srcInt / n;}for (int j = dest.Length-1; j >= 0; j--){strDest += dest[j];}if (string.IsNullOrEmpty(strDest))strDest = "0000";return strDest;}private void button1_Click(object sender, EventArgs e){string src = textBox1.Text.Trim();if (radioButton1.Checked == true){label2.Text = "⼆t进?制?:阰" + MToN(src, 10, 2);label3.Text = "⼗?六ⅷ?进?制?:阰" + MToN(src, 10, 16); }else if (radioButton2.Checked == true){label2.Text = "⼗?进?制?:阰" + MToN(src, 2, 10);label3.Text = "⼗?六ⅷ?进?制?:阰" + MToN(src, 2, 16);{label2.Text = "⼆t进?制?:阰" + MToN(src, 16,2);label3.Text = "⼗?进?制?:阰" + MToN(src, 16,10);}}private void panel1_Paint(object sender, PaintEventArgs e){}private void radioButton2_CheckedChanged(object sender, EventArgs e) { }}}//开⽅与指数运算namespace TaskFour{public partial class FrmOther : Form{public FrmOther(){InitializeComponent();}private void button3_Click(object sender, EventArgs e) {textBox1.Text = "0000";label4.Text = "结á果?为a:阰0000";}private void button4_Click(object sender, EventArgs e) {textBox2.Text = "0000";textBox3.Text = "0000";label5.Text = "结á果?为a:阰0000";}public double StrToDouble(string str){double dNumber = 0.0;dNumber = double.Parse(str);}catch (Exception ex){MessageBox.Show("?⽰?:阰" + ex.Message); }return dNumber;}private void button1_Click(object sender, EventArgs e) { string str = textBox1.Text.Trim();double num = StrToDouble(str);double sum = Math.Sqrt(num);label4.Text = "结á果?为a:阰" + sum.ToString();}private void button2_Click(object sender, EventArgs e) { string str1 = textBox2.Text.Trim();string str2 = textBox3.Text.Trim();double num1 = StrToDouble(str1);double num2 = StrToDouble(str2);double sum = Math.Pow(num1,num2);label5.Text = "结á果?为a:阰" + sum.ToString();}private void FrmOther_Load(object sender, EventArgs e) { }private void groupBox2_Enter(object sender, EventArgs e) { }}}//常规四则运算namespace TaskFour{public partial class FrmSum : Form{public FrmSum()}private void FrmSum_Load(object sender, EventArgs e) {tb_1.Text = "0000";tb_2.Text = "0000";lbSum.Text = "0000";lbSum.BackColor = Color.White;private void btnReset_Click(object sender, EventArgs e) {tb_1.Text = "0000";tb_2.Text = "0000";lbSum.Text = "0000";cbbSum.Text = "@";}private void btnSum_Click(object sender, EventArgs e) {string str1 = tb_1.Text.Trim();string str2 = tb_2.Text.Trim();float f1 = 0.0f;float f2 = 0.0f;float fSum = 0.0f;try{f1 = float.Parse(str1);f2 = float.Parse(str2);}catch(Exception ex){MessageBox.Show("?醒?:阰"+ex.Message); return;}string str = cbbSum.Text.Trim();switch (str)case"-": fSum = f1 - f2; break;case"*": fSum = f1 * f2; break;case"/": if(f2 == 0) { MessageBox.Show("分?母?不?允ê许í为a0"); return; }; fSum = f1 / f2; break; case"@": MessageBox.Show("请?选?择?运?算?符?!?"); return;default: MessageBox.Show("⾮?法ぁ?操ù作痢?); return;}lbSum.Text = fSum.ToString();}private void lbSum_Click(object sender, EventArgs e){private void cbbSum_SelectedIndexChanged(object sender, EventArgs e) {}}}//三⾓函数运算namespace TaskFour{public partial class FrmTriFuc : Form{public FrmTriFuc(){InitializeComponent();}private void FrmTriFuc_Load(object sender, EventArgs e){lbSum.BackColor = Color.White;rbSin.Checked = true;tbNumber.Text = "0000";rbDuShu.Checked = true;}private void btnReset_Click(object sender, EventArgs e){lbSum.BackColor = Color.White;rbDuShu.Checked = true;tbNumber.Text = "0000";}public double StrToDouble(string str){double dNumber = 0.0;try{dNumber = double.Parse(str);}catch (Exception ex){MessageBox.Show("?⽰?:阰" + ex.Message); } return dNumber;}private void btnSum_Click(object sender, EventArgs e) { string str = tbNumber.Text.Trim();double num = StrToDouble(str);double sum = 0.0;if (rbDuShu.Checked == true){num = num / 180.0 * Math.PI;}if (rbSin.Checked == true){sum = Math.Sin(num);}else if (rbCos.Checked == true){sum = Math.Cos(num);}else if (rbTan.Checked == true){else if (rbArcsin.Checked == true){sum = Math.Asin(num) * 180 / Math.PI; }else if (rbArccos.Checked == true){sum = Math.Acos(num) * 180 / Math.PI; }else{sum = Math.Atan(num) * 180 / Math.PI; }lbSum.Text = sum.ToString();}}}运⾏结果:1.主界⾯2.常规运算4.进制转换5.开⽅与指数运算六、⼼得体会通过这次实训使我巩固了以前的知识并在此基础上对c#的特点和算法有了更深的了解。
汇编语言课程设计报告——实现加减乘除四则运算的计算器汇总【范本模板】
汇编语言课程设计报告( 2011 -- 2012 年度第2 学期)实现加减乘除四则运算的计算器专业计算机科学与技术学生姓名班级学号指导教师完成日期目录目录 (1)1概述 01.1 设计目的 01.2 设计内容 02系统需求分析 02。
1 系统目标 02.2 主体功能 02.3 开发环境 03 系统概要设计 (1)3。
1 系统的功能模块划分 (1)3.2 系统流程图 (2)4系统详细设计 (2)5测试 (3)5.1 测试方案 (3)5.2 测试结果 (3)6小结 (4)参考文献 (5)附录 (6)附录源程序清单 (6)实现加减乘除四则运算的计算器1 概述1。
1 设计目的本课程设计是在学完教学大纲规定的全部内容、完成所有实践环节的基础上,旨在深化学生学习的汇编语言课程基本知识,进一步掌握汇编语言程序设计方法,提高分析问题、解决问题的综合应用能力.1。
2 设计内容能实现加、减、乘、除的计算;该程序接受的是16进制数;执行时,需要在文件名后直接跟上计算表达式,如在命令提示符下执行结果如下:c:\tasm〉js 3+252 系统需求分析2。
1 系统目标本次汇编语言课程设计的最终目的是要实现一个简单加减乘除四则运算的计算器,要求编写一个程序,每运行一次可执行程序,可以实现数的加减乘除四则运算。
比如,十进制数的加减乘除四则运算.我们曾经学习过两个具体数字进行加减法运算,但是对于简单计算器用汇编语言实现难点在于这两个要做运算的数是未知的,是由自己调用中断输入到屏幕上并要用程序存储起来的数,然后才能对这两个数进行运算,而且做的是加法运算、减法运算乘法运算还是除法运算也未可知,为此我们还要判断用户所输入的运算是四则运算中的哪一个运算。
此外,运算过程中的进位或是借位,选择用什么样的方式进行输出,如何实现清屏等也是要解决的问题.2.2 主体功能系统分析主要包括设计的功能分析和系统的流程,功能分析放在首位,每一个软件都要能满足一定的功能才有使用价值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编语言课程设计报告( 2011 -- 2012 年度第 2 学期)实现加减乘除四则运算的计算器专业 计算机科学与技术学生姓名 班级 学号指导教师 完成日期实现加减乘除四则运算的计算器目录目录 (2)1概述 (1)1.1 设计目的 (1)1.2 设计内容 (1)2系统需求分析 (1)2.1 系统目标 (1)2.2 主体功能 (1)2.3 开发环境 (1)3 系统概要设计 (2)3.1 系统的功能模块划分 (2)3.2 系统流程图 (3)4系统详细设计 (3)5测试 (4)5.1 测试方案 (4)5.2 测试结果 (4)6小结 (5)参考文献 (6)附录 (7)附录源程序清单 (7)汇编语言设计课程设计实现加减乘除四则运算的计算器1 概述1.1 设计目的本课程设计是在学完教学大纲规定的全部内容、完成所有实践环节的基础上,旨在深化学生学习的汇编语言课程基本知识,进一步掌握汇编语言程序设计方法,提高分析问题、解决问题的综合应用能力。
1.2 设计内容能实现加、减、乘、除的计算;该程序接受的是16进制数;执行时,需要在文件名后直接跟上计算表达式,如在命令提示符下执行结果如下:c:\tasm>js 3+252 系统需求分析2.1 系统目标本次汇编语言课程设计的最终目的是要实现一个简单加减乘除四则运算的计算器,要求编写一个程序,每运行一次可执行程序,可以实现数的加减乘除四则运算。
比如,十进制数的加减乘除四则运算。
我们曾经学习过两个具体数字进行加减法运算,但是对于简单计算器用汇编语言实现难点在于这两个要做运算的数是未知的,是由自己调用中断输入到屏幕上并要用程序存储起来的数,然后才能对这两个数进行运算,而且做的是加法运算、减法运算乘法运算还是除法运算也未可知,为此我们还要判断用户所输入的运算是四则运算中的哪一个运算。
此外,运算过程中的进位或是借位,选择用什么样的方式进行输出,如何实现清屏等也是要解决的问题。
2.2 主体功能系统分析主要包括设计的功能分析和系统的流程,功能分析放在首位,每一个软件都要能满足一定的功能才有使用价值。
根据功能需求来创建应用程序。
本设计的功能如下:1、输入2个数,先判断是加减运算还是乘除运算,再进行计算2、判断符号是否为运算符3、回车为换行符4、用十进制或十六进制输出运算结果2.3 开发环境TASM5.0集成环境实现加减乘除四则运算的计算器3 系统概要设计3.1 系统的功能模块划分本题目实现的模块图如图3-1所示图3-1 概要模块(1)界面设置主要实现确定界面样式的功能,以菜单形式显示。
(2)选择算法设置用于选择加、减、乘、除法来进行运算。
(3)十进制转换设置应用十进制的转换算法来处理加、减、乘、除法四则运算。
汇编语言设计课程设计3.2 系统流程图图3.2.1四则运算计算器执行过程流程图4系统详细设计4.1 界面设置通过定义数据段,利用09H显示出功能列表。
通过定义数据段,以字符串的形式输入每个提示信息,利用09H键盘输入并回显命令显示每一个功能提示,是计算器的功能列表有序清晰的显示在屏幕上。
4.2 选择算法设置首先选择要进行的四则运算,若选择1,则进行加法;若选择2,则进行减法;若选择3,则进行乘法;若选择4,则进行除法。
加法:先输入第一个小于4位十六进制数存入SI中,在输入第二个小于4位十六进制数存入BX中,然后显示BX 和实现加减乘除四则运算的计算器[SI]中的内容相加存在BX中。
减法:先输入第一个小于4位十六进制数存入SI中,在输入第二个小于4位十六进制数存入BX中,然后显示BX 和[SI]中的内容相减存在BX中,然后用NEG来求反,即为第一个数减去第二个数的差,显示BX的内容即为差。
乘法:先输入第一个小于4位十六进制数存入SI中,在输入第二个小于4位十六进制数存入BX中,把BX的值给AX,然后让AX乘以[SI],然后再分别将DX,AX中的内容赋给BX,接着依次显示DX,AX的内容,即为积。
除法:先输入第一个小于4位十六进制数存入SI中,在输入第二个小于4位十六进制数存入BX中,将[SI]赋给AX作被除数,让BX作除数,得到的商存放在AX中,余数放在DX中,然后依次赋给BX,将其依次显示即为商。
4.3 十进制转换设置要完成十进制转换成十六,一般采用除十六取余法来完成,其大致过程如下:将待转换的数除以16得到第一个商和余数,此第一个余数就是所求的十六进制数的各位,再用第一个商除以16,得到第二个商和余数,此第二个余数就是所求十六进制数的十位,重复这一过程直至商为0,此时的余数就是所求十六进制数的最高位。
在内存中分配一缓冲区,用来存放以上分离出来的使十进制数的每一位,然后再逐个转换成ASCII码,转换成ASCII码的过程很简单,就是给每个十六进制位加上30H即可,最后送显示器输出。
5测试5.1 测试方案对程序源代码进行功能调试和功能验证。
程序代码运行成功后,分别检验测试其加、减、乘、除功能,并对结果进行分析。
当用户选择0时,输入Y或N决定是否退出程序。
5.2 测试结果输入数字进行加减乘除运算,计算结果如下图所示:图5.2.1 计算结果汇编语言设计课程设计测试结束后,退出程序,如下图所示:图5.2.2 退出程序6 小结程序的主要功能是实现四则运算,整个程序中主要分为,输入算式,加法,减法,乘法,除法和以十进制显示结果这几个部分。
本程序基本实现了四则运算的功能,但还没能实现带有括号的四则运算,还有在除法运算中不能运算较大的数,会产生溢出现象。
一开始的时候自己编出来的程序有很多问题,尤其是在循环程序上,因此查阅了不少资料,也请教了好几个同学帮着修改,调试了好久才能正常运行。
由于能力有限,程序还是有不完美的地方。
这次的综合实验让我对汇编有了更深刻的认识,对各种指令有了进一步的理解。
实现加减乘除四则运算的计算器参考文献[1]刘其明.汇编语言程序设计教程. 徐州:中国矿业大学出版社, 2010.11汇编语言设计课程设计附录附录源程序清单IN16 MACRO ;完成从键盘接受二个数并转换为十六制数,第一个数由SI指向,第二个数存放在BX中LEA DX,PR ;DX指向PR换行CALL OUTPUT ;LEA DX,INPUT1 ;DX指向INPUT1,提示输入第一个数CALL OUTPUTCALL INPUT ;把输入的数存放在BX中LEA SI,RESULT ;SI指向RESULTMOV [SI],BX ;把第一个十六制数存入RESULT的第一个位置LEA DX,PR ;DX指向PR,换行CALL OUTPUTLEA DX,INPUT2 ;DX指向INPUT2,提示输入第一个数CALL OUTPUTCALL INPUT ;把输入的数存放在BX中ENDM ;宏结束DATA SEGMENT ;数据段BUF DB ' ',0DH,0AHDB '*------- WELCOME TO CALCULATOR SYSTEM ---------*',0DH,0AHDB '*---1:ADD--2:SUB--3:MUL--4:DIV--0:QUIT---------*',0DH,0AHDB '*---------- 2011*6*21---------------*',0DH,0AHDB 0DH,0AH,'Please input the choose number:','$'INPUT1 DB 'Please input the first number xiao yu 4 wei:','$'INPUT2 DB 'Please input the second number xiao yu 4 wei:','$'RESULT DW ?,? ;存放键盘输入的两个十六制数WRO DB 'You input the number is wrong,please input again:',0DH,0AH,'$';PR DB 0DH,0AH,'$' ;将光标移到下一行起始位置PR1 DB 'A + B=$'PR2 DB 'A - B=$'PR3 DB 'A * B=$'PR4 DB 'A / B=$'实现加减乘除四则运算的计算器PR5 DB '......$'PR6 DB 'Are you sure exit?(Y/N)$'DATA ENDS ;数据段落定义结束CODE SEGMENTMAIN PROC FAR ;主函数ASSUME CS:CODE ,DS:DATASTART:MOV AX,DATAMOV DS,AXLEA DX,BUF ;DX指向BUF换行CALL OUTPUT ;调用显示字符串函数换行SUB AX,AX ;AX清零CALL CHOOSE ;调用选择函数JMP START ;跳转到STARTRETMAIN ENDPINPUT PROC NEAR ;定义INPUT函数,就是将从键盘输入的数按原十六进制数存放在BX中MOV BX,0 ;BX清零NEWCHAR:MOV AH,1INT 21H ;接受键盘输入一个字符CMP AL,0DH ;输入的字符与回车比较JE EXIT ;是回车就结束CMP AL,'A' ;与A比较JAE H0 ;大于等于就跳转到H0CMP AL,'0' ;与0比较JAE H1 ;大于等于就跳转到H1H0:SUB AL,37H ;由于41-A=37,完成把字母字符转换成对应的十六进制数JMP ADDTO ;跳转到ADDTOH1:SUB AL,30H ;把0到9的字符转换成对应的十六进制数JMP ADDTO ;跳转到ADDTOADDTO:MOV CL,4 ;相当于让BX乘以16SHL BX,CL ;将BX逻辑左移MOV AH,0 ;将AX清零ADD BX,AX ;AX+BX送到BXJMP NEWCHAR ;跳转到NEWCHAR,把第二个输入的字符存放到BX的第二位EXIT: RETINPUT ENDPOUTPUT PROC NEAR ;显示字符串函数MOV AH,09HINT 21HRETOUTPUT ENDPCHOOSE PROC NEAR ;选择函数MOV AH,1 ;从键盘接受一个数INT 21HCMP AL,'1' ;与1比较JE YES1 ;等于1就跳转到YES1,进行加法CMP AL,'2' ;与1比较JE YES2 ;等于2就跳转到YES2,进行减法CMP AL,'3' ;与1比较JE YES3 ;等于3就跳转到YES2,进行乘法CMP AL,'4' ;与1比较JE YES4 ;等于4就跳转到YES2,进行除法CMP AL,'0' ;与0比较JE EXIT1 ;等于4就跳转到EXIT1,结束程序CALL WRONG ;如果不是0到4之间的数就提示出错EXIT1: LEA DX,PR ;DX指向PR换行CALL OUTPUTLEA DX,PR6 ;DX指向PR6,确认是否退出CALL OUTPUTMOV AH,1 ;从键盘接受一个数INT 21HCMP AL,'Y' ;与Y比较JE EXIT0 ;不是Y就看是否为yCMP AL,'y' ;与y比较JNE START ;不是y就跳转到STARTEXIT0:MOV AH,4CH ;结束本程序INT 21HYES1:CALL JIA ;调用JIA函数JMP START ;调用完之后跳转到STARTYES2:CALL JIAN ;调用JIAN函数JMP START ;调用完之后跳转到STARTYES3:CALL CHENG ;调用CHENG函数JMP START ;调用完之后跳转到STARTYES4:CALL CHU ;调用CHU函数RETCHOOSE ENDP ;选择函数结束WRONG PROC NEAR ;报错函数LEA DX,PR ;DX指向PR换行LEA DX,WRO ;DX指向WRO,提示输入有错,请重新输入JMP START ;跳转到STARTRETWRONG ENDP ;报错函数结束JIA PROC NEAR ;加法函数IN16 ;调用宏,接受键盘输入的两个十六进制数,第一个数由SI指向,第二个数存放在BX中ADD BX,[SI] ;把第一个数加第二个数存放到BX中LEA DX,PR ;DX指向PR,换行CALL OUTPUTLEA DX,PR1 ;DX指向PR1,显示‘A + B=’CALL OUTPUTCALL OUTBX ;调用显示BX寄存器的内容函数RETJIA ENDP ;加法结束JIAN PROC NEAR ;减法函数IN16 ;调用宏,接受键盘输入的两个十六进制数,第一个数由SI指向,第二个数存放在BX中SUB BX,[SI] ;第二个数减第一个数,结果存放到BX中NEG BX ;对结果取反后才是A-B的值,才是第一个数减去第二个数LEA DX,PR ;DX指向PR,换行CALL OUTPUTLEA DX,PR2 ;DX指向PR2,显示‘A - B=’CALL OUTPUTCALL OUTBX ;调用显示BX寄存器的内容RETJIAN ENDP ;加法函数结束CHENG PROC NEAR ;乘法函数IN16 ;调用宏,接受键盘输入的两个十六进制数,第一个数由SI指向,第二个数存放在BX中MOV DX,0 ;把DX清零MOV AX,BX ;把第二个数赋给AXMUL WORD PTR[SI] ;AX乘[SI]并把结果存放到DX,AX中,是字的操作MOV BX,AX ;将AX赋给BXPUSH BX ;将BX压栈,显示下面DX的内容时要将DX的值赋给BXPUSH DX ;将DX压栈,因为下面要换行输出,会改变DX的值LEA DX,PR ;DX指向PR,换行输出CALL OUTPUTLEA DX,PR3 ;DX指向PR3,显示‘A * B=’CALL OUTPUTPOP DX ;将DX出栈,要将做乘法后DX的内容显示出来MOV BX,DX ;把DX给BXCALL OUTBX ;显示DX的内容POP BX ;将BX出栈CALL OUTBX ;显示AX的内容RETCHENG ENDP ;乘法函数结束CHU PROC NEAR ;除法函数IN16 ;调用宏,接受键盘输入的两个十六进制数,第一个数SI指向,第二个数存放在BX中MOV AX,[SI] ;将第一个数赋给AXMOV DX,0 ;将DX清零DIV BX ;AX除BX,结果存放到DX,AX,DX存放余数,AX存放商PUSH DX ;压栈DXPUSH AX ;压栈AXLEA DX,PR ;DX指向PR,换行CALL OUTPUTLEA DX,PR4 ;DX指向PR4,显示‘A / B=’CALL OUTPUTPOP AX ;出栈AXMOV BX,AX ;将AX赋给BX,将商给BXCALL OUTBX ;显示AX寄存器的内容,即显示商LEA DX,PR5 ;DX指向PR5,显示省略号CALL OUTPUTPOP DX ;出栈DXMOV BX,DX ;将DX赋给BX,即将余数赋给BX,CALL OUTBX ;显示DX寄存器的内容,显示余数RETCHU ENDP ;除法函数结束OUTBX PROC NEAR ;显示BX寄存器的内容函数MOV CH,4 ;CH等于4ROTATE:MOV CL,4 ;CL等于4ROL BX,CL ;将BX循环左移4位MOV AL,BL ;将BL赋给ALAND AL,0FH ;将AL的高位置0ADD AL,30H ;AL+30H可将AL变为对应的ASCII的值CMP AL,3AH ;判断是否是0-9之间JL PRINTIT ;是则跳转到PRINTITADD AL,7H ;是A-F再加上7HPRINTIT:MOV DL,AL ;将AL赋给DLMOV AH,2INT 21H ;显示ALDEC CH ;CH-1再赋给CHJNZ ROTATE ;CH!=0则跳转到ROTATERET ;CH=0则结束OUTBX ENDP ;显示寄存器BX内容函数结束CODE ENDSEND MAIN。