首页 《微型计算机原理及应用》课程设计_简易计算器的设计

《微型计算机原理及应用》课程设计_简易计算器的设计

举报
开通vip

《微型计算机原理及应用》课程设计_简易计算器的设计《微型计算机原理及应用》课程设计_简易计算器的设计 《微型计算机原理及应用》课程设计 简易计算器的设计 姓名 陈** 院系 信息学院自动化系 班级 **** 学号 200911****** 时间 2011年 12月 29日 目 录 摘要 ......................................................................................................................................

《微型计算机原理及应用》课程设计_简易计算器的设计
《微型计算机原理及应用》课程设计_简易计算器的设计 《微型计算机原理及应用》课程设计 简易计算器的设计 姓名 陈** 院系 信息学院自动化系 班级 **** 学号 200911****** 时间 2011年 12月 29日 目 录 摘要 ...................................................................................................................................... I INTRODUCTION .............................................................................................................. II 1 课程设计目的与任务 .................................................................................................. 1 1.1 设计目的 .............................................................................................................. 1 1.2 设计任务 .............................................................................................................. 1 2 基本要求 ...................................................................................................................... 1 3 简易计算器的设计 ...................................................................................................... 2 3.1 程序设计 流程 快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计 图 .................................................................................................. 2 3.2 程序基本算法 ...................................................................................................... 3 3.3 程序源代码 .......................................................................................................... 3 3.4 程序调试 .............................................................................................................. 8 4 课程设计总结与心得 ................................................................................................ 11 参考文献 ............................................................................................................................. 12 II 摘要 摘要 本次课程设计是通过使用emu8086汇编语言编程软件实现较复杂程序的设计。该课程设计的内容为采用汇编语言设计一个简易计算器,界面显示要求用键盘分别输入两个随机数,完成加法,减法,乘法和除法的运算,然后将运算结果显示出来。该设计只能运行简单正整数间的单步加减乘除运算,不能识别小数。除法中的结果可以精确到3位小数,减法可以显示负数的结果。采用DOS调用(INT 21H)来完成输入和输出,输出字符串操作。通过这次设计实践能够进一步加深对专业知识和理论知识学习的认识和理解,使自己的设计水平和对所学的知识的应用能力以及分析问题解决问题的能力得到全面提高。 关键词:微机原理;计算器;汇编 I INTRODUCTION This course is designed to through the use of emu8086 assembly language programming software to realize complex program design. The content of the course design for the assembly language design a simple calculator, interface display with the keyboard input requirements are two random number, complete the addition, subtraction, multiplication, and division of the operation, and then will operation result shows it. This design can only easy operation between the positive integer single step add, subtract, multiply and divide operation, can't identify decimal. The result in the division accurate to 3 decimal places, subtraction can display the negative results. Using DOS call (INT 21 H) to complete the input and output, the output string operation. This design practice can further deepen the theoretical knowledge of professional knowledge and learning the understanding and the understanding, make oneself of the design level of knowledge and the application ability and the ability to analyse and solve questions fully improve. KEYWORDS: Microcomputer principle;calculator;Assembly language II 广东海洋大学《微型计算机原理及原理》课程设计 简易计算器的设计 自动化1091,200911632102,陈焯坚 1 课程设计目的与任务 1.1 设计目的 为了使学生加深对所学的微机原理知识的理解,培养学生的专业素质,提高其利用微机原理知识处理问题的能力,为今后专业课程的学习、毕业设计和工作打下良好的基础。使学生能比较扎实地掌握微机原理的基础知识和基本理论,掌握控制系统及有关设备的分析、开发等基本技能,受到必要工程训练、初步的科学研究方法训练和实践锻练,增强分析问题和解决问题的能力,了解微机原理和接口技术的新发展。 1.2 设计任务 本次课程设计有四个任务可供选择,这里选择设计一个简易计算器,要求能正确完成加、减、乘、除四则运算。 2 基本要求 本次课程设计,1人1题,可以相互讨论,但设计 报告 软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载 由学生独立完成,不得互相抄袭。教师的主导作用主要在于指明设计思路,启发学生独立设计的思路,解答疑难问题和按设计进度进行阶段审查。学生必须发挥自身学习的主动性和能动性,主动思考问题、分析问题和解决问题,而不应处处被动地依赖指导老师。同学应积极主动的提出问题、解决问题、讨论问题,互相帮助和启发。 学生在设计中可以引用所需的参考资料,避免重复工作,加快设计进程,但必须和题目的要求相符合,保证设计的正确。指导教师要引导学生学会掌握和使用各种已有的技术资料,不能盲目地、机械地抄袭资料,必须具体分析,使设计质量和设计能力都获得提高。学生要在老师的指导下制定好自己各环节的详细设计进程 计划 项目进度计划表范例计划下载计划下载计划下载课程教学计划下载 ,按给定的时间计划保质保量的完成个阶段的设计任务。设计中可边设计,边修改,软件设计与硬件设计可交替进行,问题答疑与调试和 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 修改相结合,提高设计的效率,保证按时完成设 计工作并交出合格的设计报告。 , 1 , 3 简易计算器的设计 设计一个简易计算器过程包括:确定功能,画流程图,确定算法,编写程序,程序 调试。 设计工具:个人电脑,emu8086。设计语言:8086汇编语言 3.1 程序设计流程图 开始 输入单字符 都不是 1/2, 1:输入字符串 2:第一次输入字符串 N a~z, 0~9/E, 都不是 a~z转换与输出 0~9转换与暂存 第二次输入字符串 0~9/E, N 都不是 0~9转换与暂存 输入运算符 +-*/E, 都不是 N 相应运算 E退出 转换与输出 图1 2 广东海洋大学《微型计算机原理及原理》课程设计 流程图介绍: 进入DOS界面,首先显示出计算器功能介绍和个人信息,然后界面输出操提示要求用户输入1或者2选择功能,1表示字母转换功能,2表示计算功能。 字母转换功能,只能从小写向大写转换,当用户输入字母时,先判断是否为小写字母,不是则重新进入功能选择界面,是就开始转换并且显示在界面大写。 计算功能,提示输入第一个数,先判断是否符合要求的数,符合的话再把输入的数据先从十六进制的ASCII码转换成相应的十进制,再转换成有实际意义的十六进制进制,将该十六进制数存入一个缓冲器单元,对于不符合要求的数就返回重新输入第一个数据。输入完第一个数后,界面再要求操用户输进第二个数,同样的方法判断再进行转换数制,在存到缓冲期的下一个单元。这里转换的方法是采用“乘10加次位”的方法。接下来界面再提示用户输入“+,-,*,/”其中一个运算符,然后程序进行比较输入的运算符,然后跳到相应的代码段执行相应的运算,如果输入的字符不是运算符就重新输入运算符。其中,减法运算中,首先比较被减数与减数的大小,如果减数大于被减数则结果会是负数,所以,首先显示出“-”号,再将被减数与减数换位,进行减法运算。当完成运算后,因为结果是十六进制的,所以要进行转换数制,采用“除10取余倒排列”的方法,最后,就将结果逐位输出显示。 3.2 程序基本算法 本次计算器计算功能的设计,关键在于数制的转换。用户输入的是字符串,而在以每个字符的十六进制的ASCII码存放,为了把字符串转换成有实际数学意思的十六进制数,就要首先把ASCII码先转换成十进制,再把十进制数转成可以运算的十六进制。例如输入112,系统存放的是31H、31H、32H,通过减去30H,即可转成1、1、2存放,再把三个数1、1、2“乘以10加次位”的方法:(1*10+1)*10+2=112 ,把112也就是70H这个结果放到寄存器里,即可转换成功。只有这样的数才可以利用汇编指令进行正确运算。运算完之后采用“除10取余倒排序”的方法,把结果逐位转换,再加上30H,即可显示。 字母转换部分,实现小写向大写转换,只要把相应的ASCII码进行运算就可以,利用这个方法可以实现大小写互换,这里只是简单尝试写出小写向大写转换。例如,a转换成A,a的ASCII码是41H,而A的是61H,要实现a向A转换,61H减去20H 就可以了。要实现A向a转换,对应ASCII码加上20H即可。 3.3 程序源代码 ;------------------------------------------------------------------------------ -------- DATA SEGMENT ; *******数据段****** ;---------------------计算器功能信息字符串定义;------------------------------------------------------------------------------------------------------- , 3 , STR1 DB CRLF DB 0DH,0AH,'$' ;显示结果时回 车,转行 说明 关于失联党员情况说明岗位说明总经理岗位说明书会计岗位说明书行政主管岗位说明书 0AH,0DH,'*********************************************$' YUSHU DW 4 DUP(0) STR2 DB 0AH,0DH,' A Simple Calculator DATA ENDS $' ;---------------------------------------------------------------------- ------ STR3 DB 0AH,0DH,' function :$' ; ***代码段**** STR4 DB 0AH,0DH,' 1.Letter Conversion$' ;---------------------------------------------------------------------- STR5 DB 0AH,0DH,' 2.Four Operations$' ------ STR6 DB 0AH,0DH,'$' CODE SEGMENT STR7 DB 0AH,0DH,0AH,0DH,' ASSUME CS:CODE,DS:DATA ;段寄存器说 明伪指令 Design by Cheukkin Chan$' STR8 DB START:MOV AX, DATA 0AH,0DH,'************************************** MOV DS,AX ;往DS段寄存 器送数据段基址 *******$' ;-----------提示字符串变量定义------------------------------- ;----------输出计算器的功能相关信息(调用9号功能输STR13 DB 0DH,0AH,'Please choose the function:$' 出字符串)------ ARRAY6 DW 2 DUP(0) ;保留2个字空间 MOV DX,OFFSET STR1 作暂存数据计算 MOV AH,9 RESULT1 DB 30 DUP(0),'$' ;保留30个字节 INT 21H 存结果数 MOV DX,OFFSET STR2 RESULT2 DB 30 DUP(0)'$' MOV AH,9 ;---字母转换部分--- INT 21H STR9 DB 0DH,0AH,0DH,0AH,'Letters Conversion $' MOV DX,OFFSET STR3 STR10 DB 0DH,0AH,'Please input the codes:$' MOV AH,9 STR11 DB 0DH,0AH,'After conversion: $' INT 21H ;---四则运算部分---- MOV DX,OFFSET STR4 BUFF DB 28 ;允许输入的最多字符数 MOV AH,9 DB 0 ;实际输入的字符数 INT 21H DB 28 DUP(0) ;保存实际输入的字符 MOV DX,OFFSET STR5 ARRAY1 DB 0DH,0AH,0DH,0AH,'Please enter a number: MOV AH,9 $';输入第一个数字符串说明 INT 21H ARRAY2 DB 0DH,0AH,'Please enter another number: MOV DX,OFFSET STR6 $';输入第二个数字符串说明 MOV AH,9 INT 21H ARRAY3 DB 0DH,0AH,'The result is : MOV DX,OFFSET STR7 $';输出结果字符串说明 MOV AH,9 ARRAY4 DB 0DH,0AH,'The number is wrong,please INT 21H input again : $';输入错误提示字符串说明 MOV DX,OFFSET STR8 STRING DB 0DH,0AH,'Please enter the operation(+,-,*,/) : MOV AH,9 $' ;运算字符串说明 INT 21H ARRAY DW 2 DUP(0) ;保留2个字空;--------------------------------------------- 间作暂存数据计算 MOV DX,OFFSET CRLF RESULT DB 6 DUP(0),'$' ;保留6个字节存 MOV AH,9 结果数 INT 21H ;输出回车换行 2 广东海洋大学《微型计算机原理及原理》课程设计 ;---------------------------------------------------------------------- CMP AL,61H ;比较输入 ------ JB LC ;小于61H跳转 ;***功能选择*** CMP AL,7AH ;---------------------------------------------------------------------- JA LC ;大于7AH跳转 ------ INC BX STAC: MOV DX,OFFSET STR13 ;取STR13偏移 LOOP A1 地址送进DX POP BX MOV AH,9 CALL LCC INT 21H JMP STAC MOV AH,01H ;---------------------------------------------------------------------- INT 21H ;键盘输入单字符 ------ CMP AL,'E' ;比较输入运算符是否为'E' ;********四则运算******* JZ LAST ;输入运算符为'E',则跳到;---------------------------------------------------------------------- LAST处,若不是则继续往下执行 ------ CMP AL,31H ;***输入第一个数*** JZ LC ;如果输入为1,就跳到LC ;---------------------------------------------------------------------- CMP AL,32H ------ JZ INPUT1 ;如果输入为3,就跳到;-------调用09号输出字符串功能,输出DX内容即INPUT1 ARRAY1内容 ---------- MOV DX,OFFSET CRLF ;1、2都不是,则回车INPUT1: MOV DX,OFFSET ARRAY1 ;取换行 ARRAY1偏移地址送进DX MOV AH,9 MOV AH,9 INT 21H INT 21H JMP STAC ;跳回STAC,重新选择;-----调用0A号输入字符串功能,输入内容暂存在BUFF功能 缓冲区------- ;----------------------------------------------------------------------AGAIN1:MOV DX,OFFSET BUFF ;把缓冲区------ BUFF的偏移地址送到DX MOV AH,0AH ;***字母转换*** ;---------------------------------------------------------------------- INT 21H ------ ;----判断输入的是否符合要求------- LC: MOV DX,OFFSET STR9 PUSH AX MOV AH,9 PUSH BX INT 21H PUSH CX MOV DX,OFFSET STR10 XOR CX,CX MOV AH,9 MOV BX,OFFSET BUFF INT 21H MOV CL,[BX+1] ;把输入的字符数给CX MOV DX,OFFSET BUFF ;把缓冲区AA: MOV AL,[BX+2] BUFF的偏移地址送到DX CMP AL,'E' ;比较输入运算符是否为'E' MOV AH,0AH JZ LAST ;输入运算符为'E',则跳到INT 21H LAST处,若不是则继续往下执行 MOV BX,OFFSET BUFF CMP AL,30H PUSH BX JB Error1 ; AX低于30H就跳到 XOR CX,CX Error1 MOV CL,[BX+1] CMP AL,39H A1: MOV AL,[BX+2] JA Error1 ;AX高于39H就跳到Error1 , 3 , INC BX POP CX LOOP AA POP BX POP CX POP AX POP BX JMP CC2 POP AX ;------提示输入错误,重新输入------- JMP CC1 Error2: MOV DX,OFFSET ARRAY4 ;------提示输入错误,重新输入----- MOV AH,9 Error1: MOV DX,OFFSET ARRAY4 INT 21H MOV AH,9 JMP AGAIN2 INT 21H ;------------------------------------ JMP AGAIN1 CC2: CALL ASC_HEX ;-------------------------------- MOV [ARRAY+2],AX CC1: CALL ASC_HEX ;调用;---------------------------------------------------------------------- ASC_HEX子程序 ----- MOV [ARRAY],AX ;将第一个数;***输入运算符*** 存到暂存区ARRAY ;---------------------------------------------------------------------- ;--------------------------------------------------------------------------- ------ INPUT3:MOV AH,09H ;***输入第二个数*** MOV DX,OFFSET STRING ;---------------------------------------------------------------------- INT 21H ------ ;调用01号输入单字符功能,记运算符 MOV DX,OFFSET ARRAY2 MOV AH,01 ;键盘输入单字符(运算符+-*/) MOV AH,9 INT 21H INT 21H ;----比较输入的运算符-------------- AGAIN2:MOV DX,OFFSET BUFF CMP AL,'+' ;比较输入运算符是否为'+' MOV AH,0AH JZ ADD1 ;输入运算符为'+',则跳到ADD1 处,若不是则继续往下执行 INT 21H ;----判断输入的是否符合要求------- CMP AL,'-' ;比较输入运算符是否为'-' PUSH AX JZ SUB2 ;输入运算符为'-',则跳到 PUSH BX SUB2处,若不是则继续往下执行 PUSH CX CMP AL,'*' ;比较输入运算符是否为'*' XOR CX,CX JZ MUL3 ;输入运算符为'*',则跳到 MOV BX,OFFSET BUFF MUL3处,若不是则继续往下执行 MOV CL,[BX+1] ;把输入的字符数给CX CMP AL,'/' ;比较输入运算符是否为'/' BB: MOV AL,[BX+2] JZ DIV4 ;输入运算符为'/',则跳到 CMP AL,'E' ;比较输入运算符是否为'E' DIV4处,若不是则继续往下执行 JZ LAST ;输入运算符为'E',则跳到 CMP AL,'E' ;比较输入运算符是否为'E' LAST处,若不是则继续往下执行 JZ LAST ;输入运算符为'E',则跳到 CMP AL,30H LAST处,若不是则继续往下执行 JB Error2 ; AX低于30H就跳到 JMP INPUT3 ;如果输入运算不是以上,则从Error2 新返回到INPUT3处 CMP AL,39H ;------------------------------------------------------------------- JA Error2 ;AX高于39H就跳到Error2 ;*** 加法运算*** INC BX ;-------------------------------------------------------------- LOOP BB ADD1: ;-----回车,换行显示----------------- 4 广东海洋大学《微型计算机原理及原理》课程设计 PUSH AX ;------------------------------------------------------- MOV DX,OFFSET ARRAY3 ;取ARRAY3;*** 乘法运算******* 偏移地址送进DX ;------------------------------------------------------- MOV AH,9 MUL3: ;-----回车,换行显示----------------- INT 21H PUSH AX POP AX MOV DX,OFFSET ARRAY3 ;取ARRAY3 MOV AX,[ARRAY] 偏移地址送进DX MOV BX,[ARRAY+2] MOV AH,9 ADD AX,BX INT 21H CALL HEX_ASC ;调用HEX_ASC子程 POP AX 序 MOV AX,[ARRAY] MOV DX,OFFSET CRLF MOV BX,[ARRAY+2] MOV AH,9 MUL BX INT 21H ;输出回车换行 CALL HEX_ASC JMP STAC MOV DX,OFFSET CRLF ;------------------------------------------------------------------ MOV AH,9 INT 21H ;*** 减法运算******* JMP STAC ;------------------------------------------------------------------ SUB2: ;-----回车,换行显示----------------- ;-------------------------------------------------------- ;*** 除法运算*** PUSH AX ;-------------------------------------------------------- MOV DX,OFFSET ARRAY3 ;取ARRAY3 偏移地址送进DX DIV4: ;-----回车,换行显示----------------- MOV AH,9 PUSH AX INT 21H MOV DX,OFFSET ARRAY3 ;取ARRAY3 POP AX 偏移地址送进DX MOV AX,[ARRAY] MOV AH,9 MOV BX,[ARRAY+2] INT 21H POP AX CMP AX,BX JB KK ;比较AX与BX的大小, MOV CX,4 如果 AX 低于 BX,则跳到 KK MOV AX,[ARRAY] DIV5: MOV BX,[ARRAY+2] SUB AX,BX ;如果AX大于或者等于, MOV DX,0 则 AX 减 BX CALL HEX_ASC DIV BX MOV DX,OFFSET CRLF PUSH DX ;保护余数 MOV AH,9 PUSH CX INT 21H ;输出回车换行 CALL HEX_ASC JMP STAC POP CX ;--------负数处理---------- POP DX ;释放余数 KK: SUB BX,AX MOV [YUSHU],DX MOV AX,BX CMP CX,4 CALL HEX_ASC1 JNZ YS2 ;CX不等于2就跳转到YS2 MOV DX,OFFSET CRLF MOV DL,2EH MOV AH,9 MOV AH,2 ; 输出小数点 INT 21H ;输出回车换行 INT 21H JMP STAC YS2: MOV AX,YUSHU , 5 , MOV BX,10 ------ MUL BX ;取余数乘以10继续计算,; ************ HEX_ASC子程序(十六进制把结果放到AX **************** 转换成相应的ascii码) LOOP DIV5 ;---------------------------------------------------------------------- MOV DX,OFFSET CRLF ------ MOV AH,9 HEX_ASC PROC INT 21H MOV SI,OFFSET RESULT ;将RESULT暂存结 JMP STAC 果的单元偏移地址送到SI寄存器中 ;------返回操作系统---------------------------------- ADD SI,4 ;将源变址指针指到 最后一个单元 LAST: MOV AH,4CH INT 21H MOV [SI+1],"$" ;预先放结束码,用来;----------------------------------------------------- 后面调用09号输出功能的停止 ;** ASC_HEX子程序(把ascii码转换成对应的十六进 MOV CX,5 ;循环次数,最多不制数) 超过5位十进制数,因为16位二进制数即4位16进制数;----------------------------------------------------- 不超过65535 ASC_HEX PROC HA1: MOV DX,0 ;DX用来放余数 的,所以每次都要清零 XOR CX,CX ;清空CX,CX=0 MOV CL,BUFF[1] ;存入字符数 MOV BX,10 ;以10为基数 JCXZ ABCD ;如果CX=0,即输 DIV BX ;二进制转换成十进入字符数为0,跳到ABCD处,返回主程序 制,除10取余法 PUSH CX ; 保护CX,把CX ADD DL,30H ;十进制转换成十六的值放入栈区 进制的ASCII码 MOV BX,OFFSET BUFF+2 ;取首字符地址 MOV [SI],DL ;保存当前位结果, (先个位、再十位、后百位、、、倒序~~) PUSH BX ; 保护BX,把BX 的值(首字符地址)放入栈区 DEC SI ;指向前一位 L0: SUB [BX],30H ;输入字符即十六进 LOOP HA1 制的ASCII码转换成相对应的十进制码(0—9),以BX MOV CX,4 ;循环次数为4次,作为指针 对应上面的SI所设的单元数 INC BX HA2: INC SI LOOP L0 MOV AL,[SI] POP BX ;释放原来栈区的BX CMP AL,30H ;判断是否为0,若的值(首字符地址) 是,则继续循环。 MOV AX,0 JNZ NOTZEARO ;若不是则跳到 MOV CH,0 NOZEARO,显示出该字符 MOV CL,[BX-1] ; 取字符数 LOOP HA2 L1: MOV DX,10 ;十进制转换成二进 INC SI 制 ,以10为基数 NOTZEARO: MUL DX ;-------09号输出字符串功能调用,显示出内容 ADD AL,BYTE PTR [BX] ; -------- INC BX MOV DX,SI LOOP L1 MOV AH,9 INT 21H POP CX RET ABCD: RET ;返回主程序 ASC_HEX ENDP HEX_ASC ENDP ;----------------------------------------------------------------------;---------------------------------------------------------------------- 6 广东海洋大学《微型计算机原理及原理》课程设计 ------ MOV DX,SI ; *********减法负数情况的HEX_ASC1子程 MOV AH,9 序(十六进制转换成相应的ascii码)********* INT 21H ;---------------------------------------------------------------------- RET ------ HEX_ASC1 ENDP HEX_ASC1 PROC ;---------------------------------- MOV SI,OFFSET RESULT ;将RESULT暂存结;------------LCC子程序------------- 果的单元偏移地址送到SI寄存器中 ;---------------------------------- ADD SI,4 ;将源变址指针指到最LCC PROC 后一个单元 XOR CX,CX MOV [SI+1],"$" ;预先放结束码,用来后 MOV CL,[BX+1] 面调用09号输出功能的停止 PUSH BX MOV CX,5 ;循环次数,最多不超 PUSH CX 过5位十进制数,因为16位二进制数即4位16进制数不LCC1:MOV AL,[BX+2] 超过65535 SUB AL,20H AB1: MOV DX,0 ;DX用来放余数的, MOV [BX+2],AL 所以每次都要清零 INC BX MOV BX,10 ;以10为基数 LOOP LCC1 DIV BX ;二进制转换成十进 MOV [BX+2],'$' MOV DX,OFFSET STR11 制,除10取余法 ADD DL,30H ;十进制转换成十六MOV AH,9 进制的ASCII码 INT 21H MOV [SI],DL ;保存当前位结果, POP CX (先个位、再十位、后百位) POP BX DEC SI ;指向前一位 ADD BX,2 LOOP AB1 MOV DX,BX MOV CX,4 ;循环次数为4次, MOV AH,9 对应上面的SI所设的单元数 INT 21H AB2: INC SI MOV DX,OFFSET CRLF MOV AL,[SI] MOV AH,9 CMP AL,30H ;判断是否为0,若 INT 21H 是,则继续循环。 MOV DX,OFFSET CRLF JNZ NOTZEARO1 ;若不是则跳到 MOV AH,9 NOZEARO1,显示出该字符 INT 21H LOOP AB2 RET INC SI LCC ENDP NOTZEARO1: CODE ENDS ;------------------------------ END START PUSH AX MOV AH,02H MOV DL,'-' ;预先输出一个'-'号,表示结果为 负数 INT 21H POP AX ;------------------------------ , 7 , 3.4 程序调试 功能选择界面: 图 2 图3 如 图2 所 示, 运 行 程 序,首先显示计算器的相关信息,主要利用系统功能调用实现。然后是输出提示要求用户通过输入1或者2选择功能。 字母转换功能 功能1可以实现小写字母向大写字母的转换,当用户输入1会进入图3界面。提示用户输入字母,注意要是小写,如果输入不是小写则会提示重新输入如图4所示。输入正确的小写字母自动转换并且返回功能选择。 图4(上) 图6(下) 图5(上) 图7(下) 加法运算功能 8 广东海洋大学《微型计算机原理及应用》课程设计 如图6所示,任意输入两个正整数相加,结果正确。先输入第一个数,然后再输入第二个数,接着输入运算符,这样程序就会自动输出结果。注意运算两数相加的两个数不能超过五位数,并且结果不能超过65535 。 减法运算功能 如图7所示,操作方法和加法相同。虽然不可以进行负数间的运算,但是可以输出负数,如图8所示。 图8 图9 乘法运算功能 如图9所示,操作方法和加法相同。 除法运算功能 如图10所示,操作方法和加法相同。除法输出结果精确到3位小数,但是不会四舍五入,而是直接舍去后面剩下的小数。如图11所示。 图10 图11 输入错误提示功能 以下述说的前提是:输入的字符非大写E。 在功能选择的时候,选择错误即输入的既不是1也不是2,则会提示重新选择,如图12所示。 在字母转换的时候,输入字母非小写字母,也会提示重新输入,如图5所示。 在运算的时候,第一个和第二个输入的必须是数字,输入的运算符号必须是+、-、*、/ 其中之一,否则都会提示错误重新输入。如图13、图14所示。运算时中间有输入错误的字符,会提示重新输入,直到输入正确为止,才继续进行运算,如图15所示。 , 9 , 图12 图13 图14 图15 退出功能 本程序设置了退出功能。当用户输入大写字母E的时候就会退出程序。但是在进行小写字母向小写字母转换的时候,不能这种方式退出。其他输入E即可退出。如图16所示。 图16 10 广东海洋大学《微型计算机原理及应用》课程设计 4 课程设计总结与心得 本次课程设计自由选择设计课题的,我选择了简易加减法计算器的题目,看起来不是很难,但是真正做起来才发现其困难之处。 其实老师也说过这个题目相对于其他题目比较难的。因为这次设计不仅仅是课本上知识的整合,而且还有很多是课外的扩展。这次课程设计可以说是一个挑战。我做的题目是简易计算器的设计。刚开始思路还是挺清晰的,经过思考,发现计算器中数制的转换是这个设计的难点和重点,但是思考数制转换的算法的时候很快就碰壁了,因为通过系统功能调用输入的字符是以ASCII码存放的,并不是有本来实际数学意义的。首先,我解决了输入后的转换,这里使用“乘10加次位”的方法,最初想使用普通的数制转换,结果觉得很难实现。在完成运算完后再转换输出模块的时候,我开始查看课本和有关的资料,知道了一些编程常用的方法。受益匪浅。而后我用心编写这程序。经过自己的努力和同学的帮助终于完成了相应的要求。 在程序完成基本的要求后,我尝试做另外一个题目:代码转换。原计划是:首先单独完成代码转换这一程序,可以实现小写字母向大写字母的转换,还可以实现十进制数向二进制数的转换;然后再把计算器和代码转换结合起来,做成多功能计算器。可是真正实现起来遇到一个问题,就是在十进制向二进制转换的时候,是通过调用子程序转换的,转换完之后不能返回原来调用的地方,而是返回程序的开始。最后只把字母转换功能加到计算器里,最后完成本次的课程设计。下图17是二进制转换的程序运行界面: 图17 当然我还有很多不足之处,比如知识掌握的不够全面,研究的深度不够,写出的代码效率不高,不能做到精简。这些都是我需要去改进的地方。我会在以后的学习中多加注意。 通过这次课程设计,最深体会就是编程调试是很需要耐心的,就算思路清晰,算法正确,但是当要写的代码比较多的时候,特别是使用汇编编程,还是会遇到很多问题的。使用的跳转比较多,而且是对寄存器和存储器进行操作,同时考虑标志位的影响,用起来比较繁琐,在调试的时候经常会发现很漏洞,但是只要认真思考和调试还是会解决问题的。 最后感谢老师的辛苦指导,使我的设计能过成功实现,使我完成了这次课程设计。另外感谢网络给予我便利,让我找到有些相关资料帮我解决了一些问题。同时也感谢与我一起学习、探讨,一起研究、查找资料的同学们。 , 11 , 参考文献 [微型计算机原理及应用] 邓学坚 周斌 编著 [百度知道] 12
本文档为【《微型计算机原理及应用》课程设计_简易计算器的设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_633808
暂无简介~
格式:doc
大小:208KB
软件:Word
页数:26
分类:互联网
上传时间:2017-10-10
浏览量:126