课程设计报告--纯软件设计出题程序.doc_第1页
课程设计报告--纯软件设计出题程序.doc_第2页
课程设计报告--纯软件设计出题程序.doc_第3页
课程设计报告--纯软件设计出题程序.doc_第4页
课程设计报告--纯软件设计出题程序.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

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

文档简介

课程设计报告( 20132014年度第一学期)名 称: 微机原理及应用 题 目:纯软件设计出题程序院 系: 控计学院 班 级: 学 号: 学生姓名: 指导教师: 设计周数: 同组人: 成 绩: 日期:2014年1月9日 课程 课程设计(综合实验)报告一、课程设计的目的与要求1 通过纯软件编程实现随机抽取10道简单的加减乘除运算题 2 要求给出开始答题时间、答题结束时间以及总用时 3 要求对题目结果进行判断并给出得分二、设计正文1 需求分析 1 . 1 MASM编程软件2. 总体设计 2 . 1 产生两个随机运算数及随机运算符 2 . 2 将运算数A和B以十进制方式输入 2 . 3 产生一个随机运算式 2 . 4 在屏幕上显示开始时间、结束时间及时间差 2 . 5 判断结果的正确与否并给出最终得分 三、课程设计总结1 个人总结 本次课程设计我们做的课题是利用MASM编程软件设计一个自动出题程序,两人一组。整体设计构想由我们两人共同完成,我负责主程序框架以及随机数、屏幕背景、系统时间读取这些部分。对于 主程序框架,它是整个程序的骨架,通过组内商量,我们最终确定了程序的流程:在进行初始化后,要对屏幕背景进行设置,接着确定题目数量、生成随机运算式,然后根据系统算出的正确结果对输入的结果进行判断并给出得分。在程序编写过程中,我也遇到了许多问题,其中包含有许多的调用,如屏幕背景设置、时间的调用等以及随机数的获得。经过反复的修改、查阅资料、百度,我们的程序最终能够完成预期的基本功能。我还负责了程序调试的部分,由于程序是由两个人分开来写的,所以整合在一起后遇到了许多问题,寄存器的使用错乱是最严重的,之后经过一次次的调试,我们的程序最终总算是基本完成了。 通过本次课程设计,我总算学会了编程,学会了使用MASM,也终于体会到了什么叫学以致用。这让我获得了很大的满足感。不过我们的程序还存在不少缺点,对于除法运算,当结果不是整数时,做题时它的结果该怎么书写尚未找到方法,因此我们的程序中只涉及了加减乘这三种运算。2. 团体总结 本次课程设计,我们是两人一组,由于人数的原因,我们没有做太难的课题,只是受网上模拟考试的启发想到了这个课题。两人合作中,互相配合显得尤为重要,在课程设计过程中,我们明确分工又彼此配合,遇到问题积极讨论,或是查阅书籍,或是上网搜索,或是找人询问。在我们的通力合作下,我们解决了许多问题。 对于本次课程设计的结果我们还是比较满意的,我们在此收获了很多。不过,我们的程序还有不足的地方,那就是其中没有除法运算。为了解决问题,我们也进行过积极的讨论,遗憾的是仍然没有解决这一问题。四、参考文献1李继灿.新编16/32位微型计算机原理及应用.清华大学出版社.第4版.2008.72马力妮.80x86汇编语言程序设计.机械工程出版社.第2版.2009.6(2012.1重印)附录(设计流程图、程序、表格、数据等)1、程序流程图 开始初始化做题?Y产生随机数值产生运算符“+”?“-”?“*”?“/”?NNN加减乘除YYYY题目数量T=0T=10?YN存储判断,计分T=T+1结束N 2、程序代码 HUICHE MACRO ;回车换行 MOV DL,0DH MOV AH,2 INT 21H MOV DL,0AH MOV AH,2 INT 21H ENDMDISP1 MACRO X ;将数字A,B十进制输出 AL LOCAL SHI LOCAL GEE PUSHA MOV AL,X MOV AH,0 CMP AX,10 JAE SHI CMP AX,0 JAE GEESHI: MOV BX,10 DIV BL MOV CH,AH MOV DL,AL ADD DL,30H MOV AH,2 ;屏幕显示 INT 21H MOV AL,CH MOV AH,0 GEE: MOV DL,AL ADD DL,30H MOV AH,2 INT 21H POPA ENDMDISP3 MACRO X ;时间的输出 AL LOCAL SHI2 LOCAL GEE2 PUSHA MOV AL,X MOV AH,0SHI2: MOV BX,10 DIV BL MOV CH,AH MOV DL,AL ADD DL,30H MOV AH,2 INT 21H MOV AL,CH MOV AH,0 GEE2: MOV DL,AL ADD DL,30H MOV AH,2 INT 21H POPA ENDMDISP2 MACRO Y ;将结果十进制输出 AX,先判断结果是几位数 LOCAL QIAN1 LOCAL BAI1 LOCAL SHI1 LOCAL GEE1 PUSHA MOV AX,Y CMP AX,1000 JAE QIAN1 CMP AX,100 JAE BAI1 CMP AX,10 JAE SHI1 CMP AX,0 JAE GEE1QIAN1: MOV BX,1000 MOV DX,0 DIV BX MOV SI,DX ;YUSHU MOV DX,AX ADD DL,30H MOV AH,2 INT 21H MOV AX,SI MOV DX,0BAI1: MOV BX,100 DIV BL MOV CH,AH ;YUSHU MOV DL,AL ADD DL,30H MOV AH,2 INT 21H MOV AL,CH MOV AH,0 SHI1: MOV BX,10 DIV BL MOV CH,AH ;YUSHU MOV DL,AL ADD DL,30H MOV AH,2 INT 21H MOV AL,CH MOV AH,0GEE1: MOV DL,AL ADD DL,30H MOV AH,2 INT 21H POPA ENDM YUNSUAN MACRO X,Y,Z ;其中,A=X,B=Y,符号为Z。运算结果存到R中 LOCAL JIA1 LOCAL JIAN1 LOCAL CHENG1 LOCAL CHU1 LOCAL EXIT1 PUSHA MOV AL,X MOV CL,Y MOV BL,Z CMP BL,+ JE JIA1 CMP BL,- JE JIAN1 CMP BL,* JE CHENG1 CMP BL,/ JE CHU1JIA1: ADD AL,CL MOV AH,0 MOV R,AX JMP EXIT1JIAN1: SUB AL,CL MOV AH,0 MOV R,AX JMP EXIT1CHENG1: MOV AH,0 MUL CL MOV R,AX JMP EXIT1CHU1: MOV AH,0 DIV CL MOV AH,0 MOV R,AXEXIT1: POPA ENDMDATAS SEGMENT ;此处输入数据段代码 X DW 0 Y DW 0 ;用来存得分 H DB ? ;开始时间 M DB ? S DB ? WH DB ?;时间差 WM DB ? WS DB ? HA DB ?;结束时间 MA DB ? SA DB ? A DB ? ;第一运算数 B DB ? ;第二运算数 R DW ? ;正确结果的存储 FUHAO DB ?;符号 BUFF DB 6,?,6 DUP(?);用来写输入的结果 R1 DW 0;存写入的结果 ;ARRAY DB 10 DUP(?),$;存储每题的结果 TIT DB Children Answering System,$ STA DB 1.start to test,$ DERE DB Do you want to check detailed results Y/N,$ QU DB 2.are you ready,please press Sto begin,$ STATIME DB Start Time: ,$ ENDTIME DB End Time: ,$ TTIME DB Total Time: ,$ INFO1 DB Please input correct number,$ TIMU DB Question : ,$ TP DB Total Points: ,$ TMGS DB Qing shu ru ti mu ge shu : ,$ DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码INI: CALL INITIAL ;跳转到背景设置 MOV AH,7 ;键盘输入(无回显) INT 21H CMP AL,53H ;用符号S表示开始做题 JE STAR CMP AL,45H ;用符号E表示结束做题 JE EXIT9 JMP WRSTAR: MOV AH,7 ;屏幕下滚 MOV AL,0 MOV CH,0 MOV CL,0 MOV DH,24 MOV DL,79 MOV BH,00110000B ;答题界面,淡蓝底黑字 INT 10H CALL TIME ;开始时间 MOV AH,2 ;设置光标位置 MOV BX,0 ;页号 MOV DH,2 ;行号 MOV DL,25 ;列号 INT 10H LEA DX, STATIME MOV AH,9 INT 21H MOV DL,H ;输出开始时间 DISP3 DL MOV DL,: MOV AH,2 ;显示一字符 INT 21H MOV DL,M DISP3 DL MOV DL,: MOV AH,2 INT 21H MOV DL,S DISP3 DL HUICHE MOV CX,10;出十个题 HUICHELOOP1: LEA DX,TIMU MOV AH,9 INT 21H CALL SUANSHI LOOP LOOP1 MOV AH,2 MOV BX,0 MOV DH,15 MOV DL,25 INT 10H LEA DX,TP MOV AH,9 INT 21H MOV DX,Y ;最后得分 DISP2 DX HUICHE CALL TIME1 ;结束时间,并算出时间差 MOV AH,2 MOV BX,0 MOV DH,16 MOV DL,25 INT 10H ;设置光标位置 LEA DX,ENDTIME MOV AH,9 INT 21H ;输出字符串“End Time :” MOV DL,HA DISP3 DL MOV DL,: MOV AH,2 INT 21H MOV DL,MA DISP3 DL MOV DL,: MOV AH,2 INT 21H MOV DL,SA DISP3 DL ;输出结束时间 HUICHE MOV AH,2 MOV BX,0 MOV DH,17 MOV DL,25 INT 10H ;设置光标位置 LEA DX,TTIME MOV AH,9 INT 21H ;输出字符串“Total Time : ” MOV DL,WM DISP3 DL MOV DL,: MOV AH,2 INT 21H MOV DL,WS DISP3 DL MOV AH,7 INT 21H ;输出时间差EXIT10: MOV Y,0 JMP INI;返回去WR: HUICHE LEA DX,INFO1 MOV AH,9 INT 21H JMP EXIT10 EXIT9: MOV AH,4CH INT 21H ;程序结束 RAND1 PROC ;A随机数1,A PUSH AX PUSH BX PUSH CX PUSH DX STI MOV AH,0 INT 1AH MOV AX,DX AND AH,03H ;清空高六位,防止溢出 MOV DL,50 ;得到1100的随机数 DIV DL MOV BL,AH ;随机数给到BL中 MOV BH,0 INC BX MOV A,BL POP DX POP CX POP BX POP AX RETRAND1 ENDPRAND2 PROC ;B随机数2,B PUSH AX PUSH BX PUSH CX PUSH DX STI MOV AH,0 INT 1AH MOV AX,DX NOT AL AND AH,03H ;清空高六位,防止溢出 MOV DL,31 ;得到1100的随机数 DIV DL MOV BL,AH ;随机数给到BL中 MOV BH,0 INC BX MOV B,BL POP DX POP CX POP BX POP AX RETRAND2 ENDP RAND3 PROC ;+-*/运算符的随机,存到FUHAO PUSH AX PUSH BX PUSH DX PUSH CX MOV AL,A MOV AH,0 MOV BL,8 DIV BL CMP AH,0 JE JIA CMP AH,1 JE JIAN CMP AH,2 JE CHENG CMP AH,3 JE CHENG CMP AH,4 JE JIA CMP AH,5 JE JIAN CMP AH,6 JE CHENG CMP AH,7 JE JIAJIA: MOV DL,+ MOV AH,2 INT 21H MOV FUHAO,+ JMP END1JIAN:MOV DL,- MOV AH,2 INT 21H MOV FUHAO,- JMP END1CHENG:MOV DL,* MOV AH,2 INT 21H MOV FUHAO,* JMP END1CHU: MOV DL,/ MOV AH,2 INT 21H MOV FUHAO,/ END1: POP CX POP DX POP BX POP AX RETRAND3 ENDPSUANSHI PROC ; 得到算式达式 A+B PUSH DX PUSH AX PUSH BX CALL RAND1 CALL RAND2 MOV AH,A MOV AL,B CMP AH,AL ;比较A,B,如果小,就交换,为了保证永远是正数 JB CHANGE JAE NEXT1CHANGE: MOV BL,AH MOV AH,AL MOV AL,BL MOV A,AH MOV B,ALNEXT1: DISP1 A ;输出 CALL RAND3 DISP1 B MOV DL,= MOV AH,2 INT 21H YUNSUAN A,B,FUHAO ;计算并把结果存入R中 CALL PANDUAN ;判断对错 POP BX POP AX POP DX RETSUANSHI ENDP PANDUAN PROC ;判断结果是否正确,正确的,总分Y+10 PUSH AX PUSH CX PUSH DX PUSH SI PUSH DI PUSH BP MOV BP,X ;做下标,用来判断每道题 LEA DX,BUFF MOV AH,0AH INT 21H MOV CL,BUFF1 MOV CH,0 MOV BX,1 LOOP5: ;将输入的结果转为数字 MOV AL,BUFF1+BX SUB AL,30H MOV AH,0 MOV SI,AX MOV AX,R1 MOV DL,10 MUL DL ADD AX,SI MOV R1,AX INC BX LOOP LOOP5 MOV DL,0DH ;换行 MOV AH,2 INT 21H MOV SI,R1 ;输入的结果 MOV DI,R ;正确结果 CMP SI,DI JE CORRECT JNE WRONG ;错误的话不做操作CORRECT: ADD Y,10 ;正确,加十分 MOV DL,54H MOV AH,2 INT 21H ;MOV ARRAYBP,Y JMP EXIT4WRONG: MOV AH,2 MOV DL,46H INT 21H ;MOV ARRAYBP,NEXIT4: MOV R1,0 ;置零, ADD BP,1 MOV X,BP HUICHE POP BP POP DI POP SI POP DX POP CX POP AX RETPANDUAN ENDPTIME PROC ;得到开始时间 PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI PUSH DI MOV AH,2CH INT 21H MOV H,CH MOV M,CL MOV S,DH POP DI POP SI POP DX POP CX POP BX POP AX RETTIME ENDPTIME1 PROC ;得到结束时间,并且算出时间差 PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI PUSH DI MOV AH,2CH INT 21H MOV HA,CH MOV MA,CL MOV SA,DH MOV AH,H MOV AL,M MOV BH,S CMP DH,BH ;比较SECOND JAE NEXT6 JB NEXT7NEXT6: SUB DH

温馨提示

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

评论

0/150

提交评论