- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
微机课程设计报告-计算器的实现(william)
微机课程设计报告
(2010—2011年度第二学期)
名称: 微机课程设计报告_______
学号: 200810314302 _______
学生姓名: _林伟炼_______
导师: 张敏
成绩:______________________
日期:2010年月日
一、课程设计的目的
(1)掌握汇编语言各种基本指令
(2)熟悉DOS系统功能调用方法以及BIOS系统系统功能的调用方法
(3)学会使用MASM汇编软件,并会对程序的开发,并且进行调试以及运行功能
二、课程设计的内容
(1)设计内容
设计一个能实现四则运算的计算器,将键盘输入的表达式预存入一缓冲区内,数值与运算符分开存储,数值存放在数据段中标号为NUM的缓冲区中,而运算符则存放在数据段中标号为MARK的缓冲区中。然后对两个缓冲区的字符进行读取判断,当读到一个有效地表达式时,进行相应的运算后,以十进制数表示运算结果。
(2)目标
要求该程序接受从键盘输入的十六进制数,可执行整数的加减乘除运算,还可实现多括号嵌套运算,计算结果以十六进制输出,以十进制数显示。
(3)设计框架
(4)程序解析
本程序中有两个宏定义,分别为字符串输出DISP、给运算符赋权值CHOICE;三个子程序,分别为四则运算子程序MATCH、定义优先级子程序ADVANCE以及回车换行子程序CR;同时对于输入字符的判断正误,并且附带有帮助文档可供参考。
1.主函数MAIN
在主函数中,运用指令LEA DI,NUMB ; LEA SI,MARK ;将NUMB的偏移地址传送到DI,NUMB存储单元中存放输入的数值;将MARK的偏移地址传送到SI,MARK存储单元中存放输入的运算符输出已定义的字符串。输出数据段定义的字符串,数据寄存器AX、BX、CX、DX清零。当输入的是数字时,SIGN1自动加1,接着进行数值处理;当处理的是运算符号时,则进行括号是否匹配等相关操作;而在输入的过程中,同时会对输入的字符进行判别,如果是无规则字符,则会出错,并且可以通过c进行清除数据,也可以通过h来取得帮助文档,或者通过q退出程序。
2.四则基本运算子函数MATCH
四则运算子函数基本思想是先乘除后加减。对运算符的优先级进行判断,优先级高的,先进行运算。乘除的优先级一样,但高于加减的优先级。当遇到等号时,意味着所有的乘除处理完毕,可以进行加减运算。
3. 定义优先级子程序ADVANCE
定义运算符的优先级,‘(’的优先级为5,‘)’的优先级为1,‘*’、‘/’的优先级为4,‘+’、‘-’的优先级为3,‘=’的优先级为0。定义完毕,则返回。
(5)程序设计的主要思想
1、对输入先进行处理,之后进入数据和运算符处理阶段;
2、判断是否有等号输入,有且表达式为有效输入,则输出结果;不是等号,则判断输入的是运算符还是数值;
3、若为数值,则进行数值转换;
4、若为字符,对字符进行优先级赋值,并且对括号进行相应的匹配操作;
5、配对,则判断优先级;
6、判断是否左括号,有,则判断是否有右括号;
7、有,则对优先级进行比较运算,最终输出结果。
三、心得体会
这门课程在检验我们学习成绩的同时,也检验了我们的学习的效果。用了差不多一周的时间设计能实现四则运算的计算器,其中用到了微机中所学的知识,但在程序运行过程中总是出现这样那样的问题,导致程序错误,例如:程序代码打错,理解错了知识点,对微机内部结构理解不透彻。但在与同学的讨论和请教指导老师的过程中,问题都能一一的被解决。通过这次课程设计,更加深了我对汇编语言的使用技巧。汇编语言作为一种低级语言,编写程序起来很吃力。故选择正确的设计方法尤为重要。这次用了不少时间,也把之前学的x86汇编语言给恰当的应用上,即使会有不少的遗憾和缺陷,但是能够学习到更多有价值有意义的知识,是很不错的了!
附件
程序代码
;-----------------------------------------------------------------------------
;--------------------***数据段定义***-----------------------------------------
DATA SEGMENT
STR1 DB 0AH,0DH, '|---------------------------------------------------|$'
STR2 DB 0AH,0DH, '| |$'
STR3 DB 0AH,0D
文档评论(0)