2022年2022年汇编语言程序设计报告-简易计算器 .pdf
《2022年2022年汇编语言程序设计报告-简易计算器 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年汇编语言程序设计报告-简易计算器 .pdf(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、0 简易计算器汇编语言程序设计1 总体方案论证该课程设计的任务是做一个简易计算器,可以对两个二位数进行加法和减法运算,例如11+23=34。我们平常的学习中做过给出两个数进行加减法运算的题目,但是这个题目难点在于这两个要做运算的数未知,是由自己调用中断输入到屏幕上并要用程序存储起来的数,然后才能对这两个二位数进行运算,而且做的是加法运算还是减法运算也未知,所以我们还要判断这个运算为加法运算还是减法运算。另外运算过程中的进位借位,选择什么方式进行输出,如何实现清屏等也是要解决的问题。首先我们要解决的是输入时是用INT 21H 的 10 号功能调用还是用INT 21H的 1 号功能调用来进行输入。
2、若是用10 号功能调用则我们进行多字符输入,可以将输入的字符都存储到一个数据区里面,并调用 9 号功能调用输出存进去的字符,这种输入和输出的方案是可行的。我选择的是利用 1 号功能调用来输入,即把单个字符一个个的输入并存储到一个数据区里。我们要做的是两个二位数的运算,先认定输入的格式为ab+cd=或者 ab-cd=,当然如果输入不是这样的格式计算出来的结果就不一定是我们想要的结果了。在存储的时候也是有选择的存储,当输入的并非格式里所要求的字符时则报错。然后我们要判断是做加法运算还是减法运算,即判断输入的运算符是+号还是-号,因为输入的格式固定了,所以只需要把存进数据区的第三个字符拿来和+号进行
3、比较,若相等则进行加法运算,若不等则为减法运算。在进行运算的过程中会想到到底如何对存进数据区的数据进行提取来作运算,一种方案是将+号或-号之前的两位数提取出来,当然要做一个 10a+b的换算,同理将后两位按照这种方式提取出来,最后进行运算。因为考虑到这种方式在运算时个位或十位进位或者借位的情形比较麻烦,所以我想到了把两个二名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 21 页 -武汉理工大学微机原理与接口技术课程设计说明书1 位数的十位提取出来进行运算存到一个数据区里,个位也同时提取出来进行运算并存到该数据区,在这里把十位和个位拆开来进行运算再考虑进借位时就方便些,并且输出的时
4、候也比较方便。大致地数据提取和运算如图1 所示图 1 数据的提取运算示意图由于运算过程中出现的进借位问题,会导致输出的结果为一位数,二位数,三位数或者是负数,所以在选择输出的方式时若是选9 号功能调用会很不方便,因为 9 号功能调用要求有一个输出字符的缓冲区,由于输出的结果形式太多,缓冲区太难确定,而且若结果为负数,负号也得事先进行设置,所以单字符输出是一个合理的选择。最后还要对这个简易计算器进行功能完善,例如为了使程序符合我们使用者的操作习惯,我们可以添加按回车键换行输入,即当键入回车键后,可以换行重新输入;可以设置按 C或 c 键清屏,当键入 C或 c 键时,清除整个屏幕上的输入和输出的字
5、符并可以重新输入并运算;当按下Q或 q 键退出程。=b+/-cdaBUFBUF+4 BUF+3 BUF+2BUF+1BUF+5 运算存储输出运算存储输出名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 21 页 -武汉理工大学微机原理与接口技术课程设计说明书2 2 程序流程图及其说明2.1 程序流程图名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 21 页 -武汉理工大学微机原理与接口技术课程设计说明书3 开始输入一个字符 Q/q 09+-=?存储到 BUF =?BUF+1 出错BUF+2=+?输出结果(考虑输出为一,二,三位数及负数的情况)清屏N Y N Y N Y
6、 N N SI 提取两加数的十位数并相加(考虑进位)SI+1 提 取 两加 数 的个位数相加(考虑进位)输出提示语句SI 提取减数和被减数数的十位数相减(考虑借位)SI+1 提取减数和被减数数的个位数相减(考虑借位)Y 结束 C/c?Y 0DH?换行N Y N 名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 21 页 -武汉理工大学微机原理与接口技术课程设计说明书4 2.2 流程图说明该程序流程图简要地表现出了所要实现的功能以及一些功能的大概算法,同时也是我编写的程序的一个总体的框架。通过流程图,可以看出程序开始运行时,首先输出提示语句,再输入字符,并判断输入的字符是否为Q 或
7、q,若是,则退出,不是则继续输入;判断输入的字符是否为 C 或 c,若是,则清屏重新输入,否则继续输入;判断输入的是不是回车键,若是就回车换行输入,不是则继续输入;判断输入的是否为09,+,-,=这些字符,若不是会报错,是则将其存储到定义的数据区BUFF 里面,再判断如果输入的不是=功能键,则继续输入,若是,则判断是做加法运算还是减法运算,最后输出结果,并重新输入,继续上面的步骤。3 软件设计3.1 字符输入及存储设计利用 INT 21H 的 1 号中断一个一个地输入字符,并将输入地字符和Q,q 比较,若相等则退出程序,不等则与C,c 比较,如果相等则清屏并重新输入,不等就判断输入的字符是否为
8、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 时清屏JZ QINGPING CMP AL,c JZ QINGPING 名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 21 页 -武汉理工大学微机原理与接口技术课程设计说明书5 CMP AL,0DH;输入回车键时,换行重新输入JZ HUANHANG CM
9、P AL,+;输入的字符不为+,-,=,0到 9 的字符时则报错,并重新换行输入,是则存储JNZ LOOP1 JMP CUNCHU 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 3.2 加减法运算的判断设计由于输入字符的格式固定为两位数加两位数的格式,则只需把存在BUF 数据区的第三个字符提出来并与加号的ASCII 码值进行比较即可判断为加法过算还是减法运算了,若相等则为加法过算
10、不等则为减法运算,具体程序实现如下:PANDUAN:;判断为加法还是减法运算CMP BYTE PTRBX+2,+JZ JIAFA;结果为零则为加法运算JMP JIANFA;结果不为零则为减法运算名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 21 页 -武汉理工大学微机原理与接口技术课程设计说明书6 3.3 加减法运算的设计3.3.1 数据的提取可以将两个数的十位数提取出来作运算并存储到一个数据区里,然后将两个数的个位数提取出来作运算存储到该数据区,如下程序段落所示为把两数的十位数分别取出LEA BX,BUF MOV DL,BYTE PTRBX;提取两个数的十位的数据MOV AL
11、,BYTE PTRBX+3 同理,把两个数的个位数提取出来,如下MOV DL,BYTE PTRBX+1;提取两个数的个位的数据MOV AL,BYTE PTRBX+4 3.3.2 加法运算判断为加法运算并分别提取加数和被加数个位数和十位数之后,就要进行运算了,因为要虑到运算过程中的进位,如个位进位以及十位进位,还要考虑到结果为两位数或三位数的输出情况,所以在运算时要分别判断个位是否进位,进位则进行个位进位调整,十位是否进位,进位则进行十位进位调整。具体程序实现如下:JIAFA:LEA BX,BUF MOV DL,BYTE PTRBX+1 MOV AL,BYTE PTRBX+4 ADD AL,DL
12、 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,10 JAE TZ10 ADD AL,30H MOV SI,AL 名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 21 页 -武汉理工大学微机原理与接口技术课程设计说明书7 JC DATA3 JMP DATA2 BACK10:MOV SI,AL JC DATA3 JMP DATA2 TZ10:SUB AL,10;十位相加有进位的处理ADD AL,30H ST
13、C JMP BACK10 TZ1:SUB AL,10;个位相加有进位的处理ADD AL,30H MOV SI+1,AL MOV DL,BYTE PTRBX MOV AL,BYTE PTRBX+3 INC AL JMP BACK1 3.3.3 减法运算判断为减法运算并分别提取减数和被减数个位数和十位数之后,就要进行减法运算了,减法运算时比较复杂,要考虑个位的借位,十位的借位,以及结果为正数时两位数和一位数结果的输出同时还要考虑到结果为负数时输出,结果为一位数的负数输出和结果为两位数的负数输出几种情况。首先我们将减数和被减数的十位进行比较,如果减数的十位数字大于被减数的十位数则结果为正数,若小于则
14、为负数,若相等再比较个位数的大小,在结果为正数的情况下考虑输出为一位数还是两位数,若有借位则进行相应的调整;在结果为负数的情况下,考虑输出为一位数还是两位数,同样要对产生借位的进行处理;若十位数相等则考虑输出结果为零或正的一位数及负的一位数。具体的程序如下:JIANFA:LEA BX,BUF MOV DL,BYTE PTRBX;提取被减数和减数十位的数据MOV AL,BYTE PTRBX+3 CMP AL,DL JZ COMP1 JA FU JMP ZHENG 名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 21 页 -武汉理工大学微机原理与接口技术课程设计说明书8 ZHENG:
15、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 JMP SUB1 SUB1:SUB DL,AL MOV AL,DL ADD AL,30H MOV SI,AL CMP AL,0 JZ DATA1 JMP DATA2 JIEWEI1:;借位处理ADD
16、 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,BUF MOV DL,BYTE PTRBX+1 MOV AL,BYTE PTRBX+4 CMP AL,DL JZ ZERO JA FU1 JB ZHENG1 ZHENG1:SUB DL,AL MOV AL,DL ADD AL,30H MOV SI+1,AL JMP DATA1 FU1:SUB AL,DL 名
17、师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 21 页 -武汉理工大学微机原理与接口技术课程设计说明书9 ADD AL,30H MOV SI+1,AL JMP FUSHU1 FU: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,BYTE PTRBX+3 SUB2:SUB AL,DL ADD AL,30H MOV SI,AL CMP A
18、L,30H JZ FUSHU1 JMP FUSHU2 FU_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 JMP SUB2 3.4 结果输出设计最终结果的输出采用的是INT 21H 的 9 号功能调用,考虑到输出结果的形式很复杂,所以对于输出的结果分了好几种情况,例如结果为正数时的一位,二位,三位数的输出,结果为负数时的一位,二位输出以及零的输出几种情况,尤其是对于三位数的输出和负数的输出,可以分别在结果前面直接加一个1和
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年2022年汇编语言程序设计报告-简易计算器 2022 汇编语言 程序设计 报告 简易 计算器
限制150内