微机原理简易计算器课程设计.docx

上传人:b****3 文档编号:10389489 上传时间:2023-05-25 格式:DOCX 页数:22 大小:184.45KB
下载 相关 举报
微机原理简易计算器课程设计.docx_第1页
第1页 / 共22页
微机原理简易计算器课程设计.docx_第2页
第2页 / 共22页
微机原理简易计算器课程设计.docx_第3页
第3页 / 共22页
微机原理简易计算器课程设计.docx_第4页
第4页 / 共22页
微机原理简易计算器课程设计.docx_第5页
第5页 / 共22页
微机原理简易计算器课程设计.docx_第6页
第6页 / 共22页
微机原理简易计算器课程设计.docx_第7页
第7页 / 共22页
微机原理简易计算器课程设计.docx_第8页
第8页 / 共22页
微机原理简易计算器课程设计.docx_第9页
第9页 / 共22页
微机原理简易计算器课程设计.docx_第10页
第10页 / 共22页
微机原理简易计算器课程设计.docx_第11页
第11页 / 共22页
微机原理简易计算器课程设计.docx_第12页
第12页 / 共22页
微机原理简易计算器课程设计.docx_第13页
第13页 / 共22页
微机原理简易计算器课程设计.docx_第14页
第14页 / 共22页
微机原理简易计算器课程设计.docx_第15页
第15页 / 共22页
微机原理简易计算器课程设计.docx_第16页
第16页 / 共22页
微机原理简易计算器课程设计.docx_第17页
第17页 / 共22页
微机原理简易计算器课程设计.docx_第18页
第18页 / 共22页
微机原理简易计算器课程设计.docx_第19页
第19页 / 共22页
微机原理简易计算器课程设计.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

微机原理简易计算器课程设计.docx

《微机原理简易计算器课程设计.docx》由会员分享,可在线阅读,更多相关《微机原理简易计算器课程设计.docx(22页珍藏版)》请在冰点文库上搜索。

微机原理简易计算器课程设计.docx

微机原理简易计算器课程设计

课程设计报告

 

课程设计名称:

简易计算器

系别:

三系

********

班级:

11通信1班

学号:

***********

成绩:

******

开课时间:

2013-2014学年1学期

一.设计题目

简易计算器

二.主要内容

1、采用模块化程序结构设计软件,可将整个软件分成若干功能模块。

2、画出程序流程图。

3、根据流程图,编写源程序。

4、上机调试程序。

三.具体要求

1、利用BIOS和DOS的中断来设计一个计算器,要求在屏幕上显示一个主菜单,提示用户输入相应的数字键,分别执行加、减、乘、除四种计算功能和结束程序的功能。

2、利用BIOS中断的10号功能调用来设置显示方式。

3、利用DOS中断的01号和02号子功能来完成键盘接收,结果显示。

四.进度安排

周一

周二

周三

周四

周五

讲课设内容,安排任务

查资料,确定硬件电路方案

编程调试

编程调试

写总结报告

五.成绩评定

考核方法:

现场验收(占50%),课程设计报告(占50%)。

考核内容:

学习态度(出勤情况,平时表现等)、方案合理性、程序编制质量、演示效果、设计报告质量。

成绩评定:

优,良,中,及格,不及格。

特别说明:

如发现抄袭,按照不及格处理。

 

前言

课程设计是培养和锻炼学生在学习完本门课后综合应用所学理论知识,解决实际工程设计和应用问题的能力的重要教学环节。

它具有动手、动脑和理论联系实际的特点,是培养在校工科大学生理论联系实际、敢于动手、善于动手和独立自主解决设计实践中遇到的各种问题能力的一个重要教学环节。

计算器在我们日常生活中应用是相当普遍的,可以说它已经成为现代社会生活不可或缺的一部分。

本次课程设计就是根据微机原理与接口的相关知识,利用BIOS和DOS的中断来设计一个简易计算器,能够实现加减乘除四则运算,并在屏幕上显示一个主菜单,提示用户输入相应的数字键,分别执行加、减、乘、除四种计算功能和结束程序的功能。

同时利用BIOS中断的10号功能调用来设置显示方式,利用DOS中断的01号和02号子功能来完成键盘接收,结果显示。

通过本次课程设计,要求学生熟悉和掌握微机系统的软件的方法、设计步骤,使学生得到微机开发应用方面的初步训练,熟练应用8086汇编语言编写应用程序和实际设计中的软件调试方法和步骤,熟悉微机系统的软件开发工具的使用方法。

通过课程设计实践,不仅要培养学生事实求是和严肃认真的工作态度,培养学生的实际动手能力,检验学生对本门课学习的情况,更要培养学生在实际的工程设计中查阅资料,撰写设计报告表达设计思想和结果的能力。

 

1、设计题目

简易计算器

2、设计内容

2.1基本内容

1、编写一个程序,能从键盘上读入数据,并完成加、减、乘、除的计算。

2、利用BIOS和DOS的中断来设计一个计算器,要求在屏幕上显示一个主菜单,提示用户输入相应的数字键,分别执行加、减、乘、除四种计算功能和结束程序的功能。

3、利用BIOS中断的10号功能调用来设置显示方式。

4、利用DOS中断的01号和02号子功能来完成键盘接收,结果显示。

2.2主要功能

一、显示主菜单功能

主菜单如下:

Pleaseinputanumbertochoosethearithmeticoperation

1—add2—subtract3—multiply

4—divideq—returntoDOS

二、计算功能

1、别按数字键“1”、“2”、“3”,则执行相应子模块1、2、3,进行两个字节与两个字节的加法、减法和乘法运算,并在屏幕上显示运算结果。

2、按数字键“4”,执行子模块4,进行两个字节除一个字节的除法运算,并显示结果。

3、按字母键“q”,执行子模块5,程序退出,返回DOS。

4、若按其它键则显示提示字符串:

“PleasePressNumber1、2、3、4、q:

”,然后继续显示主菜单。

 

3、设计原理及方案

3.1总体方案

利用BIOS中断的10号功能调用来设置显示方式。

利用DOS中断的01号、02号子功能来完成键盘接受、结果显示。

设置屏幕显示方式。

MOVAH,00H

MOVAL,NUM(NUM为显示方式属性字)

INT10H

接着从键盘上接受键值,并判别后转到相应的子模块进行运算,并显示结果。

MOVAH,01H

INT21H;AL=键入字符的ASCII码

从键盘上接收一串字符串命令:

MOVAH,0AH

MOVDX,OFFSETBUF;BUF为数据段中定义的数据缓冲区

INT21H

显示单个字符命令:

MOVAH,02H

INT21H

显示一串字符串的命令:

MOVAH,09H

MOVDX,OFFSETBUF;BUF为被显示字符串的首地址

INT21H

十进制数显示过程:

将十进制数送到BX中,BX除以1000,余数送BX中,商在AL中,范围为0~9,显示AL中的内容。

BX除以100,余数送BX中,商在AL中,显示AL中的内容,依次类推,直到分出个位数字。

如最高位为0,则不应显示,而非最高位的0则显示。

可利用设标志位并结合商的方法来决定是否显示0。

3.2程序流程图

3.2.1主程序

图3.1主程序流程图

 

3.2.2计算子程序

图3.2计算子程序流程图

3.3系统模块详细设计

本次设计需要实现的模块图图如1所示

 

图3.3模块图

(1)界面设置

主要实现确定界面样式的功能,以菜单形式显示。

(2)算法选择设置

用于选择加、减、乘、除来进行运算。

(3)数制转换设置

应用十进制——二进制的转换算法来处理加、减、乘、除四则运算。

3.3.1界面设置

1、设置屏幕显示方式:

MOVAH,00H

MOVAL,2

INT10H

通过调用BOIS的O2H号功能来设置屏幕显示方式。

此处AL=2,即设置屏幕显示方式为80*25黑白文本。

2、显示主菜单:

DOS不仅为用户提供了许多指令,而且还有用户可以直接调用的上百个常用子程序。

这些子程序的功能主要是进行磁盘读/写、基本输入/输出管理等。

在使用时,用户只需要了解各个子程序的编号即可,这些编号成为DOS功能调用号。

其调用过程为:

(1)DOS功能条用号送AH寄存器。

(2)如果需要,按要求给定输入参数(由得不需要输入参数)。

(3)写入中断指令“INT21H”。

调用结束,按功能使用其输出参数。

本程序主菜单显示代码如下:

MOVAH,09H

MOVDX,OFFSETTOP

INT21H

先在数据段中定义主菜单中要显示的字符串,再通过调用DOS系统的09H号功能——显示字符串(串尾字符为$,但不显示)来完成。

3.3.2算法选择设置

汇编语言中加减乘除运算指令分别为ADD、SUB、、MUL、DIV。

首先选择要进行的四则运算,规定:

若选择1,则进行加法;选择2,则进行减法;选择3,则进行乘法;选择4,则进行除法。

具体计算过程分析如下:

1、从键盘接收一个数字:

MOVAH,01H

INT21H

通过调用DOS系统的01H号功能——键入字符并回车来实现,其出口参数为键入字符的ASCII码,存在AL中。

2、接收键入用于计算的数:

MOVAH,0AH

MOVDX,OFFSETBUF1

通过调用DOS系统的0AH号功能——键入字符串至内存缓冲区来实现,其入口参数如下:

DS:

DX=存放键入字符串的缓冲区的首地址;(DS:

DX)=用户规定的缓冲区;(DS:

DX+1)=实际键入的字符数;从(DS:

DX+2)开始放键入的字符串。

因此,在下面的程序中运用所键入的数字时要注意字符串的首地址。

3、显示结果:

MOVAH,09H

MOVDX,OFFSETBUF3

INT21H

将结果存入数据段中定义的缓冲区BUF3中,再通过调用DOS系统的09H号功能——显示字符串(串尾字符为$,但不显示)来完成。

3.3.3数制转换设置

1、子程序A2——将数的ASCII码转为二进制数:

A2PROCNEAR

MOVCL,BUF1+1;把BUF1+1中的实际键入的字符数放入CL

MOVCH,0;CH清零

MOVBX,OFFSETBUF1+2;把第一个数字的地址放在BX

PUSHBX;保存BX中的值

PUSHCX;保存CX中的值

L1:

MOVAL,[BX]

ANDAL,0FH;把ASCII码转换为十进制

MOV[BX],AL;存放十进制

INCBX;下一个数字的地址

LOOPL1

POPCX;恢复CX

POPBX;恢复BX

MOVAX,0;将累加和赋零

MOVSI,10

L2:

MULSI

ADDAL,[BX]

ADCAH,0

INCBX

LOOPL2;累加乘10

L3:

RET

A2ENDP

入口:

十进制数的ASCII在BUF1内;出口:

转换后的二进制数在AX内。

算法:

先将其转换为十进制,再用累加和乘10加X的方法变为二进制,如将163转换为二进制数,可先将累加和赋0,再计算(((0*10+1)*10+6)*10+3)结果为二进制数。

2、将计算结果的二进制数转换为对应的十进制数ASCII码并输出显示(A3程序段):

该模块的程序设计详见程序清单及说明中A3、BB程序段

入口:

二进制数在AX内;出口:

转换后的ASCII码在BUF内。

算法:

AX内的数范围在+32767到-32768之间,先检查AX符号位,决定输出‘+’‘-’,若为负,先求补码得到原码后可与正数统一处理。

方法:

把将被转换的二进制数先除以10000,商为万位数,再将余数除以1000,商为千位数,以此类推,求出百十位数,剩下的为个位数。

最后各个数加上30H,即为对应字符。

 

4.汇编源程序代码

DATASEGMENT

N=15

TOPDB5DUP(0AH)

DBNDUP(''),'Pleaseinputanumbertochoosethearithmeticoperation',0DH,0AH

DBNDUP(''),'',0DH,0AH

DBNDUP(''),'1—add2—subtract3—multiply',0DH,0AH

DBNDUP(''),'4—divideq—returntoDOS',0DH,0AH

DBNDUP(''),'',0DH,0AH

DBNDUP(''),'Choice(1.2.3.4.q):

$'

MESG1DB0DH,0AH,'Pleasepressnumber:

1.2.3.4.q!

$'

MESG2DB0DH,0AH,'Pleaseinputthefirstnumber:

$'

MESG3DB0DH,0AH,'Pleaseinputthesecondnumber:

$'

MESG4DB0DH,0AH,'PlayAdd:

$'

MESG5DB0DH,0AH,'PlaySubtract:

$'

MESG6DB0DH,0AH,'PlayMultiply:

$'

MESG7DB0DH,0AH,'PlayDivide:

$'

MESG8DB0DH,0AH,'TheResult:

$'

MESG9DB0DH,0AH,'PRESSQRETURNDOC,ANYPRESSRETURNSTART!

$'

BUF1DB6;十进制数的缓冲区,可接收6个字符

DB?

;保留,用于10号调用时DOC填入实际输入字符数

DB6DUP(?

);一个符号位,四位数字ASCII码,加上一个回车符

BUF2DW?

;将第一个数转换为二进制后,放于这里

BUF3DB6DUP(?

),'$';将结果转换为ASCII码后,放在这里

DATAENDS

STACKSEGMENTSTACK'STACK'

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVAH,00H;设置屏幕显示方式

MOVAL,2

INT10H

MOVAH,09H;显示菜单

MOVDX,OFFSETTOP

INT21H

AA:

MOVAH,01H;从键盘接收一个数字

INT21H

CMPAL,'1';与1比较

JNENEXT1;不等于1就转到NEXT1

JMPJIA;等于1就转到加法程序

NEXT1:

CMPAL,'2';与2比较

JNENEXT2;不等于2就转到NEXT2

JMPJIAN;等于2就转到减法程序

NEXT2:

CMPAL,'3';与3比较

JNENEXT3;不等于3就转到NEXT3

JMPCHENG;等于3就转到乘法程序

NEXT3:

CMPAL,'4';与4比较

JNENEXT4;不等于4就转到NEXT4

JMPCHU;等于4就转到除法程序

NEXT4:

CMPAL,'q';与q比较

JNENEXT5;不等于q就转到NEXT5

MOVAH,4CH;回DOS

INT21H

NEXT5:

MOVAH,09H;显示MESG1

MOVDX,OFFSETMESG1

INT21H

JMPAA;跳到AA

A1PROCNEAR

MOVAH,09H;提示输入第一个数

MOVDX,OFFSETMESG2

INT21H

MOVAH,0AH;接收第一个数

MOVDX,OFFSETBUF1

INT21H

CALLA2;调用A2进行ASCII-二进制的转换

MOVBUF2,AX;把第一个数转换的二进制放在BUF2

MOVAH,09H;提示输入第二个数

MOVDX,OFFSETMESG3

INT21H

MOVAH,0AH;接收第二个数

MOVDX,OFFSETBUF1

INT21H

CALLA2;调用A2把第二个数进行ASCII-二进制转换

RET

A1ENDP

A2PROCNEAR

MOVCL,BUF1+1;把BUF1+1中的实际键入的字符数放入CL

MOVCH,0;CH清零

MOVBX,OFFSETBUF1+2;把第一个数字的地址放在BX

PUSHBX;保存BX中的值

PUSHCX;保存CX中的值

L1:

MOVAL,[BX]

ANDAL,0FH;把ASCII码转换为十进制

MOV[BX],AL;存放十进制

INCBX;下一个数字的地址

LOOPL1

POPCX;恢复CX

POPBX;恢复BX

MOVAX,0;将累加和赋零

MOVSI,10

L2:

MULSI

ADDAL,[BX]

ADCAH,0

INCBX

LOOPL2;累加乘10

L3:

RET

A2ENDP

JIA:

MOVAH,09H;加法程序

MOVDX,OFFSETMESG4

INT21H

CALLA1;调用A1

ADDAX,BUF2;把转换后的放在BUF2中的第一个数和放在AX

JMPA3;的第二个数相加

JIAN:

MOVAH,09H;减法程序

MOVDX,OFFSETMESG5

INT21H

CALLA1

MOVBX,AX;把转换后的放在AX的第二个数放到BX

MOVAX,BUF2;把转换后放在BUF2中的第一个数放到AX

SBBAX,BX;两数相减

JMPA3

CHENG:

MOVAH,09H;乘法程序

MOVDX,OFFSETMESG6

INT21H

CALLA1

MOVBX,AX;把转换后的放在AX的第二个数放到BX

MOVAX,BUF2;把转换后的放在BUF2中第一个数放到AX

MULBX;两数相乘

JMPA3

CHU:

MOVAH,09H;除法程序

MOVDX,OFFSETMESG7

INT21H

CALLA1

MOVDX,AX;把转换后的放在AX的第二个数放到DX

MOVAX,BUF2;把转换后的放在BUF2中第一个数放到AX

DIVDL;两数相除,商在AL里

MOVAH,0H;使AH清零

JMPA3

A3:

MOVBUF3,'+';把BUF3放'+'

CMPAX,0;把结果于0比较

JGEL4;AX>0转到L4

NEGAX;AX<0将AX取反

MOVBUF3,'-';把BUF3放'-'

L4:

CWD

MOVBX,10000

DIVBX;商为第一位数字放在AL,余数放在DX

CALLBB

MOVBUF3+1,AL;把第一个数放在BUF3+1单元中

MOVAX,DX;把放在DX中的余数放到AX

CWD

MOVBX,1000

DIVBX;商为第二位数字放在AL,余数放在DX

CALLBB

MOVBUF3+2,AL;把第二个数放在BUF3+2单元中

MOVAX,DX;把放在DX中的余数放到AX

MOVBL,100

DIVBL;商为第三位数字放在AL,余数放在AH

CALLBB

MOVBUF3+3,AL;把第三个数放在BUF3+3单元中

MOVAL,AH;把放在AH中的余数放到AL

CBW

MOVBL,10

DIVBL;商为第四位数字放在AL,余数放在A

CALLBB

MOVBUF3+4,AL;把第四个数放在BUF3+4单元中

ADDAH,30H;把个位转为ASSCII码

MOVBUF3+5,AH;把第五个数放在BUF3+5单元中

MOVAH,09H;提示结果

MOVDX,OFFSETMESG8

INT21H

MOVAH,09H

MOVDX,OFFSETBUF3;把放在BUF3缓冲区中的结果显示出来

INT21H

MOVAH,09H;提示是返回DOS还是重新计算

MOVDX,OFFSETTOP

INT21H

JMPNEXT5;其他数字重新计算

BBPROCNEAR

CMPAL,0H;与零比较

JEL5

JMPL6

L5:

MOVAL,20H;等于零,赋AL空格

JMPL7

L6:

ADDAL,30H;不等于零,把数转为ASSCII码

L7:

RET

BBENDP

A4:

MOVAH,4CH;AL等于'Q'就返回DOS

INT21H

CODEENDS

ENDSTART

 

5、调试运行结果

5.1操作说明

(1)按提示输入1,2,3,4。

(2)1:

加法ADD。

(3)2:

减法SUB。

(4)3:

乘法MUL。

(5)4:

除法DIV。

(6)输入一个十进制数,回车。

(7)再输入一个十进制数,回车。

(8)显示计算结果。

(9)退出按q。

5.2调试运行结果

(1)进入系统界面,程序运行截图如图5.1所示。

图5.1进入系统界面

(2)加法:

算法选择1,按提示输入两个十六进制数,回车后显示计算式和结果。

程序运行截图如图5.2所示。

图5.2加法程序截图

(3)减法:

算法选择2,按提示输入两个十进制数,回车后显示计算结果,程序运行截图如图5.3所示。

图5.3减法程序截图

(4)乘法:

算法选择3,按提示输入两个十进制数,回车后显示计算结果。

程序运行截图如图5.4所示。

图5.4乘法程序截图

(5)除法:

算法选择3,按提示出入两个十进制数,回车后显示计算结果,程序运行截图如图5.5所示。

图5.5除法程序截图

(6)退出:

按q键即可退出程序。

程序运行截图如图5.6所示。

图5.6退出运行截图

程序运行后可以看出,程序完成了十进制加减乘除四则运算,按q键则退出程序,符合设计要求。

同时,屏幕上可以显示计算结果,也完成了设计要求。

 

6、心得体会

本次为期一周的微机原理与接口课程设计已经结束了,在这并不算长的时间里我却获益良多。

第一,我对本学期所学的理论知识有了更加深刻的理解。

首先是对汇编语言的编程思想、程序设计流程有了更加深刻的认识。

另外,我的课程设计中运用了许多BIOS中断和DOS中断的功能,例如利用BIOS中断的10号功能调用来设置显示方式,利用DOS中断的01号、02号子功能来完成键盘接受、结果显示。

从而加深了我对BIOS和DOS中断的理解。

以前在课堂上一些一知半解的东西,经过这次的实际应用也顿时觉得豁然开朗。

第二,提高了我理论联系实际的能力。

在本科生的学习中,大部分是对理论知识的学习,很少有真正实际应用与实践的机会。

每个学期末的课程设计无疑是十分难得的,我们应好好利用并倍加珍惜。

在上理论课时,对各种程序设计思想都只是有一种肤浅的认识,并没有特别深刻的了解。

即使是实验课也只是停留在比较浅显的阶段,并不能对所学知识进行深入的研究。

但这次的课程设计却让我对学习的理论知识有了更加深刻的认识,并将其运用到实际的软件设计中,在学会运用的过程中再一次对理论进行了升华。

为以后的工作打下了良好的基础。

第三,使我认识到了团结协作的重要性。

完成本次课程设计也不是一件轻松的事情,设计的过程中也总会出现这样那样的问题。

有些问题凭自己绞尽脑汁的空想是很难解决的,这个时候我们就需要其他同学或老师的帮助。

在遇到疑难时,有时看着很困难的问题,在通过与同学们的讨论分析之后就迎刃而解了。

由此可见,同学间的互帮互助是非常重要的。

同时,在有些问题实在无法解决之时,老师的指点总是关键性的。

课程设计的开设不仅巩固了我们对理论知识的掌握,激发了我们对学习的兴趣,同时也锻炼了我们实际动手与应用的能力,使我们对专业领域的知识有了初步的了解,并且提高了我们应用理论知识解决生活中实际存在的问题的能力,这对我们今后走向社会做了良好的开端与铺垫。

 

7、参考文献

[1]戴梅萼史嘉权.微型计算机技术及应用(第4版).北京:

清华大学出版社,2008.3

[2]黄战华.微机原理与接口技术.北京:

机械工业出版社,2002.1

[3]周孟初.微型计算机原理与接口技术.合肥:

中国科学技术大学出版社,2

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2