版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、武汉理工大学微机原理课程设计说明书11目录1 总体方案论证总体方案论证.22 程序流程图及其说明程序流程图及其说明.32.1 程序流程图.32.2 流程图说明.53 软件设计软件设计.53.1 字符输入及存储设计.53.2 加减法运算的判断设计.63.3 加减法运算的设计.73.3.1 数据的提取.73.3.2 加法运算.73.3.3 减法运算.93.4 结果输出设计.124 程序调试程序调试.125 心得体会心得体会.14参考文献参考文献.15附录附录.15武汉理工大学微机原理与接口技术课程设计说明书22简易计算器汇编语言程序设计简易计算器汇编语言程序设计1 总体方案论证总体方案论证该课程设
2、计的任务是做一个简易计算器,可以对两个二位数进行加法和减法运算,例如 11+23=34。我们平常的学习中做过给出两个数进行加减法运算的题目,但是这个题目难点在于这两个要做运算的数未知,是由自己调用中断输入到屏幕上并要用程序存储起来的数,然后才能对这两个二位数进行运算,而且做的是加法运算还是减法运算也未知,所以我们还要判断这个运算为加法运算还是减法运算。另外运算过程中的进位借位,选择什么方式进行输出,如何实现清屏等也是要解决的问题。首先我们要解决的是输入时是用 INT 21H 的 10 号功能调用还是用 INT 21H的 1 号功能调用来进行输入。若是用 10 号功能调用则我们进行多字符输入,可
3、以将输入的字符都存储到一个数据区里面,并调用 9 号功能调用输出存进去的字符,这种输入和输出的方案是可行的。我选择的是利用 1 号功能调用来输入,即把单个字符一个个的输入并存储到一个数据区里。我们要做的是两个二位数的运算,先认定输入的格式为 ab+cd=或者 ab-cd=,当然如果输入不是这样的格式计算出来的结果就不一定是我们想要的结果了。在存储的时候也是有选择的存储,当输入的并非格式里所要求的字符时则报错。然后我们要判断是做加法运算还是减法运算,即判断输入的运算符是+号还是-号,因为输入的格式固定了,所以只需要把存进数据区的第三个字符拿来和+号进行比较,若相等则进行加法运算,若不等则为减法运
4、算。在进行运算的过程中会想到到底如何对存进数据区的数据进行提取来作运算,一种方案是将+号或-号之前的两位数提取出来,当然要做一个10a+b 的换算,同理将后两位按照这种方式提取出来,最后进行运算。因为考虑到这种方式在运算时个位或十位进位或者借位的情形比较麻烦,所以我想到了把两个二位数的十位提取出来进行运算存到一个数据区里,个位也同时提取出来进行运算并存到该数据区,在这里把十位和个位拆开来进行运算再考虑进借位时就方便些,并且输出的时候也比较方便。大致地数据提取和运算如图 1所示武汉理工大学微机原理与接口技术课程设计说明书33=b+/- cdaBUFBUF+4BUF+3BUF+2FBUF+1BUF
5、+5运算存储输出运算存储输出 图 1 数据的提取运算示意图由于运算过程中出现的进借位问题,会导致输出的结果为一位数,二位数,三位数或者是负数,所以在选择输出的方式时若是选 9 号功能调用会很不方便,因为 9 号功能调用要求有一个输出字符的缓冲区,由于输出的结果形式太多,缓冲区太难确定,而且若结果为负数,负号也得事先进行设置,所以单字符输出是一个合理的选择。最后还要对这个简易计算器进行功能完善,例如为了使程序符合我们使用者的操作习惯,我们可以添加按回车键换行输入,即当键入回车键后,可以换行重新输入;可以设置按 C 或 c 键清屏,当键入 C 或 c 键时,清除整个屏幕上的输入和输出的字符并可以重
6、新输入并运算;当按下 Q 或 q 键退出程。2 程序流程图及其说明程序流程图及其说明2.1 程序流程图程序流程图武汉理工大学微机原理与接口技术课程设计说明书44开始输入一个字符Q/q?09+-=?存储到 BUF=?BUF+1出错BUF+2=+?输出结果(考虑输出为一,二,三位数及负数的情况)清屏NYNYNYNNSI提取两加数的十位数并相加(考虑进位)SI+1提取两加数的个位数相加(考虑进位) 输出提示语句SI提取减数和被减数数的十位数相减(考虑借位)SI+1提取减数和被减数数的个位数相减(考虑借位)Y结束C/c?Y0DH?换行NYN武汉理工大学微机原理与接口技术课程设计说明书552.2 流程图
7、说明流程图说明 该程序流程图简要地表现出了所要实现的功能以及一些功能的大概算法,同时也是我编写的程序的一个总体的框架。通过流程图,可以看出程序开始运行时,首先输出提示语句,再输入字符,并判断输入的字符是否为 Q 或 q,若是,则退出,不是则继续输入;判断输入的字符是否为 C 或 c,若是,则清屏重新输入,否则继续输入;判断输入的是不是回车键,若是就回车换行输入,不是则继续输入;判断输入的是否为09,+,-,=这些字符,若不是会报错,是则将其存储到定义的数据区 BUFF里面,再判断如果输入的不是=功能键,则继续输入,若是,则判断是做加法运算还是减法运算,最后输出结果,并重新输入,继续上面的步骤。
8、3 软件设计软件设计3.1 字符输入及存储设计字符输入及存储设计 利用 INT 21H 的 1 号中断一个一个地输入字符,并将输入地字符和 Q,q比较,若相等则退出程序,不等则与 C,c 比较,如果相等则清屏并重新输入,不等就判断输入的字符是否为 0DH 即回车键对应的 ASCII 码值,再看输入的是否为 09,+,-,=这几个字符,若是则存储,若不是就在屏幕上输出错误提示,程序如下: START1: MOV AH,1 ;输入字符 INT 21H CMP AL,Q ;输入为 Q 或 q 时退出程序 JZ EXIT CMP AL, q JZ EXIT CMP AL,C ;输入为 C 或 c 时清
9、屏 JZ QINGPING CMP AL,c武汉理工大学微机原理与接口技术课程设计说明书66 JZ QINGPING CMP AL,0DH ;输入回车键时,换行重新输入 JZ HUANHANG CMP AL,+ ;输入的字符不为+,-,=,0到 9 的字符时则报错,并重新换行输入,是则存储 JNZ LOOP1 JMP CUNCHULOOP1: CMP AL,- JNZ LOOP3 JMP CUNCHU LOOP2: CMP AL,0 JB ERROR CMP AL,9 JA ERROR SUB AL,30H JMP CUNCHU LOOP3: CMP AL,= JZ LOOP4 JMP LOO
10、P23.2 减法运算的判断设计减法运算的判断设计由于输入字符的格式固定为两位数加两位数的格式,则只需把存在 BUF 数据区的第三个字符提出来并与加号的 ASCII 码值进行比较即可判断为加法过算还是减法运算了,若相等则为加法过算不等则为减法运算,具体程序实现如下:武汉理工大学微机原理与接口技术课程设计说明书77 PANDUAN: ;判断为加法还是减法运算 CMP BYTE PTRBX+2, + JZ JIAFA ;结果为零则为加法运算 JMP JIANFA ;结果不为零则为减法运算3.3 加减法运算的设计加减法运算的设计3.3.1 数据的提取数据的提取可以将两个数的十位数提取出来作运算并存储到
11、一个数据区里,然后将两个数的个位数提取出来作运算存储到该数据区,如下程序段落所示为把两数的十位数分别取出LEA BX,BUF MOV DL,BYTE PTRBX ;提取两个数的十位的数据 MOV AL,BYTE PTRBX+3 同理,把两个数的个位数提取出来,如下 MOV DL,BYTE PTRBX+1 ;提取两个数的个位的数据 MOV AL,BYTE PTRBX+43.3.2 加法运算加法运算 判断为加法运算并分别提取加数和被加数个位数和十位数之后,就要进行运算了,因为要虑到运算过程中的进位,如个位进位以及十位进位,还要考虑到结果为两位数或三位数的输出情况,所以在运算时要分别判断个位是否进位
12、,进位则进行个位进位调整,十位是否进位,进位则进行十位进位调整。具体程序实现如下: JIAFA: LEA BX,BUF MOV DL,BYTE PTRBX+1 MOV AL,BYTE PTRBX+4 ADD AL,DL CMP AL,10武汉理工大学微机原理与接口技术课程设计说明书88 JAE TZ1ADD AL,30H MOV SI+1, ALMOV DL, BYTE PTRBX MOV AL,BYTE PTRBX+3JMP BACK1BACK1: ADC AL,DL CMP AL,10JAE TZ10 ADD AL,30H MOV SI, AL JC DATA3 JMP DATA2BACK
13、10: MOV SI, ALJC DATA3JMP DATA2TZ10: SUB AL,10 ;十位相加有进位的处理 ADD AL,30H STC JMP BACK10TZ1: SUB AL,10 ;个位相加有进位的处理ADD AL,30HMOV SI+1 ,AL MOV DL, BYTE PTRBX MOV AL,BYTE PTRBX+3 INC AL JMP BACK1武汉理工大学微机原理与接口技术课程设计说明书993.3.3 减法运算减法运算判断为减法运算并分别提取减数和被减数个位数和十位数之后,就要进行减法运算了,减法运算时比较复杂,要考虑个位的借位,十位的借位,以及结果为正数时两位数
14、和一位数结果的输出同时还要考虑到结果为负数时输出,结果为一位数的负数输出和结果为两位数的负数输出几种情况。首先我们将减数和被 减数的十位进行比较,如果减数的十位数字大于被减数的十位数则结果为正数,若小于则为负数,若相等再比较个位数的大小,在结果为正数的情况下考虑输出为一位数还是两位数,若有借位则进行相应的调整;在结果为负数的情况下,考虑输出为一位数还是两位数,同样要对产生借位的进行处理;若十位数相等则考虑输出结果为零或正的一位数及负的一位数。具体的程序如下:JIANFA: LEA BX,BUF MOV DL,BYTE PTRBX ;提取被减数和减数十位的数据 MOV AL,BYTE PTRBX
15、+3 CMP AL,DL JZ COMP1 JA FU JMP ZHENG ZHENG: LEA SI,JIEGUO ;结果为正数的运算 LEA BX,BUF MOV DL,BYTE PTRBX+1 ;提取被减数和减数个位的数据 MOV AL,BYTE PTRBX+4 CMP DL,AL JB JIEWEI1 SUB DL,AL MOV AL,DL ADD AL,30H MOV SI+1, AL MOV DL,BYTE PTRBX ;提取被减数和减数十位的数据 MOV AL,BYTE PTRBX+3武汉理工大学微机原理与接口技术课程设计说明书1010 JMP SUB1SUB1: SUB DL,
16、AL MOV AL,DL ADD AL,30H MOV SI, AL CMP AL,0 JZ DATA1 JMP DATA2JIEWEI1: ;借位处理 ADD DL,10 SUB DL,AL MOV AL,DL ADD AL,30H MOV SI+1, AL MOV DL,BYTE PTRBX ;提取被减数和减数十位的数据 MOV AL,BYTE PTRBX+3 SUB DL,1 JMP SUB1COMP1: LEA SI,JIEGUO LEA BX,BUF MOV DL,BYTE PTRBX+1MOV AL,BYTE PTRBX+4 CMP AL,DL JZ ZERO JA FU1 JB
17、ZHENG1ZHENG1: SUB DL,ALMOV AL,DL ADD AL,30H MOV SI+1, AL武汉理工大学微机原理与接口技术课程设计说明书1111 JMP DATA1FU1: SUB AL,DL ADD AL,30H MOV SI+1, AL JMP FUSHU1FU: LEA SI,JIEGUO ;结果为负数的运算 LEA BX,BUF MOV DL,BYTE PTRBX+1 MOV AL,BYTE PTRBX+4 CMP AL,DL JB FU_1 SUB AL,DL ADD AL,30H MOV SI+1, AL MOV DL,BYTE PTRBX MOV AL,BYT
18、E PTRBX+3SUB2: SUB AL,DL ADD AL,30H MOV SI, AL CMP AL,30H JZ FUSHU1 JMP FUSHU2FU_1: ;借位处理 ADD AL,10 SUB AL,DL ADD AL,30H MOV SI+1, AL MOV DL,BYTE PTRBX ;提取被减数和减数十位的数据 MOV AL,BYTE PTRBX+3 SUB AL,1武汉理工大学微机原理与接口技术课程设计说明书1212 JMP SUB2 3.4 结果输出设计结果输出设计最终结果的输出采用的是 INT 21H 的 9 号功能调用,考虑到输出结果的形式很复杂,所以对于输出的结果
19、分了好几种情况,例如结果为正数时的一位,二位,三位数的输出,结果为负数时的一位,二位输出以及零的输出几种情况,尤其是对于三位数的输出和负数的输出,可以分别在结果前面直接加一个1和一个-号。具体的程序见附录4 程序调试程序调试 运行程序后,进入程序运行初始界面,会有一个作两位数加减法运算,输入等号后才输出结果的提示语句,如图 1 图 1 程序运行初始界面 不是 09,+,-,=号时,例如输入一个 w,程序会有报错提示,并提示重新输入,运行界面如图 2 所示 图 2 出错并重新运行界面当两个数运算无进位和借位时,一共有三种可能的情况,作加法运算时个位和十位均无进位,以及减法过算时个位和十位均无借位
20、且输出为一位数和两位数的情况,运行结果如图 3 所示 图 3 没有进借位的运行界面武汉理工大学微机原理与接口技术课程设计说明书1313经检验,这三种可能情况下的所有运行结果都正确 当两个数运算个位有进借位时,其运行情况如图 4 所示,有加法和减法运算个位进借位的两种情况。 图 4 个位有进借位的运行界面经检验运行后程序输出的结果正确 当两个数运算十位有进借位时,若是加法运算即结果一定是三位数,且百位为 1 的情况,加是减法运算,则分输也为一位和两位的两种情况,程序的运行界面如图 5 图 5 十位有进借位的运行界面经检验运行后程序输出的结果正确当两个数运算个位和十位均有进借位时一共有如下三种情形
21、,其运行界面如图 6 所示 图 6 个位和十位均有进借位的运行界面经检验所有输出结果都正确当输入 C 或 c 时则清屏,程序运行后清除整个窗口内输入和输出的字符并可以继续输入并计算。如图 7 所示武汉理工大学微机原理与接口技术课程设计说明书1414图 7 清屏后的运行界面经调试,基本上任务要求设计的所有功能都实现,调试出的计算结果均正确5 心得体会心得体会两周的课程设计结束了,给我的总体感觉就是忙碌但充实,而且真正学到了东西。以前做课程课计的时候总是前几天时间玩,后面几天才开始做,不过这次却是一直都在做这个课程设计,因为在网上我根本搜不到别人写的简易计算机的资料,所以从构思到设计流程图到编写源
22、程序都是我一个人独立完成的,虽然这个过程比较痛苦,但是我真正的去体验了,当我编写的程序一遍一遍地报错,出的结果一次次和正确结果有出入的时候我真的好想放弃,但是我选择了坚持,通过调试程序,一步步地看寄存器和数据区的变化,最终发现了错误并改正了错误,当运行的结果全都正确的时候我真的好激动,好有成就感,因为这是我第一次自己独立地编写的长达两百多条的程序,虽然结构看上去有点乱,语句不够精练,但是不管怎样,我终于能够实现要求的功能了。这次虽然在网上没有搜到什么资料,但是我还是学会了更好地利用资源身边的高手,研究生学长,还有课本。身边的高手以及学长都在我编程的过程中给了我很多很好的建议,让我在山重水复疑无
23、路时,突然柳暗花明又一村。而书本是我最好的帮手,有任何编程细节不太清楚的,我就去翻书,一般都能在书中找到答案,所以我认为万变不离其宗这句话是很正确的,不管老师给我们的任务如何难或复杂,也都是由书本上介绍的一条条简单的程序构成的,例如我的程序虽然长,有两百多条语句,但是却可以将其拆分成多个小块,每个小块其实都是一个最基础的小程序,并能实现一个功能,最后组合起来就实现了任务要求的比较复杂的功能了。另外,这次无论是设计个这程序还是写课程设计报告都让我学到了好多东西,有对课本知识更加深入的了解和掌握,也有对于流程图的设计以及绘制还有 word 的一些用法和排版等,都让我受益匪浅,武汉理工大学微机原理与
24、接口技术课程设计说明书1515总之,非常感谢学校和老师给我们安排了这次课程设计,不仅让我掌握了更多的知识,还让我领会到要把一件事情做好并真正有所收获还得靠自己独立地去完成并坚持不懈!希望在以后的学习中还能多搞几次这种课程设计。参考文献1 周佩玲、彭虎、傅忠谦.微机原理与接口技术(基于 16 位机). 北京:电子工业出版社.,2005 2 马春燕.微机原理与接口技术(基于 32 位机)实验与学习辅导. 北京:电子工业出版社.,20073 何小海、严华. 微机原理与接口技术.北京:科学出版社,20064 钱晓捷. 新版汇编语言程序设计. 北京:电子工业出版社,20075 黄海萍. 汇编语言与微机接
25、口技术实验教程. 北京:国防工业出版社. 2007武汉理工大学微机原理与接口技术课程设计说明书1616附录附录完整的程序代码如下:DATADATA SEGMENTSEGMENT BUFF DBDB 6 DUPDUP(?) JIEGUO DBDB 3 DUPDUP(?) COUNT EQUEQU 6 TISHI DBDB The addition and subtraction operations of two two-digit,0DH,0AH,Input =,then output the result:,0DH,0AH,$ ERROR1 DBDB 0DH,0AH,Input error!
26、,0DH,0AH,Please input again!,0DH,0AH,$ HUICHE DBDB 0DH,0AH,$ TUICHU DBDB Please press any key to continue!,$ DATADATA ENDSENDS CODECODE SEGMENTSEGMENT ASSUMEASSUME CS:CODECODE,DS:DATADATA STARTSTART: MOV AX,DATADATA MOV DS,AX LEA DX,TISHI MOV AH,9 INT 21H LEA SI,JIEGUO LEA BX,BUFF武汉理工大学微机原理与接口技术课程设计
27、说明书1717 START1: MOV AH,1 INT 21H CMP AL,Q ;输入为Q或q时退出程序 JZ EXIT CMP AL, q JZ EXIT CMP AL,C ;输入为C或c时清屏 JZ QINGPING CMP AL,c JZ QINGPING CMP AL,0DH ;输入回车键换行重新输入 JZ HUANHANG CMP AL,+ ;输入的字符不为+,-,=,0到9的字符时,则报错,并重新换行输入,是则存储 JNZ LOOP1 JMP CUNCHU HUANHANG: LEA DX, HUICHE ;实现换行的功能 MOV AH,9 INT 21H JMP START1
28、 ERROR: LEA DX,ERROR1 MOV AH,9 INT 21H JMP START1 CUNCHU: ;对输入的字符进行存储 MOV BX,AL武汉理工大学微机原理与接口技术课程设计说明书1818 INC BX JMP START1 LOOP1: CMP AL,- JNZ LOOP3 JMP CUNCHU LOOP2: CMP AL,0 JB ERROR CMP AL,9 JA ERROR SUB AL,30H JMP CUNCHU LOOP3: CMP AL,= JZ LOOP4 JMP LOOP2 LOOP4: ;判断为加法还是减法运算 XOR BX,BX LEA BX,BU
29、FF MOV CX,COUNT PANDUAN: CMP BYTE PTRBX+2, + JZ JIAFA JMP JIANFA JIAFA: LEA BX,BUFF MOV DL,BYTE PTRBX+1 ;提取两个加数个位的武汉理工大学微机原理与接口技术课程设计说明书1919数据 MOV AL,BYTE PTRBX+4 ADD AL,DL CMP AL,10 JAE TZ1 ADD AL,30H MOV SI+1, AL MOV DL, BYTE PTRBX ;提取两个加数十位的数据 MOV AL,BYTE PTRBX+3 JMP BACK1 BACK1: ADC AL,DL CMP AL
30、,10 JAE TZ10 ADD AL,30H MOV SI, AL JC DATA3 JMP DATA2 BACK10: MOV SI, AL JC DATA3 JMP DATA2 TZ10: SUB AL,10 ;十位相加有进位的处理 ADD AL,30H STC JMP BACK10 TZ1: SUB AL,10 ;个位相加有进位的处理 ADD AL,30H武汉理工大学微机原理与接口技术课程设计说明书2020 MOV SI+1 ,AL MOV DL, BYTE PTRBX MOV AL,BYTE PTRBX+3 INC AL JMP BACK1 JIANFA: LEA BX,BUFF M
31、OV DL,BYTE PTRBX ;提取被减数和减数十位的数据 MOV AL,BYTE PTRBX+3 CMP AL,DL JZ COMP1 JA FU JMP ZHENG ZHENG: LEA SI,JIEGUO ;结果为正数的运算 LEA BX,BUFF MOV DL,BYTE PTRBX+1 ;提取被减数和减数个位的数据 MOV AL,BYTE PTRBX+4 CMP DL,AL JB JIEWEI1 SUB DL,AL MOV AL,DL ADD AL,30H MOV SI+1, AL MOV DL,BYTE PTRBX ;提取被减数和减数十位的数据 MOV AL,BYTE PTRBX
32、+3武汉理工大学微机原理与接口技术课程设计说明书2121 JMP SUB1 SUB1: SUB DL,AL MOV AL,DL ADD AL,30H MOV SI, AL CMP AL,0 JZ DATA1 JMP DATA2 JIEWEI1: ;借位处理 ADD DL,10 SUB DL,AL MOV AL,DL ADD AL,30H MOV SI+1, AL MOV DL,BYTE PTRBX ;提取被减数和减数十位的数据 MOV AL,BYTE PTRBX+3 SUB DL,1 JMP SUB1 COMP1: LEA SI,JIEGUO LEA BX,BUFF MOV DL,BYTE P
33、TRBX+1 MOV AL,BYTE PTRBX+4 CMP AL,DL JZ ZERO JA FU1 JB ZHENG1 ZHENG1: SUB DL,AL MOV AL,DL武汉理工大学微机原理与接口技术课程设计说明书2222 ADD AL,30H MOV SI+1, AL JMP DATA1 FU1: SUB AL,DL ADD AL,30H MOV SI+1, AL JMP FUSHU1 FU: LEA SI,JIEGUO ;结果为负数的运算 LEA BX,BUFF MOV DL,BYTE PTRBX+1 MOV AL,BYTE PTRBX+4 CMP AL,DL JB FU_1 SUB AL,DL ADD AL,30H M
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 光伏业务员入职合同(2篇)
- 公费师范生分配合同(2篇)
- 娱乐行业音乐产业平台建设运营方案
- 装饰装修管理制度
- 弱智人士监护协议书范文范本
- 中等职业学校特色专业群项目建设实施方案
- 幼儿园器械合作协议书范文范本
- 起重伤害专项应急预案
- 福建师范大学《编程基础》2023-2024学年期末试卷
- 2024年贵阳新春灯会元宵彩灯策划方案
- GB/T 23794-2023企业信用评价指标
- 上海市水箱清洗消毒操作规程及方法
- 公共厕所工程报价明细表
- 浙江工商大学论文开题报告PPT模板
- 外贸发票 PI 形式发票模板范例
- nio区域控制器架构与多控制器软件融合的思考
- 螺牙强度校核
- 2023年初中数学教师高级职称考试试题含解析
- 设备部-工作总结及-计划-课件
- 血氧饱和度监测技术操作考核评分标准
- 全文《八五普法》课件全文
评论
0/150
提交评论