




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
武汉理工大学十进制加减法计算器课程设计说明书目录课程设计任务书21 问题描述32 前期分析33 课程设计33.1 总体设计33.2 模块设计43.2.1 求和模块43.2.2 输入十进制数模块53.2.3 存储器清零模块63.2.4 减法模块74 程序源代码75 调试与分析136 测试结果137 经验与体会15评分表16课程设计任务书学生姓名: 毛习均 专业班级: 计算机1004班 指导教师: 许毅 工作单位:计算机科学与技术学院 题目: 十进制加减计算器初始条件:理论:完成了汇编语言程序设计课程,对微机系统结构和80系列指令系统有了较深入的理解,已掌握了汇编语言程序设计的基本方法和技巧。实践:完成了汇编语言程序设计的4个实验,熟悉了汇编语言程序的设计环境并掌握了汇编语言程序的调试方法。要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)进一步理解和掌握较复杂程序的设计方法,掌握子程序结构的设计和友好用户界面的设计。具体的设计任务及要求:1) 编写程序实现十进制数的加减法;2) 将计算结果在屏幕上显示;3) 程序采用子程序结构,结构清晰;4) 友好清晰的用户界面,能识别输入错误并控制错误的修改。在完成设计任务后,按要求撰写课程设计说明书;对课程设计说明书的具体要求请见课程设计指导书。阅读资料:1)IBMPC汇编语言程序设计实验教程实验2.42)IBMPC汇编语言程序设计(第2版)例6.11时间安排:设计安排一周:周1、周2:完成系统分析及设计。周3、周4:完成程序调试,和验收。周5:撰写课程设计报告。指导教师签名: 年 月 日系主任(或责任教师)签名: 年 月 十进制加减法计算器1问题描述用汇编语言编写一个十进制加减法计算器,此程序要求将结果显示在屏幕上,并且友好清晰的用户界面,能识别输入错误并且控制修改。在此程序中采用子结构程序使结构清晰。2前期分析此课题是做一个带显示界面的十进制加减法计算器。首先,程序中多次用到BIOS的10号类型的显示中断功能,所以,在完成此课题之前重点深入学习例行中断程序的理论知识以及用法。其次,识别输入错误的修改功能,这就需要判断错误并及时置光标到合适的位置,以便提示并修改错误。最后,对于采用子程序结构必须清晰了解课题的大体结构,然后分析与设计子程序结构。比如输入十进制数就可以采用子程序结构。3课题设计3.1总体设计概括程序的整体流程,设计有好的用户界面,总体设计流程图如下开始菜单退出输入0 输入data1输入1 输入输入data20-9?N Y显示结果提示输入其他键Enter图1有好用户界面3.2模块设计开始3.2.1求和模块AXBEIJIASHU如右图2,求和模块,将加数与被加数相加然后扩展为双字,最后通过求余把每一位数存储在HE存储单元里, 后面把结果按位输出。AXJIASHU+AX将AX扩展为双字BX10000HEAX/BX的商AXAX/BX的余数BX1000HE+2AX/BX的商AXAX/BX的余数BX100HE+4AX/BX的商AXAX/BX的余数BX10HE+6AX/BX的商HE+8AX/BX的余数结束图2 求和3.2.2输入十进制数模块开始BX0输入一个字符YAL=0DH结束NNAL39HYAXBX;BXAX输出错误提示AX*10AXBX;BXAXBXAX+BX图3输入十进制数上图3,就是输入两个十进制数,对输入的字符判断,如果是0-9之间的数,则转化为十进制数,否则提示重新输入字符。3.2.3存储单元清零模块为保证不发生内存访问冲突,每次重新计算的时候都要存储单元清零。如图4开始SI-2;CX5SI+2NHESI0CX=0Y结束图4存储单元清零3.2.4减法模块减法模块主要是比较减数与被减数的大小,如果data1data2就直接计算,打印结果。否者将data1压入堆栈,显示-,然后data1出栈、计算,打印结果。减法模块如下图5输出结果Data1-data2Data1data2?YNData1 data2Push data1显示-Pop data1图5 减法4.程序源代码DATAS SEGMENT STR1 DB 0AH,0DH, * STR2 DB 0AH,0DH, * *STR3 DB 0AH,0DH, * *STR4 DB 0AH,0DH, * 1:Enter run * STR5 DB 0AH,0DH, * * STR6 DB 0AH,0DH, * other keys exit * STR7 DB 0AH,0DH, * * STR8 DB 0AH,0DH, * * STR9 DB 0AH,0DH, * * STR10 DB 0AH,0DH, *LENGTH1 EQU $-STR1 ;至str1的字节数STR11 DB Enter Exit,Other keys continue!$STR12 DB Please input again!$ERR DB Error!Please input again!$STR13 DB input data1:,$STR14 DB input data2:,$STR15 DB add result:,$STR16 DB -,$STR17 DB sub result:,$COUNT DW ?VALUE DW ?JIASHU DW ?BEIJIASHU DW ?HE DW ?SHOW MACRO M ;定义宏,显示字符串 LEA DX,M MOV AH,9 INT 21H ENDM GUANGBIAO MACRO M1,M2MOV DH,M1 ;行(Y坐标)MOV DL,M2 ;列(X坐标)MOV BH,0 ; 显示页码MOV AH,02INT 10H ;用文本坐标下,设置光标位置ENDMQINGPING MACRO M1,M2,M3,M4,M5MOV AH,6 ;向上滚屏MOV AL,M1 ;滚动行数(0-清窗口)MOV BH,0DH ;空白区域的缺省属性MOV CH,M2 ;窗口的左上角位置,Y坐标MOV CL,M3 ;-,X坐标MOV DH,M4 ;窗口的右上角位置,Y坐标MOV DL,M5 ;-,X坐标INT 10HENDMDATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX MOV AL,3 ;80*25 16色文本MOV AH,0 ;设置显示模式为80*25彩色文本模式INT 10HMOV BP,SEG STR1 ;取段地址MOV ES,BPMOV BP,OFFSET STR1 ;取偏移地址MOV CX,LENGTH1MOV DX,0MOV BL,09H ;属性(颜色)MOV AL,0 ; 光标位置不变(1改变)属性存在BL中,2和3的属性不在BL中GUANGBIAO 4,15MOV AH,13H ;在TELETYPE模式下显示字符串INT 10HMOV AH,1 ;键盘输入并回显INT 21HCMP AL,31H ;输入1进入加法器,输入2结束;JNZ NEXT;NEXT:;JMP LOOP8 GUANGBIAO 8,20 ;确定光标位置(字符串起始位置)SHOW STR13GUANGBIAO 9,20SHOW STR14GUANGBIAO 10,20SHOW STR15GUANGBIAO 11,20SHOW STR17 MOV SI,-2MOV CX,5LOOP1: ;存储器清零 ADD SI,2 MOV HESI,0 LOOP LOOP1 MOV BX,0LOOP2: ;输入被加数 QINGPING 1,8,30,8,50 QINGPING 1,9,30,9,50 QINGPING 1,10,30,10,50 QINGPING 1,11,30,11,50 GUANGBIAO 8,30 CALL INPUT MOV BEIJIASHU,BXLOOP3: ;输入加数 QINGPING 1,13,18,13,51 QINGPING 1,12,20,12,50 MOV BX,0 GUANGBIAO 9,30 MOV BX,0 CALL INPUT MOV JIASHU,BXLOOP4: GUANGBIAO 10,30 ;相加 MOV AX,BEIJIASHU ADD AX,JIASHU CWD MOV DX,0 ;扩展 并求结果各位数值 MOV BX,10000 DIV BX MOV HE,AX MOV AX,DX ;余数给AX CWD MOV BX,1000 DIV BX MOV HE+2,AX MOV AX,DX CWD MOV BX,100 DIV BX MOV HE+4,AX MOV AX,DX CWD MOV BX,10 DIV BX MOV HE+6,AX MOV HE+8,DX MOV SI,-2 MOV CX,5LOOP5: ADD SI,2 ;结果输出 MOV DX,HESI ADD DX,30H MOV AH,02 INT 21H LOOP LOOP5 ;每位循环输出LOOP_I :;JIAN FA GUANGBIAO 11,30MOV AX,BEIJIASHUCMP AX,JIASHUJAE FLAGXCHG AX,JIASHUPUSH AXMOV DX,OFFSET STR16MOV AH,09HINT 21HPOP AXFLAG:SUB AX,JIASHUCALL PRINTJMP LOOP6LOOP6: GUANGBIAO 13,19 ;退出或继续 SHOW STR11 MOV AH,01 INT 21H CMP AL,0DH ;回车退出 JNE LOOP7 MOV AH,4CH INT 21HLOOP7: QINGPING 1,13,18,13,51 GUANGBIAO 12,21 SHOW STR12 JMP LOOP1LOOP8: MOV AH,4CH INT 21HERROR: GUANGBIAO 12,21 SHOW ERR JMP LOOP1INPUT PROC NEAR ;输入子程序LP1: MOV AH,01 INT 21H CMP AL,0dH ;输入回车输入结束 JE EXIT CMP AL,31H JB ERROR CMP AL,39H JA ERROR ;不是09之间则显示错误 SUB AL,30H CBW XCHG AX,BX MOV CX,10 MUL CX ADD BX,AX JMP LP1 ;跳转直到输入回车EXIT: RETINPUT ENDPPRINT PROC NEAR;JIA FA DE SHU CHU JIE GUO PUSH AXMOV VALUE,AXMOV COUNT,0PRINT_D_LOP1:XOR DX,DXMOV AX,VALUEMOV BX,10DIV BXMOV VALUE,AXPUSH DXINC COUNTCMP VALUE,0JA PRINT_D_LOP1PRINT_D_LOP2:CMP COUNT,0JE P_EXITDEC COUNTPOP AXADD AL,30HMOV DL,ALMOV AH,02HINT 21HJMP PRINT_D_LOP2P_EXIT:POP AXRETPRINT ENDPCODES ENDS END START5调试与分析(1)最初汇编的时候出现asm:error A2053:jump out of range by 121 byte,看看源程序和查资料发现是有条件跳转有界限的,无条件跳转可以“远跳”。最后通过有条件和无条件结合,解决这一问题。(2)对于减法的结果,重新输入时候没有把结果清零,我就用mov ax,0;mov, dx,0还是不行,经过调试,发现是对减法的那个结果没有清屏。而不是存储器清零的原因。(3)对于跳转指令,遇到跳转才跳转,没有的话,就是一步一步的指令顺序执行。这个好像是汇编中很简单的概念,但是有时候很容易忘记,但是经过调试发现,出现了这个简单的逻辑错误。6测试结果(1)友好界面,开始运行时的界面,当输入1就运行程序,输入其他键就退出程序,如下图6图6 开始菜单(2)程序输入34,89后得到加法结果为00123,减法结果-55结果正确,如下图7图7正确输入,输出结果(3)当输入非(0-9)的数字时,比如输入字母或者符号时,就提示“Error!please input again!”,提示重新输入,直到输入正确,如下图8图8输入错误,提示重新输入(4)最后输入正确数字后,将会看到“Enter Exit,other key continue!”如果输入enter键退出程序,否者继续运算,如下图9 图9输入正确,并执行运算,enter键退出7经验与体会该开始看这个题目很简单的,但是后来发现很多的问题。比如在BIOS的号类型的显示中断功能的应用就花费不少的时间,那里面确实有很多技巧值得深入学习。本程序的跳转出现越界的情况,最后通过查资料最终把问题解决了,说明我们不懂的问题多去深入那个问题研究。其余比较关键的就是本程序的细节问题,比如在输入时如何防止程序出错,就是在输入非数字的数据时可以提示使用者错并使其重新输入。本程序用到了课堂上几乎没有讲过的宏定义,此程序应用了宏定义,使程序更加简洁。也不失一种大胆的尝试,并且取得了很好的效果。通过本次课程设计发现自己在课堂上所学是知识只是基础部分,如果想自己做出更好的程序就需要花更多的精力在上面
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年大学人文教育专业题库- 大学人文教育对社会公民责任感的培养
- 2025年大学华文教育专业题库- 华文教育专业研究方法
- 2025年大学工会学专业题库-工会学专业的创新能力
- 2025年大学警卫学专业题库- 大学警卫学专业校企合作模式
- 2025年大学统计学期末考试:数据可视化在社会科学研究中的应用试题
- 2025年大学卫生教育专业题库- 大学生面对逆境及卫生教育
- 2025年大学融合教育专业题库- 文化多样性与融合教育实践
- 2025年医保定点医疗机构管理考试题库:医保政策试题及答案
- 2025年司法考试刑法模拟检测试卷:刑法总则与分则综合试题解析
- 2025年医保知识考试题库及答案:医保定点医疗机构管理服务满意度调查试题
- otc药品管理办法
- 康复医学科病历书写规范与质量控制
- 商用厨房设计汇报
- 战术搜索教学课件
- 教科版五年级科学上册第一单元《光》测试卷及答案(含四题)
- Linux操作系统基础任务式教程(慕课版)课件 任务4 使用Linux操作系统中的硬盘
- 自控系统报警管理制度
- 口腔服务5S管理
- 保安投诉管理制度
- 2025年高考江苏卷物理真题(原卷版)
- 【公开课】种子植物+第2课时课件-2024-2025学年人教版生物七年级上册
评论
0/150
提交评论