




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
汇汇编编语语言言课课程程设设计计报报告告 ( 2014 - 2015 年度第年度第 1 学期学期) 课题名称:打字计时练习程序 专业专业计算机科学与技术(网络工程)计算机科学与技术(网络工程) 学生姓名学生姓名 班级班级b 计算机计算机 131 学号学号1310704114 指导教师指导教师 完成日期完成日期2015 年年 1 月月 16 日日 汇编语言程序设计课程设计(2014) ii 目目 录录 1 设计目的.1 2 概要设计.1 2.1 系统总体分析1 2.2 主模块框图及说明1 3 详细设计.1 3.1 主模块及子模块说明1 3.2 各模块详细设计1 3.2.1 主界面模块.1 3.2.2 随机字母产生模块.1 3.2.3 字母落下模块.1 3.2.4 暂停模块.1 3.2.5 返回主界面模块.1 4 程序调试.2 4.1 运行界面分析2 4.2 调试过程及分析2 5 心得体会.2 5.1 设计体会2 5.2 系统改进2 参考文献.3 附 录4 附录 1 源程序清单4 附录 1.1 *模块源程序4 汇编语言程序设计课程设计(2014) 1 1 1 设计设计目的目的 增进对汇编语言的认识,加强运用汇编语言编程的能力;通过课程设计可以使我们更 加了解书上的知识,了解书上的语句并能用到自己的程序设计中。 2 2 概要设计概要设计 2.1 系统总体分析 采用汇编语言设计一个打字计时程序,在缓冲区中预放了一些字母,运行时, 按照屏幕上显示的字母输入练习,每输入完一行按回车键后,显示出练习输入 的时间。按 q 退出程序。 2.2 主模块框图及说明 主程序一开始先随机选取一定长度的字符串到缓冲区中,作为将要输出练主程序一开始先随机选取一定长度的字符串到缓冲区中,作为将要输出练 习打字的材料,这些随机选入的字符为习打字的材料,这些随机选入的字符为 2626 个区分大小写的英文字母和十个阿拉个区分大小写的英文字母和十个阿拉 伯数字。接着程序输出一系列在数据段已经设置好的各种提示语,然后主程序伯数字。接着程序输出一系列在数据段已经设置好的各种提示语,然后主程序 执行输出开始时缓冲区所选好的练习字符串材料,这可以利用屏幕显示中断并执行输出开始时缓冲区所选好的练习字符串材料,这可以利用屏幕显示中断并 配合一些指令来完成。当屏幕上显示完所练习后的打字材料后,主程序通知子配合一些指令来完成。当屏幕上显示完所练习后的打字材料后,主程序通知子 程序开始计时,而与此同时主程序开始记录练习者输入的字符。每当输入一个程序开始计时,而与此同时主程序开始记录练习者输入的字符。每当输入一个 字符时主程序都要判断所输入的字符是否正确,改变输入的总字符数,记录输字符时主程序都要判断所输入的字符是否正确,改变输入的总字符数,记录输 入的正确的字符数并计算显示正确率,同时主程序还要控制打字练习所用时间入的正确的字符数并计算显示正确率,同时主程序还要控制打字练习所用时间 的记录和显示,显示的形式是小时;分钟;秒。在每输入一个字符时,主程序的记录和显示,显示的形式是小时;分钟;秒。在每输入一个字符时,主程序 还应该控制各个子程序执行改变颜色的任务,颜色的改变规则为:每当输入的还应该控制各个子程序执行改变颜色的任务,颜色的改变规则为:每当输入的 字符为正确的时候字符显示黑色,当检测到字符为错时,字符变为红色,背景字符为正确的时候字符显示黑色,当检测到字符为错时,字符变为红色,背景 也发生变化以示区别。而原练习字符串也要随着打字的进度改变而变化。不仅也发生变化以示区别。而原练习字符串也要随着打字的进度改变而变化。不仅 如此,主程序还应该时刻检测输入的字符是否为回车、如此,主程序还应该时刻检测输入的字符是否为回车、backspacebackspace 键,以通知键,以通知 子程序的执行。子程序的执行。 程序设置每一行最大输入的字符数为程序设置每一行最大输入的字符数为 5151 个,当满行时满行标志位会有零变个,当满行时满行标志位会有零变 为一从而使得换行。当主程序检测到表示退出程序的信号为一从而使得换行。当主程序检测到表示退出程序的信号 q q 时则退出程序,而时则退出程序,而 输入的字符已经满时也会退出程序。退出时主程序会控制一子程序在显示屏上输入的字符已经满时也会退出程序。退出时主程序会控制一子程序在显示屏上 显示出这次打字练习的基本情况,主要参数包括:所用的总时间、所练习的字显示出这次打字练习的基本情况,主要参数包括:所用的总时间、所练习的字 数和正确率。之后再按屏幕的提示:按任意键退出即可退出程序。数和正确率。之后再按屏幕的提示:按任意键退出即可退出程序。 本次主程序中主要用了两种中断类型、本次主程序中主要用了两种中断类型、dosdos 调用、调用、biosbios 调用、宏定义及子调用、宏定义及子 程序调用。程序调用。 3.13.1 其他子程序说明其他子程序说明 总的程序中所含的子程序如下: 汇编语言程序设计课程设计(2014) 2 输出打字正确率子程序(rightrata-out):用于计算最后打字结束后的正 确率; 计算打字时间并输出子程序(usetimeandout):用于计算打字所用的时间并 输出所用时间; 显示时间子程序(outtime):用于显示出所用的打字时间; 记录当前时刻所打的字符个数及正确字符个数子程序(tongji):用于统计 当前时刻所完成的字符的个数及正确字符的个数; 输出 bx 中的内容子程序(bx-out):用于输出 bx 的内容以配合其他几个程 序的输出和运输; 换判断是否满行并换行子程序(fullline):当发生满行时进行换行; 改变字符颜色子程序(char-change):用于改变字符的颜色,在输入过程 中改变输入过后的字符的背景颜色及输出字符错误时改变字符的背景及颜色。 4 4 程序调试程序调试 4.1 运行界面分析 汇编语言程序设计课程设计(2014) 3 4.2 调试过程及分析 编完程序后一开始不可以生成可执行文件,源程序中有不少这样那样的问题, 现将几个主要的问题及解决过程列在下面。 首先,不能生成 exe 文件的最主要问题之一就是源程序中有不少语法错误, 这些错误有:一些变量未定义、字符的错误使用、语句写的不完整及注释的格 式不对等等,这些错误是很难避免的,而且寻找它们时也比较麻烦,但改正它 们相对来说较为容易。 接着,当语法上的一些错误改正之后便可以生成执行文件,程序可以运行且 有结果了,但一开始结果并没有设想的那样。第一个错误情况是一开始的输出 练习材料字符,这些字符并没有像设想的那样是大小写英文字母和阿拉伯数字, 除了这些之外还有其他好多字符,除此之外出现的字符也并不是随机形式的, 可以说是顺序出现的。慢慢的改正主程序中开始产生随机字符部分的源程序的 发现,之所以会出现好多乱码是因为一开始调用输出的寄存器弄错了,也就是 调用输出来的字符是在另一处寄存器中放着的;而没有以随机形式出现字符的 原因是程序编写的没有符合当初的原理,在这里随机取字符的原理是利用通过 调用中断(ah=2ch,int 10)取系统时间的 1|100 来得到一组随机数,把这些 随机数当作指针,然后取指针对应的字符表中相应的字符来得到一串字符,而 编写的程序并没有像这样来。 然后,出现另一个现象就是各种提示语的出现位置出现了异常,有几条提示 语相互重叠在一起了。提示语的显示原理是:先取得光标的位置,再在该位置 输出提示语。而这里之所以是几条提示语会重叠是因为几个光标的位置没设置 好,经检发现主要是设置形成的行数不够用,改正过后发现提示语恢复正常。 此外,还有一些其他的小问题比如:输入的满行数不对,输出的颜色不对, 正确率的计算不对及没有按条件退出打字等,这些问题大部分都是计算参数不 正确所引起的,因此发现它们较容易而且改正起来也较为简单。最后,程序运 行的结果终于跟预想的一样,可以用来测试打字的速度了。 5 5 心得体会心得体会 5.1 设计体会 课程设计对我们来说确实是一难点,因为这与平时讲课也好、做作业也好还是考试也 好都有很大的难度上的差距,很明显这次课程设计要求编的程序要大的多。所有难度要比 汇编语言程序设计课程设计(2014) 4 平时大得多,要是真的凭自己的能力很难完成这次的任务,所以在这个过程借鉴了不少的 资料,有从图书馆借来的书籍也有从网络上搬来的东西。 这次任务的程序里用了许多以前从未用过的指令,可能是因为以前编得都是一些简单 地小程序的缘故吧!所以一开始看到题目后都不知道从哪里下手。看到这种比较难比较大 的工程第一步想的就是应该去查询什么资料了,要把汇编语言的知识重新补一遍,课堂上 学过的指令只是一些较为常见的指令,其他的好多也十分有用但较为复杂的指令及调用方 式、中断课堂上提的较少,所以必须先得把知识巩固,不然别说编程了,就是是读程序改 程序都有困难。这刚好也为我们提供了一个学习的好机会。在重新查询过一些汇编的资料 后,慢慢的知道要完成这次的任务得用到好多 dos 调用、bios 调用、宏定义及调用还有 子程序的调用,这些由于平时用的少甚至是没用过,所以一开始感觉很棘手。其实这个时 候编程还是不知道从哪里开始。于是又把目光投向了网络,其实网络上有很多讲解编程的 方法,就跟老师说过一样,编程开始是要画出流程图,好的流程图是编程成功的开始。其 实画流程图就像是写作文前的拟写提纲,它帮助我们梳理自己的编程思维,按照自己画的 流程图一步一步的来,这样编起来有条理的多,而且这样也不容易出错。最终在网上找到 了其他人编写过的程序并读懂它,还是一步步的把流程图画了出来,最后也在他人程序的 基础上完成了自己的程序。 程序完成后就是要调试了,调试的过程也是挺麻烦的,有不少语法上的错误和原理上 的错误,调试的过程也就是将程序再一次学了一遍,调试需要对程序相当的熟悉,特别是 汇编语言,对程序在哪儿执行也要了解。所以调试的过程可以说是收获最大的一个过程。 对自己今后的学习也会有借鉴的作用。通过这次课程设计,我巩固了所学过的知识,感觉 自己又上升了一点点。 参考文献 1卜燕萍,汇编语言程序设计教程(第二版).北京:清华大学出版社, 2004.6 2钱晓捷,汇编语言程序设计(第四版).北京:电子工业出版社, 2012.6 3沈美明,ibm-pc 汇编语言程序设计(第二版).北京:清华大学出版社, 2001.8 4周佩玲,微机原理与接口技术(第一版).北京:电子工业出版社, 2005.4 5朱世鸿,微机系统和接口应用技术(第一版).北京:清华大学出版社, 2006.9 汇编语言程序设计课程设计(2014) 5 附附 录录 附录 1 源程序清单 附录 1.1 *模块源程序 colorchar macro char,color push ax push bx push cx push dx mov ah,9h mov al,char mov bh,0 mov bl,color mov cx,1 int 10h mov ah,03h mov bh,0 int 10h mov ah,02 inc dl int 10h pop dx pop cx pop bx pop ax endm backchar macro char,color mov ah,02h mov dl,08h int 21h colorchar char,color endm clear macro alz,bhz,chz,clz,dhz,dlz push ax push bx push cx push dx mov al,alz mov bh,bhz mov ch,chz mov cl,clz 汇编语言程序设计课程设计(2014) 6 mov dh,dhz mov dl,dlz mov ah,06h int 10h pop dx pop cx pop bx pop ax endm setgb macro bhz,dhz,dlz push ax push bx push cx push dx mov bh,bhz mov dh,dhz mov dl,dlz mov ah,2 int 10h pop dx pop cx pop bx pop ax endm readgb macro bhz push ax push bx push cx push dx mov bh,bhz mov ah,03h int 10h mov gbattr0,dh mov gbattr1,dl pop dx pop cx pop bx pop ax endm linefull macro lmax,lact push ax push bx push cx push dx 汇编语言程序设计课程设计(2014) 7 mov ax,lact cmp ax,0 jz lfexit mov dx,0 cwd mov bx,lmax div bx cmp dx,0 jz lnfu jmp lfexit lnfu:mov fullflag,1 lfexit:pop dx pop cx pop bx pop ax endm tishi macro row,col,addrr push ax push bx setgb 0,row,col mov ah,09h lea dx,addrr int 21h pop dx pop ax endm data segment addrr db 400 dup($) addrr1 db abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789$ addrr2 db 400 dup($) anumber dw 0 rnumber dw 0 linemax dw 0 lineact dw 0 fullflag db 0 gbattr db 2 dup(0) stime db 3 dup(0) temp db 5 dup(0) ts1 db stime:$ ts2 db rrate:$ ts3 db total use-time:$ ts4 db total characters:$ ts5 db correct-reta:$ 汇编语言程序设计课程设计(2014) 8 ts6 db press any key to end!$ ts7 db pressing q can leave out!$ ts8 db *typewriting exercise*$ data ends code segment assume ds:data,cs:code start: mov ax,data mov ds,ax mov di,0 mov bx,90 zifu: mov ah,2ch int 21h mov al,dl cbw mov si,ax cmp si,40 ja zifu mov al,addrr1si mov addrrdi,al inc di dec bx push di push si mov di,400h aa1: mov si,0ffffh aa2: dec si jnz aa2 dec di jnz aa1 pop si pop di cmp bx,0 jnz zifu clear 0,77h,0,10,23,69 clear 0,37h,3,12,22,66 clear 0,70h,4,14,22,64 clear 0,25h,12,14,14,64 clear 0,70h,13,18,13,35 clear 0,70h,13,43,13,60 setgb 0,0,30 汇编语言程序设计课程设计(2014) 9 clear 0,25h,0,28,0,49 clear 0,25h,2,23,2,54 clear 0,57h,1,14,1,64 mov ah,09h lea dx,ts8 int 21h setgb 0,2,24 mov ah,09h lea dx,ts7 int 21h setgb 0,4,14 mov di,0 mov cx,0ffffh loadchar:mov dl,addrrdi cmp dl,$ jz fullchar push dx mov bp,di call fullline pop dx mov ah,02h int 21h inc di loop loadchar fullchar:mov ah,2ch int 21h mov stime0,ch mov stime1,cl mov stime2,dh setgb 0,15,14 call tongji mov cx,0ffffh mov di,0h as:cmp addrrdi,$ jnz asnt00 jmp aend asnt00:mov bp,di call fullline mov bp,di reinput: readgb 0 mov ah,01 int 21h cmp al,81 汇编语言程序设计课程设计(2014) 10 jnz a127nt jmp exit a127nt:cmp al,0dh jnz a10dnt setgb 0,gbattr0,gbattr1 jmp reinput a10dnt:cmp al,08 jnz asnext cmp gbattr1,14 jnz asnz setgb 0,gbattr0,gbattr1 jmp reinput asnz: mov ah,02h mov dl, int 21h mov ah,02h mov dl,08h int 21h dec di dec anumber push ax mov al,addrr2di cmp al,addrrdi jnz as1nt dec rnumber as1nt:pop ax call tongji mov bp,di jmp reinput asnext: inc anumber call tongji mov addrr2di,al cmp al,addrrdi jnz aer inc rnumber call tongji a3:inc di loop as1 as1:jmp as aend:jmp exit aer:mov temp1,al 汇编语言程序设计课程设计(2014) 11 backchar temp1,0f4h jmp a3 exit:clear 0,07,8,16,17,63 clear 0,57,10,20,15,59 tishi 11,24,ts3 call usetimeandout tishi 12,24,ts4 mov bx,anumber call bx_out tishi 13,24,ts5 call rightrata_out tishi 20,30,ts6 mov ah,08 int 21h mov ah,4ch int 21h rightrata_out proc near push ax push bx push cx push dx mov ax,rnumber mov cx,100 mul cx div anumber mov bx,ax call bx_out push dx mov ah,02h mov dl,. int 21h pop dx mov ax,dx mul cx div anumber mov bx,ax call bx_out mov ah,2h mov dl,% int 21h pop dx pop cx pop bx pop ax 汇编语言程序设计课程设计(2014) 12 ret rightrata_out endp usetimeandout proc near mov ah,2ch int 21h sub dh,stime2 jns secunblow jz secunblow add dh,60 dec cl secunblow: sub cl,stime1 jns minunblow jz secunblow add cl,60 dec ch minunblow: sub ch,stime0 call outtime ret usetimeandout endp outtime proc near mov al,ch cbw mov bx,ax call bx_out mov ah,02h mov dl,: int 21h mov al,cl cbw mov bx,ax call bx_out mov ah,02h mov dl,: int 21h mov al,dh cbw mov bx,ax call bx_out ret outtime endp tongji proc near push ax 汇编语言程序设计课程设计(2014) 13 push bx push cx push dx readgb 0 setgb 0,13,20 clear 0,70h,13,18,13,35 mov ah,09h lea dx,ts1 int 21h mov ah,2ch int 21h call usetimeandout se
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 美的集团工作流程体系
- 2025年事业单位工勤技能-湖北-湖北水生产处理工三级(高级工)历年参考题库含答案解析
- 文化场馆扩建工程2025年社会稳定风险评估研究
- 2025年事业单位工勤技能-浙江-浙江土建施工人员一级(高级技师)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-河南-河南舞台技术工一级(高级技师)历年参考题库含答案解析
- 2024版房产证抵押合同样本
- 2025年事业单位工勤技能-河北-河北理疗技术员三级(高级工)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-江西-江西药剂员三级(高级工)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-广西-广西计算机信息处理员二级技师历年参考题库含答案解析
- 2025年事业单位工勤技能-广西-广西放射技术员四级(中级工)历年参考题库典型考点含答案解析
- 智能航运管理-洞察阐释
- 被迫签署离职协议书
- 内蒙古华电正能圣圆伊金霍洛旗风光制氢一体化项目(风电部分)-环境影响报告书
- 学习解读《水利水电建设工程验收规程》SLT223-2025课件
- 《肥胖症诊疗指南(2024年版)》解读课件
- 感冒急性鼻炎护理
- 2025《安全生产法》培训课件
- 上门灭蚊合同协议
- 2025报关单填制规范
- 2025届四川省泸州市高三下学期第三次教学质量诊断性考试英语试题(原卷版+解析版)
- 缓刑解除矫正个人的总结(范文模板)
评论
0/150
提交评论