微型计算机课程设计-简易计算器(李智)_第1页
微型计算机课程设计-简易计算器(李智)_第2页
微型计算机课程设计-简易计算器(李智)_第3页
微型计算机课程设计-简易计算器(李智)_第4页
微型计算机课程设计-简易计算器(李智)_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计设计名称:微型计算机技术及应用——简易计算器学院:信息工程学院课程:微型计算机技术及应用姓名:李智学号:202307010252班级:2023级计算机科学与技术二班目录摘要 3一、 前言 41.1背景 41.2工程介绍 4二、 课程设计的目的与任务 52.1设计目的 52.2设计任务 5三、 设计过程 53.1根底理论 5简介 5中断 8四、 设计 114.1总体方案 114.2原理框图 124.3程序代码 13五、 系统模块详细设计与调试 245.1系统模块详细设计 24设置屏幕显示方式 24显示主菜单 24从键盘接收一个数字 24接收键入用于计算的数 25显示结果 25子程序A2——将数的ASCII码转为二进制数 25将计算结果的二进制数转换为对应的十进制数ASCII码并输出显示〔A3程序段〕 275.2程序编译、运行与调试 27六、 设计总结 29七、 参考文献 31摘要本次课程设计是通过使用DOSBox汇编语言编程软件实现的利用汇编语言编写的较为复杂的程序设计。该课程设计主要是设计一个较为简单的计算器,界面显示要求用户从键盘上分别输入两个随机数,完成四那么运算,然后将运算结果显示到屏幕上。该设计智能实现简单的正整数之间的四那么运算,无法对小数进行精确地识别。而除法运算可以精确到3位小数,减法可以显示出负数的结果。采用DOS调用〔INT21H〕来完成键盘的输入和屏幕的输出。通过这次的课程设计能够进一步加深对专业知识和理论知识学习的认识和理解。关键词:DOSBox;微机原理;计算器;汇编语言前言1.1背景计算器是现代人创造的可以进行数字运算的电子机器。现代的电子计算器能进行数学运算的手持电子机器,拥有集成电路芯片,但结构比电脑简单得多,可以说是第一代的电子计算机〔电脑〕,且功能也较弱。随着微机和的普及,计算器逐渐退出了人们的视野,只能被局限于在课堂之上的计算工具。虽然计算器的使用范围逐渐缩小,但计算器依旧在不断开展。即使科技的开展带动着小型计算器成为一个移动的计算实验室。但它的核心却依然没有逃脱最简单的四那么运算:加、减、乘和除。1.2工程介绍本次课程设计就是根据微机原理与接口的相关知识,利用BIOS和DOS的中断来设计一个简易计算器,能够实现加减乘除四那么运算,并在屏幕上显示一个主菜单,提示用户输入相应的数字键,分别执行加、减、乘、除四种计算功能和结束程序的功能。同时利用BIOS中断的10号功能调用来设置显示方式,利用DOS中断的01号和02号子功能来完成键盘接收,结果显示。课程设计的目的与任务2.1设计目的为了使学生加深对所学的微机原理知识的理解,培养学生的专业素质,提高其利用微机原理知识处理问题的能力,为今后专业课程的学习、毕业设计和工作打下良好的根底。使学生能比拟扎实地掌握微机原理的根底知识和根本理论,掌握控制系统及有关设备的分析、开发等根本技能,受到必要工程训练、初步的科学研究方法训练和实践锻练,增强分析问题和解决问题的能力,了解微机原理和接口技术的新开展。2.2设计任务本课程设计是制作出一个简易的计算器,并可以在DOCBOX上运行,并且正确地完成加、减、乘、除等四那么运算。设计过程3.1根底理论Box简介由于微软公司对windos7的64位操作系统取缔了为汇编程序开放的Edit、Masm、Link以及Debug等的功能。所以我选择了一款比拟简单但同样适用的Dos环境仿真器——DOSBox。DOSBox是一种创造类DOS环境的开源x86仿真器,通常用于运行近代计算机或者非IBMPC兼容机的MS-DOSIBMPC兼容程序。不仅如此,它还是一个完整的中央处理器仿真器,并不是一个兼容层如dosemu或者依赖386类处理器虚拟化能力的Windows与OS/2VDM。不需要x86中央处理器或者任何DOS版本以运行,并且能运行真实模式与保护模式的程序。虽然DOSBox是Dos的仿真器,但它只是具有搭载环境的能力,却并没有自带汇编程序的运行环境,。我们需要下载相对应的运行环境masm或tasm。当在下载完成后,我们需要对DOSBox进行相对应的设置。当配置好环境后,现在我们就可以使用它进行Edit,Masm,Link,Debug了EDIT:Masm和Link:完成masm和link两步以后,我们就得到了可以运行的程序exe文件了:Debug:通过这几个步骤,我们就可以得到我们需要的可以正确执行地exe文件了。中断3.1.2.1何谓中断所谓中断,是指CPU在执行当前程序时,由于外部事件和内部事件,使得CPU中断正在执行的程序,转到为外部与内部事件效劳的程序中去执行。当效劳程序执行完毕,再返回带刚刚被中断的程序的断点处,继续执行。8086有一个强有力的中断系统,可以处理256种不同的中断,每个中断对应一个类型号,所以,256种中断对应的中断类型号为0~255.这256种中断可以分成两大类:一类叫硬件中断;一类叫软件中断。硬件中断是通过外部的硬件产生的,所以,也常常把硬件中断。硬件中断又分为两类:一类叫非屏蔽中断;另一类叫可屏蔽中断。非屏蔽中断是通过CPU的NMI引脚进入,它不受中断允许标志IF的屏蔽,并且整个系统中只有一个非屏蔽中断。可屏蔽中断是通过CPU的INTR引脚进入的,并且只有当中断允许标志IF为1时,可屏蔽中断才能进入,如果中断允许标志IF为0,那么可屏蔽中断受到禁止。软件中断是CPU根据某条指令或者软件对标志存放器的设置而产生的,从软件中断的产生过程来说,完全和硬件电路无关。典型的软件中断是除数为0引起的中断和中断指令引起的中断。中断向量和中断向量表8086的中断系统以位于内存0段的0~3FFH区域的中断向量表为根底,中断向量表中最多可容纳256个中断向量。所谓中断向量,实际上就是中断处理子程序的入口地址,每个中断类型对应一个中断向量。中断向量并不是任意存放的。一个中断向量占4个存储单元,其中,前两个单元存放中断处理子程序入口地址的偏移量〔IP〕,低位在前,高位在后,后两个单元存放中断处理子程序入口地址的段地址〔CS〕,同样也是低位在前,高位在后。256个中断的前5个是专用中断。类型0的中断称作除数为0中断;类型1的中断称为单步中断;非屏蔽中断对应类型2;类型3的中断为断点中断;而类型4的中断为溢出中断。除了非屏蔽中断外,其他几个中断都是软件中断。中断方式为了提高CPU的效率和使系统有实时性能,可采用中断传送方式。在中断方式下,外设具有申请CPU效劳的主动权,当输入设备将数据准备好或输出设备可接收数据时,便可向CPU发中断请求,使CPU暂时停下来目前的工作而和外设进行一次数据传输。等输入操作或输出操作完成后,CPU继续进行原来的工作。〔如左图:〕设计4.1总体方案利用BIOS中断的10号功能调用来设置显示方式。利用DOS中断的01号、02号子功能来完成键盘接受、结果显示。设置屏幕显示方式。MOVAH,00HMOVAL,NUMINT10H接着从键盘上接受键值,并判别后转到相应的子模块进行运算,并显示结果。MOVAH,01HINT21H;AL=键入字符的ASCII码从键盘上接收一串字符串命令:MOVAH,0AHMOVDX,OFFSETBUF;BUF为数据段中定义的数据缓冲区INT21H显示单个字符命令:MOVAH,02HINT21H显示一串字符串的命令:MOVAH,09HMOVDX,OFFSETBUF;BUF为被显示字符串的首地址INT21H十进制数显示过程:将十进制数送到BX中,BX除以1000,余数送BX中,商在AL中,范围为0~9,显示AL中的内容。BX除以100,余数送BX中,商在AL中,显示AL中的内容,依次类推,直到分出个位数字。如最高位为0,那么不应显示,而非最高位的0那么显示。可利用设标志位并结合商的方法来决定是否显示0。4.2原理框图主程序提示输入第一个数提示输入第一个数提示输入第二个数计算判断结果正负,并储存结果将结果转为ASCII码,并显示结果提示返回DOS还是重新计算将第一个数的ASCII码转为二进制并保存将第二个数的ASCII码转为二进制并保存结束子程序4.3程序代码DATASEGMENTN=15TOPDB5DUP(0AH)DBNDUP(''),'Pleaseinputanumbertochoosethearithmeticoperation',0DH,0AHDBNDUP(''),'',0DH,0AHDBNDUP(''),'1—add',0DH,0AHDBNDUP(''),'2—subtract',0DH,0AHDBNDUP(''),'3—multiply',0DH,0AHDBNDUP(''),'4—divide',0DH,0AHDBNDUP(''),'5—returntoDOS',0DH,0AHDBNDUP(''),'',0DH,0AHDBNDUP(''),'CHOICE(.4.5):$'MESG1DB0DH,0AH,'PLEASEPRESSNUMBER.4.5!$'MESG2DB0DH,0AH,'PLEASEINPUTTHEFIRSTNUMBER:$'MESG3DB0DH,0AH,'PLEASEINPUTTHESECONDNUMBER:$'MESG4DB0DH,0AH,'PLAYADD:$'MESG5DB0DH,0AH,'PLAYSUBTRACT:$'MESG6DB0DH,0AH,'PLAYMULTIPLY:$'MESG7DB0DH,0AH,'PLAYDIVIDE:$'MESG8DB0DH,0AH,'THERESULT:$'MESG9DB0DH,0AH,'PRESSQRETURNDOS,ANYPRESSRETURNSTART!$'BUF1DB6;十进制数的缓冲区,可接收6个字符DB?;保存,用于10号调用时DOS填入实际输入字符数DB6DUP(?);一个符号位,四位数字ASCII码,加上一个回车符BUF2DW?;将第一个数转换为二进制后,放于这里BUF3DB6DUP(?),'$';将结果转换为ASCII码后,放在这DATAENDSSTACKSEGMENTSTACK'STACK'STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAH,00H;设置屏幕显示方式MOVAL,0INT10HMOVAH,09H;显示菜单MOVDX,OFFSETTOPINT21HAA:MOVAH,01H;从键盘接收一个数字INT21HCMPAL,'1';与1比拟JNENEXT1;不等于1就转到NEXT1JMPJIA;等于1就转到加法程序NEXT1:CMPAL,'2';与2比拟JNENEXT2;不等于2就转到NEXT2JMPJIAN;等于2就转到减法程序NEXT2:CMPAL,'3';与3比拟JNENEXT3;不等于3就转到NEXT3JMPCHENG;等于3就转到乘法程序NEXT3:CMPAL,'4';与4比拟JNENEXT4;不等于4就转到NEXT4JMPCHU;等于4就转到除法程序NEXT4:CMPAL,'5';与5比拟JNENEXT5;不等于5就转到NEXT5MOVAH,4CH;返回DOSINT21HNEXT5:MOVAH,09H;显示MESG1MOVDX,OFFSETMESG1INT21HJMPAA;跳到AAA1PROCNEARMOVAH,09H;提示输入第一个数MOVDX,OFFSETMESG2INT21HMOVAH,0AH;接收第一个数MOVDX,OFFSETBUF1INT21HCALLA2;调用A2进行ASCII-二进制的转换MOVBUF2,AX;把第一个数转换的二进制放在BUF2MOVAH,09H;提示输入第二个数MOVDX,OFFSETMESG3INT21HMOVAH,0AH;接收第二个数MOVDX,OFFSETBUF1INT21HCALLA2;调用A2把第二个数进行ASCII-二进制转换RETA1ENDPA2PROCNEARMOVCL,BUF1+1;把BUF1+1中的实际键入的字符数放入CLMOVCH,0;CH清零MOVBX,OFFSETBUF1+2;把第一个数字的地址放在BXPUSHBX;保护BXPUSHCX;保护CXL1:MOVAL,[BX]ANDAL,0FH;把ASCII码转换为十进制MOV[BX],AL;存放十进制INCBX;下一个数字的地址LOOPL1POPCX;恢复CXPOPBX;恢复BXMOVAX,0;将累加和赋零MOVSI,10L2:MULSIADDAL,[BX]ADCAH,0INCBXLOOPL2;累加乘10L3:RETA2ENDPJIA:MOVAH,09H;加法程序MOVDX,OFFSETMESG4INT21HCALLA1;调用A1ADDAX,BUF2;把转换后的放在BUF2中的第一个数和放在AX的第二个数相加JMPA3JIAN:MOVAH,09H;减法程序MOVDX,OFFSETMESG5INT21HCALLA1MOVBX,AX;把转换后的放在AX的第二个数放到BXMOVAX,BUF2;把转换后放在BUF2中的第一个数放到AXSBBAX,BX;两数相减JMPA3CHENG:MOVAH,09H;乘法程序MOVDX,OFFSETMESG6INT21HCALLA1MOVBX,AX;把转换后的放在AX的第二个数放到BXMOVAX,BUF2;把转换后的放在BUF2中第一个数放到AXMULBX;两数相乘JMPA3CHU:MOVAH,09H;除法程序MOVDX,OFFSETMESG7INT21HCALLA1MOVDX,AX;把转换后的放在AX的第二个数放到DXMOVAX,BUF2;把转换后的放在BUF2中第一个数放到AXDIVDL;两数相除,商在AL里MOVAH,0H;使AH清零JMPA3A3:MOVBUF3,'+';把BUF3放'+'CMPAX,0;把结果于0比拟JGEL4;AX>0转到L4NEGAX;AX<0将AX取反MOVBUF3,'-';把BUF3放'-'L4:CWDMOVBX,10000DIVBX;商为第一位数字放在AL,余数放在DXCALLBBMOVBUF3+1,AL;把第一个数放在BUF3+1单元中MOVAX,DX;把放在DX中的余数放到AXCWDMOVBX,1000DIVBX;商为第二位数字放在AL,余数放在DXCALLBBMOVBUF3+2,AL;把第二个数放在BUF3+2单元中MOVAX,DX;把放在DX中的余数放到AXMOVBL,100DIVBL;商为第三位数字放在AL,余数放在AHCALLBBMOVBUF3+3,AL;把第三个数放在BUF3+3单元中MOVAL,AH;把放在AH中的余数放到ALCBWMOVBL,10DIVBL;商为第四位数字放在AL,余数放在ACALLBBMOVBUF3+4,AL;把第四个数放在BUF3+4单元中ADDAH,30H;把个位转为ASSCII码MOVBUF3+5,AH;把第五个数放在BUF3+5单元中MOVAH,09H;提示结果MOVDX,OFFSETMESG8INT21HMOVAH,09HMOVDX,OFFSETBUF3;把放在BUF3缓冲区中的结果显示出来INT21HMOVAH,09H;提示是返回DOS还是重新计算MOVDX,OFFSETMESG9INT21HMOVAH,01H;接收键盘数字INT21HCMPAL,'Q'JEA4JMPNEXT5;其他数字重新计算BBPROCNEARCMPAL,0H;与零比拟JEL5JMPL6L5:MOVAL,20H;等于零,赋AL空格JMPL7L6:ADDAL,30H;不等于零,把数转为ASSCII码L7:RETBBENDPA4:MOVAH,4CH;AL等于'Q'就返回DOSINT21HCODEENDSENDSTART系统模块详细设计与调试5.1系统模块详细设计设置屏幕显示方式MOVAH,00HMOVAL,0INT10H通过调用BOIS的OOH号功能来设置屏幕显示方式。此处AL=0,即设置屏幕显示方式为40*25黑白文本。显示主菜单MOVAH,09HMOVDX,OFFSETTOPINT21H先在数据段中定义主菜单中要显示的字符串,再通过调用DOS系统的09H号功能——显示字符串〔串尾字符为$,但不显示〕来完成。从键盘接收一个数字MOVAH,01HINT21H通过调用DOS系统的01H号功能——键入字符并回车来实现,其出口参数为键入字符的ASCII码,存在AL中。接收键入用于计算的数MOVAH,0AHMOVDX,OFFSETBUF1通过调用DOS系统的0AH号功能——键入字符串至内存缓冲区来实现,其入口参数如下:DS:DX=存放键入字符串的缓冲区的首地址;〔DS:DX〕=用户规定的缓冲区;〔DS:DX+1〕=实际键入的字符数;从〔DS:DX+2〕开始放键入的字符串。因此,在下面的程序中运用所键入的数字时要注意字符串的首地址。显示结果MOVAH,09HMOVDX,OFFSETBUF3INT21H将结果存入数据段中定义的缓冲区BUF3中,再通过调用DOS系统的09H号功能——显示字符串〔串尾字符为$,但不显示〕来完成。子程序A2——将数的ASCII码转为二进制数A2PROCNEARMOVCL,BUF1+1;把BUF1+1中的实际键入的字符数放入CLMOVCH,0;CH清零MOVBX,OFFSETBUF1+2;把第一个数字的地址放在BXPUSHBX;保护BXPUSHCX;保护CXL1:MOVAL,[BX]ANDAL,0FH;把ASCII码转换为十进制MOV[BX],AL;存放十进制INCBX;下一个数字的地址LOOPL1POPCX;恢复CXPOPBX;恢复BXMOVAX,0;将累加和赋零MOVSI,10L2:MULSIADDAL,[BX]ADCAH,0INCBXLOOPL2;累加乘10L3:RETA2ENDP入口:十进制数的ASCII在BUF1内;出口:转换后的二进制数在AX内。算法:先将其转换为十进制,再用累加和乘10加X的方法变为二进制,如将163转换为二进制数,可先将累加和赋0,再计算〔〔〔0*10+1〕*10+6〕*10+3〕结果为二进制数。将计算结果的二进制数转换为对应的十进制数ASCII码并输出显示〔A3程序段〕入口:二进制数在AX内;出口:转换后的ASCII码在BUF内。算法:AX内的数范围在+32767到-32768之间,先检查AX符号位,决定输出‘+’还是‘-’,假设为负,先求补码得到原码后可与正数统一处理。方法:把将被转换的二进制数先除以10000,商为万位数,再将余数除以1000,商为千位数,以此类推,求出百十位数,剩下的为个位数。最后各个数加上30H,即为对应字符。5.2程序编译、运行与调试在DOS环境下,键入EDIT。启动全屏幕编辑软件EDIT,输入源程序。输入完毕,按Alt+F选择SAVE保存程序〔规定扩展名为*.ASM〕,按Alt+X退出EDIT状态。退出EDIT环境后,输入ASM或MASM文件名↙〔省略扩展名,系统默认为.ASM〕,对源程序进行汇编。源程序经汇编后产生三个输出文件:第一个是OBJ文件,即二进制目标文件,这是汇编的主要目的;第二个是LST文件,即列表文件;第三个是CRF文件,对于一般的程序可以不建立后两个文件。汇编时,计算时机询问汇编后生成的OBJ文件名、LST文件名和CRF文件名,问句的右侧是示范答复,如果不想生成LST文件和CRF文件,那么按回车键答复。汇编过程中,如果源程序中有语法错误,那么汇编过程结束后,汇编程序会指出源程序中的错误,这时,可以再用编辑程序来修改源程序中的错误,最后,得到没有语法错误的OBJ文件。汇编程序产生的二进制目标文件不是可

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论