汇编语言简单计算器程序课程设计报告.doc_第1页
汇编语言简单计算器程序课程设计报告.doc_第2页
汇编语言简单计算器程序课程设计报告.doc_第3页
汇编语言简单计算器程序课程设计报告.doc_第4页
汇编语言简单计算器程序课程设计报告.doc_第5页
免费预览已结束,剩余17页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计说明书题目: 简单计算器 院 系: 专业班级: 学 号: 学生姓名: 指导教师: 2010年 12月 31日 安徽理工大学课程设计(论文)任务书 计算机科学与工程学院 硬件 教研室学 号 学生姓名 专业(班级) 设计题目题目一:判断闰年题目二: 简单计算器 题目三: 代码转换程序题目四:字符图形程序题目五: 学生成绩管理题目六: 打字练习 (注:请在自己选做的题目后打)设计技术参数1 熟悉汇编指令、宏汇编语言的编程方法 2 BIOS中断调用、系统功能中断调用方法 3 磁盘文件、及文件内容操作设计要求题目的选择是根据汇编语言的特点主要针对系统内部的一些中断调用、系统功能调用、系统数据处理、文件数据处理而设计的,是对所学课程知识较为系统的应用。 由于汇编语言编程相对其他语言编程比较复杂,因此,在设计上应把重点放在程序的功能实现上,不要太在意程序的结构和显示界面的设计。不要局限于题目所规定的要求,可以灵活裁减,设计出功能更完善程序。 另外,也可以自己设计题目,同时,提出详细的功能描述,经指导老师审查同意后也可作为课程设计的题目。工作量1. 完成所选题目的软件设计;2. 课程设计说明书1000字(不包括程序源代码)左右。工作计划第1次熟悉软件环境。第2次绘制程序流程图。第3次用编写程序。第4次用调试运行程序。第5次编写课程设计说明书参考资料1李敬兆等编.汇编语言程序设计.合肥:中国科学技术大学出版社,2008.92李敬兆等编.汇编语言程序设计实验教程及习题解答.合肥:中国科学技术大学出版社,2008.93王爽等编.汇编语言.北京:清华大学出版社,2003.54曹加恒等编.新一代汇编语言课程设计.北京:高等教育出版社,2003.65杨路明等编.汇编语言程序设计.长沙:中南大学出版社,2005.86詹仕华等编.汇编语言程序设计.北京:中国电力出版社,2008.27詹仕华等编.汇编语言程序设计习题解答及课程设计、设计辅导.北京:中国电力出版社,2008.28宋彩莉等编.汇编语言程序设计学习指导.西安:西安交通大学出版社,2008.2指导教师签字教研室主任签字 2010年 12月 17 日安徽理工大学课程设计(论文)成绩评定表指导教师评语:成绩: 指导教师: 年 月 日摘要汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。汇编语言,作为一门语言,对应于高级语言的编译器,需要一个“汇编器”来把汇编语言原文件汇编成机器可执行的代码。高级的汇编器如MASM,TASM等等为我们写汇编程序提供了很多类似于高级语言的特征,比如结构化、抽象等。在这样的环境中编写的汇编程序,有很大一部分是面向汇编器的伪指令,已经类同于高级语言。现在的汇编环境已经如此高级,即使全部用汇编语言来编写windows的应用程序也是可行的,但这不是汇编语言的长处。汇编语言的长处在于编写高效且需要对机器硬件精确控制的程序。本次设计的简单计算器支持简单的四则运算。 关键词:汇编语言,简单计算器,高效,硬件Abstract Assembly language is a powerful programming language features, but also all the hardware features of computer and can directly control the hardware of the language. Assembly language, as a language, corresponding to high-level language compiler, you need a assembler to the assembly language source file compiled into machine executable code. Advanced assembler such as MASM, TASM assembler, and so for us to write high-level language offers many similar features, such as structured, abstract and so on. In such an environment prepared by the assembler, a large part of the directive for the assembler has been similar in the high-level language. Now the compilation environment has such a high, even if all windows in assembly language to write applications that are feasible, but this is not assembly language strengths. The strength lies in assembly language to write efficient hardware and requires precise control of the machine process. This simple calculator designed to support simple arithmetic.Keywords:assembly language, simplecalculator, efficient,hardware目录1设计目的12概要设计22.1 系统总体分析22.2 主模块框图及说明23 详细设计43.1 主模块及子模块说明43.2 各模块详细设计44程序调试124.1 运行界面分析124.2 算法的分析124.3 调试过程及分析125心得体会135.1 设计体会135.2 系统改进13参考文献14I安徽理工大学课程设计(论文)1设计目的通过本次的课程设计,使自己加深对汇编语言的了解,应用汇编语言程序设计等所学相关知识及查阅资料,完成简易计算器的设计,以达到理论与实践更好的结合、进一步提高综合运用所学知识和设计的能里的目的。通过本次课程设计的训练,可以使我在基本思路和基本方法上对基于8086/8088和基于ARM核的汇编语言程序设计有一个比较感性的认识,并具备一定程度的设计能力,从而能够熟练掌握编写汇编语言源程序的基本方法和基本构架,学会编写顺序结构、分支结构、循环结构和子程序的汇编程序,掌握程序中数据的产生与输入输出的方法以及一些关于汇编语言更深层次方面有初步的认识。2概要设计2.1 系统总体分析本次设计的简单计算器,主要是为了解决数学中的加、减、乘、除四则运算的问题。由于在设计过程中考虑到了可能会多次计算数据,为此本次课程设计我设计的这个简单计算器可以一次运行,多次使用。本程序使用了函数和宏混用的方式实现了代码的较好的可读性,使程序看起来结构严谨。2.2 主模块框图及说明 本程序的功能结构图如图2-1:计算显示进制转换清屏主程序 图 2-1 功能结构图程序流程图如图2-2: 输入NUM1初始化检验是不是数输入NUM2否是是是检验是不是数是开始选择运算符号减加乘除操作数一是否比二大除数是否为0将结果转化为十进制结束否 图2-2 流程图3 详细设计3.1 主模块及子模块说明主模块:主要完成程序的主体框架结构,提供人-程序的交互。子模块:主要完成对数据的加工,处理。3.2 各模块详细设计主模块:首先提供一个主界面,提示用户按要求输入具体的数据和所要进行的操作,输入完毕后给出结果。如果输入过程中发现非法输入,则立即给与提示,程序自动刷新界面,提示继续输入。整个过程按“ESC”结束。流程图如下图3-1:显示结果判断输入的合法性接受输入显示主界面,提示输入 N 提示出错,返回 Y 图3-1 主模块流程图代码如下:CURS MACRO A,B MOV AH,2 ;置光标位置 MOV BH,0 ;页号为0 MOV DH,A ;设置光标的坐标为(A.B) MOV DL,B INT 10H ;BIOS调用 ENDM ;- DISPMSG MACRO MESSAGE LEA 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,0 MOV DL,100 ;设置右上角的坐标为(100,100) MOV DH,100 MOV BH,COLOR ;卷入行属性 INT 10H ;BIOS调用 ENDM .MODEL SMALL .STACK .DATA ;数据段定义 MSG0 DB * * * * * * * * * * * * * * * * * * * *,0DH,0AH ;,0dh,0ah,0dh,0ah DB * *,0DH,0AH ;db * *,0dh,0ah ;db * *,0dh,0ah DB * -caculater- *,0DH,0AH ;,0dh,0ah,0dh,0ah DB * *,0DH,0AH DB * *,0DH,0AH DB * *,0DH,0AH DB * NUM1: DB *,0DH,0AH ;,0dh,0ah,0dh,0ah,0dh DB * *,0DH,0AH DB * *,0DH,0AH DB * *,0DH DB * NUM2: DB *,0DH,0AH ;,0dh,0ah,0dh,0ah,0dh DB * *,0DH,0AH DB * *,0DH,0AH DB * *,0DH DB * RESULT: DB *,0DH,0AH,0DH ;,0ah,0dh,0ah,0dh,0ah,0dh,0ah,0dh,0ah,0dh DB * *,0DH,0AH DB * *,0DH,0AH DB * *,0DH,0AH DB * *,0DH,0AH DB * *,0DH,0AH DB * * * * * * * * * * * * * * * * * * * *,$ MSG1 DB choose +,-,*,/,$ MSG2 DB you choose wrong,$,0AH,0DH MSG3 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!,$ NUM1 DW ? NUM2 DW ? 子模块: 完成对数据的进一步加工处理,转换格式并得出结果。首先根据输入调用对应的“+”、“-”、“*”、“/”四大函数模块,这是本程序的核心模块,其他部分的一些小模块都是为这几大模块服务的,大致的流程图如下图3-2:调用对应模块运算数据,得出结果返回主界面判断合法性接收用户的运算符号 N Y 图3-2 子模块流程图代码如下:BEGIN PROC NEAR BACK: CLEAR 1EH CURS 2,20 ;设置光标为(2.20) DISPMSG MSG0 ;显示用户界面 CURS 8,41 ;设置光标为(8,41) ,第一行 MOV BX,0 MOV CX,2 NEWCHAR1: MOV AH,1 ;键盘输入并回显 INT 21H ;DOS调用 CMP AL,30H ;检查输入的字符是不是数字 JAE J1 ;如果不是,则转移至J1 JMP D2 ;是,转移到D2执行 J1: CMP AL,39H ; 与9的ASCII比较 JBE J2 ;如果输入的字符是0-9,则转移至J2 JMP D2 ;如果不是数字,则转移至D2 J2: SUB AL,30H CBW ;AL的内容符号扩展到AH XCHG AX,BX MOV DI,10 MUL DI XCHG AX,BX ADD BX,AX LOOP NEWCHAR1 MOV NUM1,BX CURS 11,41 ;设置光标位为(11,40),第二行 MOV BX,0 MOV CX,2 NEWCHAR2: MOV AH,1 ;键盘输入并回显 INT 21H ;DOS调用 CMP AL,30H ;与0的ASCII码比较 JAE J3 ;如果输入数字大于等于0则跳转至J3 JMP D2 J3: CMP AL,39H ;与9比较 JBE J4 ;如果小于或等于9则跳转 JMP D2 ;如果输入不是数字则跳转 J4: SUB AL,30H ;如果输入不是0-9,则转化成相应的字符 CBW ;将AL符号扩展到AH XCHG AX,BX MOV DI,10 MUL DI XCHG AX,BX ADD BX,AX LOOP NEWCHAR2 MOV NUM2,BX MOV AX,NUM1 MOV BX,NUM2 PUSH AX PUSH BX CURS 15,33 ;设置光标的位置为(15.33),第三行 DISPMSG MSG1 ;显示提示信息 MOV AH,1 ;接受键盘输入并回显 INT 21H ;DOS调用 CMP AL,+ JE ADDI ;如果运算符为+,则计算两数之和 CMP AL,- JE SUBT ;如果运算符为-,则计算两数之差 CMP AL,* JE MULT ;如果运算符为*,则计算两数之积 CMP AL,/ JE DIVI ;如果运算符为/,则计算两数之商 CURS 16,25 ;设置光标为(16,25) DISPMSG MSG2 ;在屏幕上输出提示信息 JMP D1 ;- ;ADD THE TWO DATAS ADDI: POP BX POP AX ADD AX,BX ;计算两数字之和 PUSH AX CURS 14,41 ;设置光标位置为(14,41) POP AX CALL CHANGE ;将结果转换为十进制数 JMP D1 SUBT: POP BX POP AX CMP AX,BX ;比较两数大小 JAE D0 ;如果AX=BX则跳转 XCHG AX,BX PUSH AX PUSH BX CURS 14,40 ;设置光标位置为(14,40) DISPMSG MSG5 ;在屏幕上显示负号 POP BX POP AX D0: SUB AX,BX ;计算两数之差 PUSH AX CURS 14,41 ;设置光标位置为(14,41) POP AX CALL CHANGE ;将结果转换为十进制数 JMP D1 MULT: POP BX POP AX MUL BX ;计算两数之积 PUSH AX CURS 14,41 ;设置光标位置为(14,41) POP AX CALL CHANGE ;将结果转换为十进制数 JMP D1 DIVI: POP BX POP AX CMP BX,0 ;判断除数是否为0 JE ERROR ;如果是0则跳转 CWD DIV BX ;计算两数之商 PUSH DX PUSH AX CURS 14,41 ;设置光标位置为(14,41) POP AX CALL CHANGE ;将十六进制数转换为十进制数 POP DX CMP DX,0 JNE LOP ;如果DX不等于0则跳转 JMP D1 LOP: MOV CX,4 ;设置精确度为小数点后4位 PUSH DX DISPMSG MSG6 ;输出小数点 POP DX CON: PUSH BX MOV AX,DX MOV BX,10 MUL BX POP BX CWD ;将AX的内容符号扩展到双字 DIV BX ;计算小数点后每一位的数字 PUSH DX PUSH CX CALL CHANGE ;将十六进制数转化为十进制数 POP CX POP DX CMP DX,0 ;判断是否已经计算到小数点后第六位 JE D1 ;如果是,则跳转 LOOP CON ;如果不是,就继续计算 ERROR: CURS 15,33 ;设置光标位置为(15,33) DISPMSG MSG8 ;提示出错 D1: RET D2: PUSH AX PUSH BX CURS 15,33 ;设置光标位置为(15,33) DISPMSG MSG7 ;提示输入出错 POP BX POP AX RET BEGIN ENDP4程序调试4.1 运行界面分析 运行界面如图4-1图4-1 运行界面 在NUM1这一行会提示输入第一个数据,NUM2这一行提示输入第二个数据,输入完成两个数据后程序会提示允许输入运算符,输入无误后在RESULT行显示结果。4.2算法的分析本程序使用了宏和函数调用的方法,这样做使得整个程序体看上去严谨,舒服。整个程序中的CHANGE子程序,将十六进制数转换为十进制数。BEGIN子程序开始运算。DISPMSG子程序,显示用户界面。通过这几个及程序的协助,使得这个系统可以正常的运行。4.3 调试过程及分析 编写完代码后分别点击按钮“C”,”L”,”R”,依次完成编译、连接和运行过程,也可以进入DOS环境下用DEBUG命令完成类似的功能,整个程序按“ESC”退出。5心得体会5.1 设计体会本次课程设计我有不少收获:在选好了题目之后我查阅了不少资料,加

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论