微机原理课设--简易计数器设计_第1页
微机原理课设--简易计数器设计_第2页
微机原理课设--简易计数器设计_第3页
微机原理课设--简易计数器设计_第4页
微机原理课设--简易计数器设计_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、1. 总体设计思想及主要功能1.1总体设计思想程序主要分为主程序, 输入子程序, 输出子程序, 加法子程序, 减法子程序, 乘法子程序, 除法子程序。 根椐输入的符号选用不同的运算子程序, 最后调用输 出子程序。 各个程序的具体做法, 详见后面的流程图和分析。 本程序的关键是在 输入、输出程序,值得特别注意的地方是 call 和 ret 的调用,而且还要清楚跳转 的返回地址; 由于计算器比数学用表等计算工具要先进得多, 应该积极倡导学生 加速用计算器取代数学用表的进程。 从键盘输入数据与运算符; 可以进行加、 减、 乘、 除四则运算, 输入和输出的数均必须为十进制的。 输入的数据最大为双字的,

2、 。 如果输入的除数为 0;输出错误信息。输入的表达式有误,输出错误信息。输入 的两个数,不能除尽时,输出除数输入错误信息。如果输入了空格,同样输出错 误信息。 输出的数据最大可输出 4字, 为的是输出乘除法的结果。 除法最后所得 结果可为小数点后四位值。1.2实现的主要功能(1 输入和输出的数均为十进制的。(2 输入的数据最大为双字的且必须是数字, 当输入字母或其他非数字符 号时,输出错误信息。(3 如果输入的除数为 0;输出错误信息。(4 输入的表达式有误,输出错误信息。(5 输入的两个数,有一个大于双字,输出错误信息。(6 如果输入了空格,输出错误信息。(7 输出的数据最大可输出 4字,

3、为的是输出乘法的结果。(8 除法有不能整除的情况时, 输出小数结果保留小数点后四位并显示除 数输入错误信息。2. 简单计算器的流程图 2.1 主程序的流程图 主程序设计思路说明:输入的数据如果超过双字, 就会溢出, 因为我定义的存储器为双字的。 输入 什么样的数都会有一个范围, 一定得有这个信息。 根据输入的符号调用相应的函 数。除法和别的不一样,还要输出余数,并且,除数不能是 0。所以我就在里面 调用了输出函数,要输出两次,而外面只能输出一次,为了更好输出结果,我就 只好这样了。输入 y 可以继续进行运算,要注意的是,要把原来的数给清 0,不 然得不到答案 。2.2 子程序输入函数流程图 子

4、程序输入函数设计思路说明:先把 DATA 中的数据清 0,为的是能继续进行运算,而不会输出错误的答案, result 不用清 0,按任意键返回到重新输入。然后依次执行以下操作:输入数字 和符号; 输入两位十进制数自动结束输入, 如果输入的不是数字和空格, 我就把 其值存到 FUHAO 中,随后进行第二个数的输入;把字符转换成数字,并扩展到 AH 中,把输入的数存起来。因为后面要用到 AX ,会 改变。 SI=0,DATA+SI是第一 个数的低字位, SI=4, DATA+SI是第二个数的低字位。这里都是字乘法, DX 是结 果的高位, AX 是结果的低位。 SI=0, DATA+SI+2是第一

5、个数的高字位,同上。乘 以 10后结果的低位加上前面乘法后 DX 的值,结果存到存储器的高位段。存储 器乘以 10后,加上输入的数字。高字加上产生的进位。2.3 子程序输出函数流程图 6子程序输出函数设计思路说明:这里可以输出 4字的数, 只有乘除法的结果会达到这么大, 为了减少除法的 次数,用了多个比较。 result 存的是加减乘除后的结果。主要算法就是把 result 除以 10,余数进栈,一直除,直到 result 为 0 。出栈,输出结果,一个一个字 符输出。运算之前保存了栈顶 SP ,当栈顶再达到原来的位置时,说明输出 存在 栈内的余数完毕。72.4 子程序除法流程图子程序除法函数

6、设计思路说明:子程序除法除数为双字的 , 当然除数是不能为 0的。除法做的是先从高位开 始,依次除以除数,高位的余数和低位组合起来,再除以除数。运算过程中余数 保存起来。把余数存到 result 中,因为 display 输出的是 result 的值 83. 简单计算器的设计程序CURS MACRO A,B 输出界面设置 MOV AH,2 ;置光标位置MOV BH,0 ;页号为 0MOV DH,A ;设置光标的坐标为 (A.B MOV DL,BINT 10H ;BIOS调用ENDM;-DISPMSG MACRO MESSAGELEA DX,MESSAGE ;MOV AH,9 ;显示字符串INT

7、 21H ;DOS调用ENDM;-CLEAR MACRO COLOR ;清屏MOV AH,6 ;屏幕初始化MOV AL,0 ;页号MOV CH,0 ;设置左上角的坐标为 (0,0 MOV CL,0MOV DL,100 ;MOV DH,100MOV BH,COLOR ;卷入行属性INT 10H ;BIOS调用ENDM.MODEL SMALL.STACK.DATA ;数据段定义MSG0 DB '* * * * * * * * * * * * * * DB ' * *',0DH,0AH;db '* *',0dh,0ah;db '* *',0dh

8、,0ahDB ' * -COUNTER- *' DB ' * *',0DH,0AHDB ' * *',0DH,0AHDB ' * *',0DH,0AHDB ' * DATA1:' 数据输入口 1 DB '_DB ' * DATA2:' 数据输入口 2 DB '_DB ' * *',0DH,0AHDB ' * *',0DH,0AHDB ' * *',0DHDB ' * RESULT:'DB '_DB ' *

9、 *',0DH,0AHDB ' * *',0DH,0AHDB ' * *',0DH,0AHDB ' * *',0DH,0AHDB ' * *',0DH,0AHDB ' * * * * * * * * * * * * * * * *MSG1 DB 'choose +,-,*,/','$' 符号选择 MSG2 DB 'you choose wrong',' MSG3 DB 'Press ESC to Exit!',MSG4 DB 'Pres

10、s any key to continue!' MSG5 DB '-','$'MSG6 DB '.','$'MSG7 DB 'error input!','$'MSG8 DB 'data2 is wrong!','$'DATA1 DW ?DATA2 DW ?.CODE ;代码段从这里开始;- DEC_DIV PROC NEARCWD ;将字转换为双字DIV CXPUSH DXMOV DL,ALADD DL,30H ;MOV AH,2 ;显示输出INT 21H

11、;DOS调用POP DXMOV AX,DXRETDEC_DIV ENDP;- CHANGE PROC NEAR ;十六 /十CMP AX,1000JAE C1 ;AX 1000则转移CMP AX,100JAE C2 ;AX 100则转移CMP AX,10JAE C3 ;AX 10则转移JMP C4 ;AX<10C1: MOV CX,1000DCALL DEC_DIVC2: MOV CX,100DCALL DEC_DIVC3: MOV CX,10DCALL DEC_DIVC4: MOV CX,1DCALL DEC_DIVRETCHANGE ENDP;-BEGIN PROC NEARBACK

12、: CLEAR 1EHCURS 2,20 ;设置光标为(2.20 DISPMSG MSG0 ;显示用户界面 CURS 8,41 ;设置光标为(8, 41 MOV BX,0MOV CX,29NEWCHAR1:MOV AH,1 ;键盘输入并回显 INT 21H ;DOS调用CMP AL,30H ;输入字符检测 JAE J1 ;如果不是,则转移至 J1 JMP D2 ;是,转移到 D2执行 J1: CMP AL,39H ;JBE J2 ;JMP D2 ;J2: SUB AL,30HCBW ;XCHG AX,BXMOV DI,10MUL DIXCHG AX,BXADD BX,AXLOOP NEWCHA

13、R1MOV DATA1,BXCURS 11,41 ;MOV BX,0MOV CX,2NEWCHAR2:MOV AH,1 ;INT 21H ;DOS调用CMP AL,30H ;JAE J3 ;JMP D2J3: CMP AL,39H ;与 9比较 JBE J4 ;JMP D2 ;J4: SUB AL,30H ;CBW ;将 AL 符号扩展到 AH XCHG AX,BXMOV DI,10MUL DIXCHG AX,BXADD BX,AXLOOP NEWCHAR2MOV DATA2,BXMOV AX,DATA1MOV BX,DATA2PUSH AXPUSH BXCURS 15,33 ;DISPMSG

14、 MSG1 ;MOV AH,1 ;INT 21H ;DOS调用CMP AL,'+'JE ADDI ;计算两数之和CMP AL,'-'JE SUBT ;计算两数之差CMP AL,'*'JE MULT ;计算两数之积CMP AL,'/'JE DIVI ;计算两数之商CURS 16,25 ;DISPMSG MSG2 ;JMP D1;- ;ADD THE TWO DATAS 加子程序 ADDI: POP BXPOP AXADD AX,BX ;计算两数字之和 PUSH AXCURS 14,41 ;POP AXCALL CHANGE ;JMP

15、 D1;- ;SUBTRACT THE TWO DATAS SUBT: POP BX 减子程序 POP AXCMP AX,BX ;比较两数大小 JAE D0 ;如果 AX>=BX则跳转 XCHG AX,BXPUSH AXPUSH BXCURS 14,40 ;DISPMSG MSG5 ;显示负号 POP BXPOP AXD0: SUB AX,BX ;计算两数之差 PUSH AXCURS 14,41 ;POP AXCALL CHANGE ;JMP D1;- ;MULTIPLY THE TWO DATAS MULT: POP BX 乘子程序 POP AXMUL BX ;PUSH AXCURS

16、14,41 ;POP AXCALL CHANGE ;JMP D1;- ;DIVIDE THE TWO DATAS DIVI: POP BX 除子程序 POP AXCMP BX,0 ;判断除数是否为 0 JE ERROR ;如果是 0则跳转 CWDDIV BX ;计算两数之商PUSH DX10PUSH AXCURS 14,41 ;POP AXCALL CHANGE ;POP DXCMP DX,0JNE LOP ;JMP D1LOP: MOV CX,4 ;PUSH DXDISPMSG MSG6 ;输出小数点 POP DXCON: PUSH BXMOV AX,DXMOV BX,10MUL BXPOP

17、 BXCWD ;DIV BX ;计算小数点后的数 PUSH DXPUSH CXCALL CHANGE ;POP CXPOP DXCMP DX,0 ;JE D1 ;如果是,则跳转 LOOP CON ;ERROR: CURS 15,33 ; DISPMSG MSG8 ;提示出错 D1: RETD2: PUSH AXPUSH BXCURS 15,33 ;DISPMSG MSG7 ;POP BXPOP AXRETBEGIN ENDP;- MAIN PROC NEARMOV AX,DATAMOV DS,AXMOV ES,AXPUSH DSXOR AX,AXPUSH AXMOV DATA2,0 ;MOV

18、DATA1,0AGAIN:CALL BEGINCURS 16,23 ;DISPMSG MSG3 ;CURS 17,23DISPMSG MSG4 ;MOV AH,7 ;INT 21H ;DOS调用CMP AL,27 ;判断 ESC 退出 JNE AGAIN ;EXIT: MOV AX,4C00H ; INT 21H ;DOS调用MAIN ENDPEND MAIN4. 程序运行及调试4.1 界面初始化 说明:由程序输出界面代码段编辑,界面初始化如上图,其中 DATA1、 DATA2为 数据输入, RESULT 为结果输出。4.2数据的输入输出及错误提示 说明:输入数据 DATA1、 DATA2会弹

19、出四则运算符号 ” choose +,-,*,/” 提示,当选 定运算符号后自动在 RESULT 弹出运算结果,当输入为非四则运算符号(例如:字母、数字时,输出 ESC 退出和 continue 继续提示。 说明:当 DATA1、 DATA2任意一个输入为非数字(例如:字母、符号时,输出 “ error input”错误输入提示,同时输出 ESC 和 continue 提示。4.3加法运算 说明:加法运算中可得到最大值为 198的和,结果输出后同时输出 ESC 退出和 continue 继续提示。4.4减法运算 说明:减法运算中可得到最大值为 98、最小值为 0的差,结果输出后同时输出 ESC

20、 退出和 continue 继续提示。4.5乘法运算 说明:乘法运算中可得到最大值为 9801的积,结果输出后同时输出 ESC 退出和 continue 继续提示。4.6除法运算 说明:除法的整除运算中可得到正确的商,结果输出后同时输出 ESC 退出和 continue 继续提示。 说明:除数为 0的除法运算中,输出“ data2 is wrong”提示,同时输出 ESC 退出 和 continue 继续提示。说明 :非整除情况下,得到四位有效小数正确结果的同时输出“ data2 is wrong” 提示,同时输出输出 ESC 退出和 continue 继续提示。 武汉理工大学微机原理与通信接口课程设计说明书 5.心得与体会 这是上大三的第二个课程设计,由于微机原理与通信接口课程学的不是 很好,所以课设做起来也感觉有些吃力。本次课程设计我做的题目为简单计算 器的程

温馨提示

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

评论

0/150

提交评论