ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:94.30KB ,
资源ID:12290639      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12290639.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(汇编实验报告.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

汇编实验报告.docx

1、汇编实验报告(此文档为word格式,下载后您可任意编辑修改!)课程设计(大作业)报告课程名称:微机原理与汇编语言程序设计设计题目: 简单计算器程序设计 院 系: 信息技术 班 级: 12级计算机应用技术1班 设 计 者: 陈娟 学 号: 指导教师: 周曦 设计时间: 2014.6.232014.6.27 昆明学院课程设计(大作业)任务书姓 名:陈娟 院(系):信息技术专 业:计算机应用技术 学 号:任务起止日期:2014.6.232014.6.27课程设计题目:简单计算器程序设计课程设计要求:1、在屏幕上显示一个窗口,将光标定位在窗口内2、在窗口内输入一个表达式(单项运算)3、程序根据表达式计

2、算结果,并在表达式的后面显示一个“=”和运算结果工作计划及安排:第1次绘制程序流程图。第2次用编写程序。第3次用调试运行程序。第4次编写课程设计说明书指导教师签字 年 月 日 课程设计(大作业)成绩学号: 姓名:陈娟 指导教师:周曦课程设计题目:简单计算器程序设计总结:经过一个星期的努力,这次课程设计终于成功完成了。我的心里是满满的喜悦,虽然在设计的过程中遇到了很多的困难,例如BIOS调用INT 16H子程序完成清屏、设置显示方式、设置窗口等操作,还有就是由于自己的粗心总是把程序中部分的单词打错,也给程序设计的编译运行带来麻烦,浪费了许多的时间与精力。另外就是程序的编写十分复杂,工作量很大,所

3、以编写程序就变成了一项十分困难的事。但在不断的查阅资料,询问学长学姐逐渐做出这份课程设计的过程中,我觉得这些付出很值得,也对微机原理与汇编语言程序设计有了更深入的了解,。编写程序的时间里也顺便复习了在这一学期中所学的微机原理与汇编语言,为后一星期的期末考试做了一些复习。 通过本次课程设计我学到了不少新的东西,也发现了大量的问题,有些在设计过程中已经解决,有些还有待今后慢慢学习。总的来说,做完一个简单计算器程序设计的收获不仅仅是分数上的,对以后的学习方式方法很同学的学习合作也有了更深的看法。 指导教师评语:成绩:填表时间: 指导教师签名:目录1题目分析 52基本理论 53 总体设计 63.1 本

4、程序的功能结构图 63.2字符输入及存储设计 83.3加、 减、乘、除法运算的判断设计 83.4加、 减、乘、除法运算的设计 94实验器材 105方法步骤 116成效分析 116.1运行界面分析 116.2调试过程及分析 137心得体会 148参考文献 149附录 14课程设计(大作业)报告一、 题目分析本次设计的简单计算器,主要是为了解决数学中的加、减、乘、除四则运算的问题。重点和难点主要包括以下几个方面: (1) 利用BIOS调用中INT 16H调用中的子程序完成清屏、设置显示方式、设置窗口等操作。(2) 利用INT 21H DOS系统功能调用中的键盘输入接收十进制操作数和运算符由程序完成

5、字符转换为二进制数,并存储起来。(3) 根据运算符完成运算,由程序在屏幕上显示运算结果。1、 十进制数转换为二进制数过程如下:(1) 将BX清0.(2) 从键盘接收一个按键的ASCII送AL中,并判断是否为0到9之间的字符,若不是转退出;否则将AL中内容减30H,转换为相应数字的二进制数,并扩展到AX中,然后将BX中内容乘以10后,再加上AX中的内容。(3) 转(2)继续执行因此程序退出后,BX中的内容即为所输入十进制数的二进制值。例如:首先将BX清0后,先输入数字“5”,则(AL)=35H,属于0到9之间的数字,减30H后,(AL)=05H,扩展后,(AX)=0005H,BX乘以10后,加上

6、AX中的内容,(BX)=0005H。然后输入数字“8”,则(AL)=38H,属于0到9 之间的数字,减30H后,(AL)=38H,扩展后,(AX)=0008H,(BX)乘以10后,加上AX中的内容,(BX)=0037H,为十进制数“58”的二进制值。十进制数显示过程如下(被显示的数据9999):(1)将被显示的内容送入BX中;(2)BX除以1000,余数送BX,商在AL中,范围为09;(3)显示AL中的内容;(4)(BX)除以100,余数送BX,商在AL中,范围为09;(5)显示AL中的内容。以此类推,直到分离出个位数字为止。在这里有一个特殊问题需要讨论:例如“53”这个十进制数,除以1000

7、除以100的商都为0,不应显示。为了能够实现高位的“0”不显示,程序中设置一个标志M,初始值都设置为1。若M=1且商为0,则这个0不现实;若M=1且商不为0,则说明这是第一个非0数字,开始显示,并将M设置为0;若M=0,则商值都显示。如果结果本身就是0,则个位的0显示。二、 基本理论本次汇编语言课程设计的最终目的是要实现一个简单计算器,要求编写一个程序,每运行一次可执行程序,可以实现数的加减乘除四则运算。比如,十进制数的加减乘除四则运算。我们曾经学习过两个具体数字进行加减法运算,但是对于简单计算器用汇编语言实现难点在于这两个要做运算的数是未知的,是由自己调用中断输入到屏幕上并要用程序存储起来的

8、数,然后才能对这两个数进行运算,而且做的是加法运算、减法运算乘法运算还是除法运算也未可知,为此我们还要判断用户所输入的运算是四则运算中的哪一个运算。首先我们要解决的是输入问题,这里我们用INT 21H的一号功能调用来进行输入;然后我们要进行的是判断是进行何种运算,当输入的运算符号不是“+、-、*、”中的一种时,则报错,提示重新输入。当输入的是 q或Q时,则清屏。 由于运算过程中出现的进借位问题,会导致输出的结果为一位数,二位数,或者是负数,所以在选择输出的方式时功能调用会很不方便,因为功能调用要求有一个输出字符的缓冲区,由于输出的结果形式太多,缓冲区太难确定,而且若结果为负数,负号也得事先进行

9、设置,所以单字符输出是一个合理的选择。 最后还要对这个简易计算器进行功能完善,例如为了使程序符合我们使用者的操作习惯,我们可以添加按回车键换行输入,即当键入回车键后,可以换行重新输入;可以设置按Q或q键清屏。三、 总体设计3.1本程序的功能结构图如图3-1: 图 3-1 功能结构图程序设计流程图该程序流程图简要地表现出了所要实现的功能以及一些功能的大概算法,同时也是我编写的程序的一个总体的框架。 通过流程图,可以看出程序开始运行时,首先输出提示语句,再输入字符,并判断输入的字符是否为Q或q,若是,则清屏重新输入,否则继续输入;判断输入的是不是回车键,若是就回车换行输入,不是则继续输入;判断输入

10、的是否为09,+,-,=这些字符,若不是会报错,是则将其存储到定义的数据区BX里面,再判断如果输入的不是=功能键,则继续输入,若是,则判断是做加法运算还是减法运算,最后输出结果,并重新输入,继续上面的步骤。3.2字符输入及存储设计 利用INT 21H的1号中断一个一个地输入字符,并将输入地字符和Q,q比较,如果相等则清屏并重新输入,不等就判断输入的字符是否为0DH即回车键对应的ASCII码值,再看输入的是否为09,+,-,=这几个字符,若是则存储,若不是就在屏幕上输出错误提示,程序如下: CHAR PROC NEAR MOV BX,0NEWCHAR: MOV AH,01H INT 21H ;通

11、过键盘输入一个十进制数 CMP AL,30H JL EXIT CMP AL,39H JG EXIT ;输入字符不在0-9之间,转结束 SUB AL,30H ;否则减30H,将ASCII转化为二进制数 MOV AH,0 ;扩展至AX中 XCHG AX,BX MOV CX,10 MUL CX XCHG AX,BX ADD BX,AX ;完成(BX)10+AX,结果送入BX中 JMP NEWCHAR ;转NEWCHAREXIT: RETCHAR ENDP3.3加、 减、乘、除法运算的判断设计 由于输入字符的格式固定为两位数加两位数的格式,则只需把存在BUF数据区的第三个字符提出来并与加号的ASCII

12、码值进行比较即可判断为加法过算还是减法运算了,若相等则为加法过算不等则为减法运算,具体程序实现如下:ADD_TO PROC NEAR CALL CHAR ;调子程序CHAR,完成第一个运算转换 MOV X,BX ;第一个数送X单元中 CMP AL,2DH JZ MINU ;运算符=“-”,转MINU,执行减法 CMP AL,2AH JZ MUL_ ;运算符=“*”,转MUL_,执行乘法 CMP AL,2FH JZ DIV_ ;运算符=“,转DIV_,执行除法 CMP AL,51H JZ EXIT8 ;(AL)=“Q”,转EXIT8 CALL CHAR ;否则调子程序CHAR,输入第2个数 CA

13、LL CR_ ;调子程序CR_,显示“=” MOV Y,BX ADD BX,X ;执行加法运算,结果送入BX中 JMP TO_ ;转TO_3.4加、 减、乘、除法运算的设计MINU: CALL CHAR ;调子程序CHAR,输入第2个数 CALL CR_ ;调子程序CR_,显示“=” MOV Y,BX ;第二个数送入Y单元 MOV BX,X CMP BX,Y ;被减数减数,转T_ JL T_ SUB BX,Y ;否则完成X减Y,结果送入BX中 JMP TO_ ;转TO_,显示运算结果MUL_: CALL CHAR ;调子程序CHAR,输入第2数 CALL CR_ ;调子程序CR_,显示“=”

14、MOV Y,BX ;第二个数送入Y单元 MOV AX,X MUL Y ;完成X*Y MOV BX,AX ;结果送入BX中 JMP TO_ ;转TO_,显示运算结果DIV_: CALL CHAR ;调子程序CHAR,输入第2数 CALL CR_ ;调子程序CR_,显示“=” MOV Y,BX ;第二个数送入Y单元 MOV DX,0 MOV AX,X DIV Y ;完成XY MOV BX,AX ;结果送入BX中 JMP TO_ ;转TO_,显示运算结果T_: MOV DL,2DH MOV AH,02H INT 21H ;显示“-” MOV BX,Y SUB BX,X ;完成Y-X,结果送入BX中T

15、O_: CALL BIN ;调BIN,显示运算结果四、 实验器材1. 硬件环境:微型计算机(Intel x86系列CPU)一台 2. 软件环境:Windows982000XP操作系统 任意一种文本编辑器(EDIT、NOTEPAD(记事本)、UltraEDIT等) 汇编程序(MASM.EXE) 连接程序(LINK.EXE) 调试程序(DEBUG.EXE) 文本编辑器建议使用EDIT或NOTEPAD,汇编程序建议使用MASM.EXE,连接程序建议使用LINK.EXE,调试程序建议使用DEBUG.EXE。五、 方法步骤1、用EDIT建立汇编语言源程序2、用MASM汇编生成目标文件3、用LINK进行连

16、接生成可执行文件4、程序的运行六、 成效分析6.1运行界面分析图6.1-1 运行界面图6.1-2 清零界面图6.1-3程序运算状态界面6.2 调试过程及分析图6.2-1出现错误截图界面图6.2-2无误截图界面图6.2-3 LINK链接生成可执行文件截图界面七、 心得体会一周的课程设计结束了,本次课程设计让我有不少收获,给我的总体感觉就是忙碌而充实,真正学到了东西。加深的对汇编语言的认识;在以往的几周上机实验中,对汇编语言源程序的编辑、汇编、连接和调试的过程帮助我在这次的实训中对程序的编译,链接更加熟练;在不断地求解过程中,更进一步的了解到了汇编语言的一些特点,感觉到汇编语言的执行效率非常高。从

17、构思到设计流程图到编写源程序都是一个人独立完成,这次虽然在网上没有搜到什么资料,但是我还是学会了更好地利用资源身边的老师,同学以及学长都在我编程的过程中给了我很多很好的建议,而书本是我最好的帮手,有任何编程细节不太清楚的,我就去翻书,一般都能在书中找到答案。本次课程设计的成功完成,我首先感谢我的指导老师周曦,在他悉心指导下我们才能顺利完成本次课程设计中的每一个计划。在这次课程设计中,无论从课题选择,方案论证上,还是到具体的设计和调试,每一项安排他都提出了很好的建议,使我们少走了许多弯路,节省了大量时间,在要向周曦老师表示深深的感谢。八、 参考文献1荆淑霞主编.微机原理与汇编语言程序设计 清华大

18、学出版社;北京交通大学出版社,2005.92 荆淑霞主编.微机原理与汇编语言程序设计习题解答、实验指导和实训 中国水利水电出版社,20063王爽等编.汇编语言.北京:清华大学出版社,2003.54曹加恒等编.新一代汇编语言课程设计.北京:高等教育出版社,2003.65杨路明等编.汇编语言程序设计.长沙:中南大学出版社,2005.86詹仕华等编.汇编语言程序设计.北京:中国电力出版社,2008.27詹仕华等编.汇编语言程序设计习题解答及课程设计、设计辅导.北京:中国电力出版社,2008.28宋彩莉等编.汇编语言程序设计学习指导.西安:西安交通大学出版社,2008.2附录源程序STACK SEGM

19、ENT STACK DB 50H DUP(?)STACK ENDSDATA SEGMENT X DW ? Y DW ? M DB ? MESS DB ,0AH,0DH,$DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATA MOV DS,AX ;程序初始化 CALL CUR ;调程序完成屏幕初始化并显示边框POS_CURSE: MOV AH,02H MOV DH,9 MOV DL,44 MOV BH,0 INT 10H ;光标定位在9行44列 MOV DX,OFFSET MESS MOV AH,09H I

20、NT 21H ;显示字符串 MOV AH,02H MOV DH,8 MOV DL,30 MOV BH,0 INT 10H ;光标定位在8行30列 MOV AH,06H MOV AL,1 MOV CH,5 MOV CL,30 MOV DH,8 MOV DL,50 MOV BH,7 INT 10H ;屏幕上卷 MOV M,1 CALL ADD_TO ;调ADD_TO子程序,完成表达式输入 CMP AL,51H ;输入“Q”,结束程序 JZ EXIT1 JMP POS_CURSEEXIT1: MOV AH,4CH INT 21H;子程序名:ADD_TO;功能:完成键盘输入并转换;入口参数:无;出口参

21、数:(AL)=输入非数字字符的ASCII码ADD_TO PROC NEAR CALL CHAR ;调子程序CHAR,完成第一个运算转换 MOV X,BX ;第一个数送X单元中 CMP AL,2DH JZ MINU ;运算符=“-”,转MINU,执行减法 CMP AL,2AH JZ MUL_ ;运算符=“*”,转MUL_,执行乘法 CMP AL,2FH JZ DIV_ ;运算符=“,转DIV_,执行除法 CMP AL,51H JZ EXIT8 ;(AL)=“Q”,转EXIT8 CALL CHAR ;否则调子程序CHAR,输入第2个数 CALL CR_ ;调子程序CR_,显示“=” MOV Y,B

22、X ADD BX,X ;执行加法运算,结果送入BX中 JMP TO_ ;转TO_MINU: CALL CHAR ;调子程序CHAR,输入第2个数 CALL CR_ ;调子程序CR_,显示“=” MOV Y,BX ;第二个数送入Y单元 MOV BX,X CMP BX,Y ;被减数减数,转T_ JL T_ SUB BX,Y ;否则完成X减Y,结果送入BX中 JMP TO_ ;转TO_,显示运算结果MUL_: CALL CHAR ;调子程序CHAR,输入第2数 CALL CR_ ;调子程序CR_,显示“=” MOV Y,BX ;第二个数送入Y单元 MOV AX,X MUL Y ;完成X*Y MOV

23、BX,AX ;结果送入BX中 JMP TO_ ;转TO_,显示运算结果DIV_: CALL CHAR ;调子程序CHAR,输入第2数 CALL CR_ ;调子程序CR_,显示“=” MOV Y,BX ;第二个数送入Y单元 MOV DX,0 MOV AX,X DIV Y ;完成XY MOV BX,AX ;结果送入BX中 JMP TO_ ;转TO_,显示运算结果T_: MOV DL,2DH MOV AH,02H INT 21H ;显示“-” MOV BX,Y SUB BX,X ;完成Y-X,结果送入BX中TO_: CALL BIN ;调BIN,显示运算结果EXIT8: RET ;子程序名:CR_;

24、功能:显示一个“=”;入口参数:(AL)中为输入按键的ASCII码;出口参数:无 CR_ PROC NEAR CMP AL,0DH JNZ ESC_ ;(AL)0DH,转ESC MOV AH,02H MOV DH,8 MOV DL,46 MOV BH,0 INT 10H ;光标定位在8行46列,显示一个“=” MOV DL,3DH MOV AH,02H INT 21HESC_: RETCR_ ENDP;子程序名:CHAR;子程序功能:接收键盘输入的十进制数,转换为二进制;入口参数:无;出口参数:(BX)中存放转换的二进制结果,(AL)存放输入的非十进制数的ASCII码CHAR PROC NEA

25、R MOV BX,0NEWCHAR: MOV AH,01H INT 21H ;通过键盘输入一个十进制数 CMP AL,30H JL EXIT CMP AL,39H JG EXIT ;输入字符不在0-9之间,转结束 SUB AL,30H ;否则减30H,将ASCII转化为二进制数 MOV AH,0 ;扩展至AX中 XCHG AX,BX MOV CX,10 MUL CX XCHG AX,BX ADD BX,AX ;完成(BX)10+AX,结果送入BX中 JMP NEWCHAR ;转NEWCHAREXIT: RETCHAR ENDP;子程序名:BIN;子程序功能:将BX中的数据以十进制显示在屏幕上;

26、入口参数:(BX)=被显示数据;出口参数:无BIN PROC NEAR MOV CX,10000 CALL DEC_DIV MOV CX,1000 CALL DEC_DIV MOV CX,100 CALL DEC_DIV MOV CX,10 CALL DEC_DIV MOV CX,1 CALL DEC_DIV1 RETBIN ENDP;子程序名:DEC_DIV;子程序功能: BX中的内容除以CX中的内容,显示AL中的结果;入口参数:(BX)=被除数,(CX)=除数;出口参数:(BX)=余数DEC_DIV PROC NEAR MOV AX,BX ;被除数送入AX中 MOV DX,0 ;扩展至DX

27、,AX中 DIV CX ;除以CX中的内容 MOV BX,DX ;余数送入BX中 CMP M,0 JZ TO1_ ;标志变量M=0,转TO1_ CMP AL,0 ;否则AL=0,转TO2_ JZ TO2_TO1_: MOV DL,AL ADD DL,30H MOV AH,02H INT 21H ;显示AL中的内容 MOV AL,0 MOV M,AL ;标志变量送0TO2_: RETDEC_DIV ENDP; -DEC_DIV1 PROC NEAR MOV AX,BX MOV DX,0 DIV CX MOV BX,DX MOV DL,AL ADD DL,30H MOV AH,02H INT 21

28、H RETDEC_DIV1 ENDP;BIN ENDPADD_TO ENDP; -CUR PROC NEAR MOV AH,6 MOV AL,0 MOV CH,0 MOV DH,24 MOV DL,79 MOV BH,7 INT 10H ;屏幕初始化 MOV AH,2 MOV BH,0 MOV DH,4 MOV DL,25 INT 10H ;光标定位在4行25列 MOV AH,9 MOV AL,* MOV BH,0 MOV BL,9 MOV CX,30 INT 10H ;显示1行“*”;* MOV AH,2 MOV BH,0 MOV DH,10 MOV DL,25 INT 10H ;光标定位在

29、10行25列 MOV AH,9 MOV AL,* MOV BH,0 MOV CX,30 INT 10H ;显示1行“*”;* MOV DH,4 CALL A CALL A CALL A CALL A CALL A CALL A ;调子程序,显示左边框“*”;* MOV DH,4 CALL B CALL B CALL B CALL B CALL B CALL B ;调子程序,显示右边框“*” RETCUR ENDP;*A PROC NEAR MOV AH,2 MOV BH,0 INC DH MOV DL,25 INT 10H MOV AH,9 MOV AL,* MOV BH,0 MOV BL,9 MOV CX,1 INT 10H RETA ENDP;*B PROC NEAR MOV AH,2 MOV BH,0 INC DH MOV DL,54 INT 10H MOV AH,9 MOV AL,* MOV BH,0 MOV BL,9 MOV CX,1 INT 10H

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1