



版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、下载可编辑课程设计设计名称 :微型计算机技术及应用简易计算器学院:信息工程学院课程:微型计算机技术及应用姓名:智学号:201407010252班级:2014级 计算机科学与技术二班.专业 .整理 .下载可编辑目录摘要.3一、前言 . .41.1背景.41.2项目介绍 .4二、课程设计的目的与任务 . .52.1设计目的 .52.2设计任务 .5三、设计过程 . .53.1基础理论 .53.1.1DOSBox 简介 .53.1.2中断 .8四、设计 . .114.1总体方案 .114.2原理框图 .124.3程序代码 .13五、系统模块详细设计与调试 . .245.1系统模块详细设计 .245.
2、1.1设置屏幕显示方式 .245.1.2显示主菜单 .245.1.3从键盘接收一个数字 .245.1.4接收键入用于计算的数 .255.1.5显示结果 .255.1.6子程序 A2将数的 ASCII 码转为二进制数 .255.1.7将计算结果的二进制数转换为对应的十进制数ASCII 码并输出显示 ( A3 程序段) .275.2程序编译、运行与调试 .27六、设计总结 . .29七、参考文献 . .31.专业 .整理 .下载可编辑摘要本次课程设计是通过使用 DOSBox汇编语言编程软件实现的利用汇编语言编写的较为复杂的程序设计。 该课程设计主要是设计一个较为简单的计算器,界面显示要求用户从键盘
3、上分别输入两个随机数,完成四则运算, 然后将运算结果显示到屏幕上。 该设计智能实现简单的正整数之间的四则运算, 无法对小数进行精确地识别。 而除法运算可以精确到 3 位小数,减法可以显示出负数的结果。 采用 DOS调用(INT 21H)来完成键盘的输入和屏幕的输出。通过这次的课程设计能够进一步加深对专业知识和理论知识学习的认识和理解。关键词: DOSBox;微机原理;计算器;汇编语言.专业 .整理 .下载可编辑一、前言1.1 背景计算器是现代人发明的可以进行数字运算的电子机器。 现代的 电子计算器 能进行数学运算的手持电子机器, 拥有集成电路芯片 ,但结构比电脑简单得多,可以说是第一代的 电子
4、计算机 (电脑),且功能也较弱。随着微机和手机的普及,计算器逐渐退出了人们的视野,只能被局限于在课堂之上的计算工具。虽然计算器的使用围逐渐缩小,但计算器依旧在不断发展。 即使科技的发展带动着小型计算器成为一个移动的计算实验室。 但它的核心却依然没有逃脱最简单的四则运算:加、减、乘和除。1.2 项目介绍本次课程设计就是根据微机原理与接口的相关知识,利用BIOS和 DOS的中断来设计一个简易计算器,能够实现加减乘除四则运算,并在屏幕上显示一个主菜单, 提示用户输入相应的数字键, 分别执行加、减、乘、除四种计算功能和结束程序的功能。同时利用BIOS 中断的 10 号功能调用来设置显示方式,利用DOS
5、中断的 01 号和 02 号子功能来完成键盘接收,结果显示。.专业 .整理 .下载可编辑二、课程设计的目的与任务2.1 设计目的为了使学生加深对所学的微机原理知识的理解, 培养学生的专业素质,提高其利用微机原理知识处理问题的能力, 为今后专业课程的学习、毕业设计和工作打下良好的基础。 使学生能比较扎实地掌握微机原理的基础知识和基本理论, 掌握控制系统及有关设备的分析、 开发等基本技能, 受到必要工程训练、 初步的科学研究方法训练和实践锻练,增强分析问题和解决问题的能力, 了解微机原理和接口技术的新发展。2.2 设计任务本课程设计是制作出一个简易的计算器,并可以在DOCBOX上运行,并且正确地完
6、成加、减、乘、除等四则运算。三、设计过程3.1 基础理论3.1.1DOSBox 简介由于微软公司对windos7 的 64 位操作系统取缔了为汇编程序开放的Edit 、Masm、Link 以及 Debug等的功能。所以我选择了一款比较简单但同样适用的.专业 .整理 .下载可编辑Dos环境仿真器 DOSBox。DOSBox是一种创造类DOS环境的开源 x86 仿真器,通常用于运行近代计算机或者非IBMPC兼容机的 MS-DOSIBMPC兼容程序。不仅如此,它还是一个完整的中央处理器仿真器,并不是一个兼容层如dosemu或者依赖 386 类处理器虚拟化能力的Windows与 OS/2VDM。不需要
7、 x86 中央处理器或者任何 DOS版本以运行,并且能运行真实模式与保护模式的程序。虽然 DOSBox是 Dos 的仿真器,但它只是具有搭载环境的能力,却并没有自带汇编程序的运行环境, 。我们需要下载相对应的运行环境 masm或 tasm。当在下载完成后,我们需要对 DOSBox进行相对应的设置。当配置好环境后,现在我们就可以使用它进行Edit,Masm,Link,Debug了EDIT:.专业 .整理 .下载可编辑Masm和 Link :完成 masm和 link两步以后,我们就得到了可以运行的程序exe文件了:.专业 .整理 .下载可编辑Debug:通过这几个步骤,我们就可以得到我们需要的可
8、以正确执行地exe 文件了。3.1.2中断3.1.2.1何谓中断所谓中断,是指 CPU在执行当前程序时,由于外部事件和部事件,使得 CPU中断正在执行的程序, 转到为外部与部事件服务的程序中去执行。当服务程序执行完毕,再返回带刚才被中断的程序的断点处,继续执行。8086 有一个强有力的中断系统,可以处理 256 种不同的中断,每个中断对应一个类型号,所以, 256 种中断对应的中断类型号为0255.这 256 种中断可以分成两大类: 一类叫硬件中断; 一类叫软件中.专业 .整理 .下载可编辑断。硬件中断是通过外部的硬件产生的,所以,也常常把硬件中断。硬件中断又分为两类:一类叫非屏蔽中断;另一类
9、叫可屏蔽中断。非屏蔽中断是通过CPU的 NMI引脚进入,它不受中断允许标志IF 的屏蔽,并且整个系统中只有一个非屏蔽中断。可屏蔽中断是通过CPU的INTR引脚进入的,并且只有当中断允许标志IF 为 1 时,可屏蔽中断才能进入,如果中断允许标志IF 为 0,则可屏蔽中断受到禁止。软件中断是 CPU根据某条指令或者软件对标志寄存器的设置而产生的,从软件中断的产生过程来说,完全和硬件电路无关。 典型的软件中断是除数为 0 引起的中断和中断指令引起的中断。3.1.2.2中断向量和中断向量表8086 的中断系统以位于存 0 段的 03FFH区域的中断向量表为基础,中断向量表中最多可容纳 256 个中断向
10、量。所谓中断向量,实际上就是中断处理子程序的入口地址, 每个中断类型对应一个中断向量。中断向量并不是任意存放的。一个中断向量占4 个存储单元, 其中,前两个单元存放中断处理子程序入口地址的偏移量( IP ), 低位在前,高位在后,后两个单元存放中断处理子程序入口地址的段地址(CS), 同样也是低位在前,高位在后。.专业 .整理 .下载可编辑256 个中断的前 5 个是专用中断。类型 0 的中断称作除数为 0 中断;类型 1 的中断称为单步中断; 非屏蔽中断对应类型 2;类型 3 的中断为断点中断; 而类型 4的中断为溢出中断。 除了非屏蔽中断外,其他几个中断都是软件中断。3.1.2.3中断方式
11、为了提高CPU的效率和使系统有实时性能, 可采用中断传送方式。在中断方式下,外设具有申请 CPU服务的主动权, 当输入设备将数据准备好或输出设备可接收数据时, 便可向 CPU发中断请求, 使 CPU暂时停下来目前的工作而和外设进行一次数据传输。 等输入操作或输出操作完成后, CPU继续进行原来的工作。(如左图:).专业 .整理 .下载可编辑四、设计4.1 总体方案利用 BIOS中断的 10 号功能调用来设置显示方式。利用 DOS中断的 01 号、02 号子功能来完成键盘接受、 结果显示。设置屏幕显示方式。MOV AH,00HMOV AL,NUMINT 10H接着从键盘上接受键值,并判别后转到相
12、应的子模块进行运算,并显示结果。MOV AH,01HINT 21H;AL=键入字符的 ASCII 码从键盘上接收一串字符串命令:MOV AH,0AHMOV DX,OFFSET BUF ;BUF为数据段中定义的数据缓冲区INT 21H显示单个字符命令:MOV AH ,02HINT 21H显示一串字符串的命令:.专业 .整理 .下载可编辑MOV AH ,09HMOV DX ,OFFSET BUF;BUF为被显示字符串的首地址INT 21H十进制数显示过程:将十进制数送到BX中,BX除以 1000,余数送 BX中,商在 AL中,围为 09,显示 AL 中的容。 BX除以 100,余数送 BX中,商在
13、 AL 中,显示 AL中的容,依次类推,直到分出个位数字。如最高位为 0,则不应显示,而非最高位的 0 则显示。可利用设标志位并结合商的方法来决定是否显示 0。4.2 原理框图主程序.专业 .整理 .下载可编辑提示输入第一个数将第一个数的ASCII码转为二进制并保存提示输入第二个数将第二个数的ASCII码转为二进制并保存计 算判断结果正负,并储存结果将结果转为ASCII码,并显示结果提示返回DOS还是重新计算结束子程序4.3 程序代码DATASEGMENTN=15TOPDB 5DUP(0AH).专业 .整理 .下载可编辑DB N DUP( ),Please input a number to
14、choose thearithmetic operation, 0DH,0AHDBN DUP( ), 0DH,0AHDB N DUP( ),1add, 0DH,0AHDBN DUP( ),2subtract, 0DH,0AHDBN DUP( ),3multiply , 0DH,0AHDBN DUP( ),4divide, 0DH,0AHDBN DUP( ),5return to DOS , 0DH,0AHDBN DUP( ), 0DH,0AHDBN DUP( ),CHOICE (1.2.3.4.5):$MESG1DB 0DH,0AH,PLEASE PRESS NUMBER 1.2.3.4.5
15、!$MESG2DB 0DH,0AH,PLEASE INPUT THE FIRST NUMBER :$MESG3DB 0DH,0AH,PLEASE INPUT THE SECOND NUMBER :$MESG4DB 0DH,0AH,PLAY ADD :$MESG5DB 0DH,0AH,PLAY SUBTRACT :$MESG6DB 0DH,0AH,PLAY MULTIPLY :$MESG7DB 0DH,0AH,PLAY DIVIDE :$MESG8DB 0DH,0AH,THE RESULT :$MESG9DB 0DH,0AH,PRESS Q RETURN DOS,ANY PRESS RETURN
16、START!$BUF1DB 6;十进制数的缓冲区,可接收6 个字符DB ?;保留,用于 10 号调用时 DOS填入实际.专业 .整理 .下载可编辑输入字符数DB 6 DUP(?);一个符号位,四位数字ASCII 码,加上一个回车符BUF2DW ?;将第一个数转换为二进制后,放于这里BUF3DB 6 DUP(?),$;将结果转换为ASCII 码后,放在这DATAENDSSTACKSEGMENT STACKSTACKSTACK ENDSCODESEGMENTASSUME CS:CODE , DS:DATASTART: MOV AX,DATAMOV DS,AXMOV AH,00H;设置屏幕显示方式M
17、OV AL,0INT 10HMOV AH,09H; 显示菜单MOV DX,OFFSET TOPINT 21HAA:MOV AH,01H;从键盘接收一个数字INT 21HCMP AL,1; 与 1 比较JNENEXT1;不等于 1 就转到 NEXT1.专业 .整理 .下载可编辑JMP JIA;等于 1 就转到加法程序NEXT1: CMP AL,2;与2比较JNE NEXT2; 不等于 2 就转到 NEXT2JMPJIAN; 等于 2 就转到减法程序NEXT2: CMP AL,3;与3比较JNE NEXT3; 不等于 3 就转到 NEXT3JMPCHENG; 等于 3 就转到乘法程序NEXT3:
18、CMP AL,4;与4比较JNE NEXT4; 不等于 4 就转到 NEXT4JMPCHU; 等于 4 就转到除法程序NEXT4: CMP AL,5;与5比较JNE NEXT5; 不等于 5 就转到 NEXT5MOV AH,4CH; 返回 DOSINT 21HNEXT5: MOV AH,09H; 显示 MESG1MOV DX,OFFSET MESG1INT 21HJMP AA;跳到AAA1 PROC NEARMOV AH,09H; 提示输入第一个数MOV DX,OFFSET MESG2INT 21H.专业 .整理 .下载可编辑MOV AH,0AH; 接收第一个数MOV DX,OFFSET BU
19、F1INT 21HCALL A2; 调用 A2进行 ASCII- 二进制的转换MOVBUF2,AX;把第一个数转换的二进制放在BUF2MOV AH,09H; 提示输入第二个数MOV DX,OFFSET MESG3INT 21HMOV AH,0AH; 接收第二个数MOV DX,OFFSET BUF1INT 21HCALL A2; 调用 A2 把第二个数进行ASCII-二进制转换RETA1ENDPA2PROC NEARMOVCL,BUF1+1; 把 BUF1+1中的实际键入的字符数放入 CLMOV CH,0; CH 清零MOV BX,OFFSET BUF1+2; 把第一个数字的地址放在 BXPUS
20、H BX; 保护 BX.专业 .整理 .下载可编辑PUSH CX;保护CXL1:MOV AL,BXANDAL,0FH; 把 ASCII 码转换为十进制MOV BX,AL; 存放十进制INC BX; 下一个数字的地址LOOP L1POP CX;恢复CXPOP BX;恢复BXMOV AX,0; 将累加和赋零MOV SI,10L2:MUL SIADD AL,BXADC AH,0INC BXLOOP L2; 累加乘 10L3:RETA2ENDPJIA:MOV AH,09H; 加法程序MOV DX,OFFSET MESG4INT 21HCALL A1;调用A1ADDAX,BUF2; 把转换后的放在 BU
21、F2.专业 .整理 .下载可编辑中的第一个数和放在AX的第二个数相加JMP A3JIAN:MOV AH,09H; 减法程序MOV DX,OFFSET MESG5INT 21HCALL A1MOV BX,AX; 把转换后的放在AX的第二个数放到BXMOV AX,BUF2; 把转换后放在BUF2中的第一个数放到AXSBB AX,BX; 两数相减JMP A3CHENG: MOV AH,09H; 乘法程序MOV DX,OFFSET MESG6INT 21HCALL A1MOV BX,AX; 把转换后的放在AX的第二个数放到BXMOV AX,BUF2; 把转换后的放在BUF2中第一个数放到AXMUL B
22、X; 两数相乘JMP A3.专业 .整理 .下载可编辑CHU:MOV AH,09H; 除法程序MOV DX,OFFSET MESG7INT 21HCALL A1MOV DX,AX; 把转换后的放在AX的第二个数放到DXMOV AX,BUF2; 把转换后的放在BUF2中第一个数放到AXDIV DL; 两数相除,商在AL 里MOV AH,0H; 使 AH清零JMP A3A3:MOV BUF3,+; 把 BUF3放+CMP AX,0; 把结果于 0 比较JGE L4; AX0 转到 L4NEG AX; AX0 将 AX取反MOV BUF3,-; 把 BUF3放-L4:CWDMOV BX,10000D
23、IVBX; 商为第一位数字放在 AL,余数放在 DX CALL BB.专业 .整理 .下载可编辑MOV BUF3+1,AL; 把第一个数放在BUF3+1单元中MOV AX,DX; 把放在 DX中的余数放到 AXCWDMOV BX,1000DIVBX; 商为第二位数字放在 AL,余数放在 DXCALL BBMOV BUF3+2,AL; 把第二个数放在BUF3+2单元中MOV AX,DX; 把放在 DX中的余数放到 AXMOV BL,100DIVBL; 商为第三位数字放在 AL,余数放在 AHCALL BBMOV BUF3+3,AL; 把第三个数放在BUF3+3单元中MOV AL,AH; 把放在
24、AH 中的余数放到 ALCBW.专业 .整理 .下载可编辑MOV BL,10DIVBL; 商为第四位数字放在 AL,余数放在 ACALL BBMOV BUF3+4,AL; 把第四个数放在BUF3+4单元中ADDAH,30H;把个位转为 ASSCII码MOV BUF3+5,AH; 把第五个数放在BUF3+5单元中MOV AH,09H; 提示结果MOV DX,OFFSET MESG8INT 21HMOV AH,09HMOVDX,OFFSETBUF3; 把放在 BUF3缓冲区中的结果显示出来INT 21HMOV AH,09H; 提示是返回DOS还是重新计算MOV DX,OFFSET MESG9INT
25、 21HMOV AH,01H; 接收键盘数字.专业 .整理 .下载可编辑INT 21HCMP AL,QJE A4JMP NEXT5; 其他数字重新计算BBPROC NEARCMP AL,0H; 与零比较JE L5JMP L6L5:MOVAL,20H; 等于零,赋 AL 空格JMP L7L6:ADD AL,30H; 不等于零,把数转为 ASSCII 码L7:RETBBENDPA4:MOV AH,4CH; AL 等于 Q 就返回 DOSINT 21HCODEENDSEND START.专业 .整理 .下载可编辑五、系统模块详细设计与调试5.1 系统模块详细设计5.1.1设置屏幕显示方式MOV AH
26、,00HMOV AL,0INT 10H通过调用 BOIS的 OOH号功能来设置屏幕显示方式。 此处 AL=0,即设置屏幕显示方式为40*25 黑白文本。5.1.2显示主菜单MOV AH,09HMOV DX,OFFSET TOPINT 21H先在数据段中定义主菜单中要显示的字符串,再通过调用DOS系统的 09H号功能显示字符串(串尾字符为,但不显示)来完成。5.1.3从键盘接收一个数字MOV AH,01HINT 21H通过调用 DOS系统的 01H号功能键入字符并回车来.专业 .整理 .下载可编辑实现,其出口参数为键入字符的ASCII 码,存在 AL 中。5.1.4接收键入用于计算的数MOV A
27、H,0AHMOV DX,OFFSET BUF1通过调用 DOS系统的 0AH号功能键入字符串至存缓冲区来实现,其入口参数如下:DS:DX=存放键入字符串的缓冲区的首地址;(DS:DX)=用户规定的缓冲区;(DS:DX+1)=实际键入的字符数;从( DS:DX+2)开始放键入的字符串。因此,在下面的程序中运用所键入的数字时要注意字符串的首地址。5.1.5显示结果MOV AH,09HMOV DX,OFFSET BUF3INT 21H将结果存入数据段中定义的缓冲区BUF3中,再通过调用DOS系统的 09H号功能显示字符串(串尾字符为,但不显示)来完成。5.1.6子程序 A2将数的ASCII 码转为二
28、进制数A2PROC NEARMOVCL,BUF1+1; 把 BUF1+1中的实际键入的字符数放入CL.专业 .整理 .下载可编辑MOV CH,0; CH清零MOV BX,OFFSET BUF1+2; 把第一个数字的地址放在 BXPUSH BX;保护BXPUSH CX;保护CXL1:MOV AL,BXAND AL,0FH; 把 ASCII 码转换为十进制MOV BX,AL; 存放十进制INC BX; 下一个数字的地址LOOP L1POP CX;恢复CXPOP BX;恢复BXMOV AX,0; 将累加和赋零MOV SI,10L2:MUL SIADD AL,BXADC AH,0INC BXLOOP
29、L2; 累加乘 10.专业 .整理 .下载可编辑L3:RETA2ENDP入口:十进制数的ASCII 在 BUF1;出口:转换后的二进制数在AX。算法:先将其转换为十进制,再用累加和乘 10 加 X 的方法变为二进制,如将 163 转换为二进制数,可先将累加和赋 0,再计算( 0*10+1)*10+6)*10+3)结果为二进制数。5.1.7将计算结果的二进制数转换为对应的十进制数ASCII码并输出显示(A3 程序段)入口:二进制数在AX;出口:转换后的ASCII 码在 BUF。算法: AX的数围在 +32767 到-32768 之间,先检查 AX符号位,决定输出 +还是 - ,若为负,先求补码得
30、到原码后可与正数统一处理。方法:把将被转换的二进制数先除以10000,商为万位数,再将余数除以1000,商为千位数,以此类推,求出百十位数,剩下的为个位数。最后各个数加上30H,即为对应字符。5.2程序编译、运行与调试在 DOS环境下,键入 EDIT。启动全屏幕编辑软件 EDIT,输入源程序。输入完毕,按 Alt+F 选择 SAVE保存程序(规定扩展名为*.ASM),按 Alt+X 退出 EDIT 状态。退出 EDIT 环境后,输入 ASM或 MASM 文件名(省略扩展名,.专业 .整理 .下载可编辑系统默认为 .ASM),对源程序进行汇编。源程序经汇编后产生三个输出文件:第一个是OBJ文件,
31、即二进制目标文件,这是汇编的主要目的;第二个是 LST文件,即列表文件;第三个是CRF文件,对于一般的程序可以不建立后两个文件。汇编时,计算机会询问汇编后生成的OBJ文件名、 LST文件名和 CRF文件名,问句的右侧是示回答, 如果不想生成 LST文件和CRF文件,则按回车键回答。汇编过程中,如果源程序中有语法错误,则汇编过程结束后,汇编程序会指出源程序中的错误,这时,可以再用编辑程序来修改源程序中的错误,最后,得到没有语法错误的 OBJ文件。汇编程序产生的二进制目标文件不是可执行文件, 还必须用连接程序( LINK)把 OBJ文件转换成可执行的 EXE文件。 LINK 程序有两个输入文件 O
32、BJ和 LIB ,两个输出文件 EXE和 MAP。连接时,输入 LINK 文件名,对汇编生成的 *.OBJ 文件进行连接,计算时会询问生成的 EXE文件名、 MAP文件名以及参与连接的库文件名,如果不想生成 MAP文件,没有库文件参与连接,则按回车键作答。最后,生成相应的 *.EXE 文件。从 LINK 过程的提示信息中,可看到最后给出了一个“无堆栈段”的警告性错误,这并不影响程序的执行。至此,产生了一个 EXE文件,在 DOS环境下可以直接运行该文件。在程序得到正确的结果之前,会产生一些错误,只有经过调试阶段才能纠正程序中的错误,从而的到正确的结果。 在程序编译.专业 .整理 .下载可编辑过程中会提示语法错误,可再用编辑程序来修改源程序中的错误。当没有语法错误而得不到正确结果时,可用调试程序DEBUG来调试。它通过单步、
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农业灌溉设施的运营管理与维护责任合同
- 2025山东济宁汽车工程职业学院招聘工作人员5人(三)考试参考题库及答案解析
- 2025年广西贺州市八步区城区中小学公开选调教师39人考试参考题库及答案解析
- 餐饮行业点餐系统定制开发合同
- 房地产销售合同条款解读与注意
- 写字楼物业设施维护与更新协议
- 商业写字楼智能物业管理协议
- 商业咨询服务合同概要
- 工程服务协议年
- 农业资源合理利用与循环经济协议
- 眼损伤法医学鉴定
- 空气栓塞演练脚本
- GB/T 37232-2018印刷文件鉴定技术规范
- GB/T 28461-2012碳纤维预浸料
- 酒店服务心理学培训教材课件
- 学前教育史全套课件
- 高一新生入学调查表
- 部编人教版历史七年级上册全册教学课件
- 人教版部编四年级道德与法治上册全册课件
- 《高等数学》全册教案教学设计
- 血栓弹力图-PPT课件
评论
0/150
提交评论