课程设计说明书
题目: 打字练习
院 系:
专业班级:
学 号:
学生姓名:
指导教师:
20xx年 12 月 31 日
安徽理工大学课程设计(论文)任务书 计算机科学与工程学院 硬件 教研室
20xx年 12月 17 日
安徽理工大学课程设计(论文)成绩评定表
摘要
在IBM-PC系统中,驻留的ROM中有8KB的BIOS。它实现对系统中种种常用设备的输入输出操作的管理。其中的16H中断调用即为键盘输入输出中断调用,实现从键盘输入字符到AL寄存器、读键盘缓冲区字符到AL寄存器、读取特殊功能键的状态等功能。本程序是一个在键盘上打字练习的程序,运行可执行程序后,出现主界面,按回车键出现由78个字母组成的乱序行,这时其中任一字母落下,在键盘上敲入该字母,如果输入正确,字母消失;按回车键进入打字练习;按ESC健返回主界面;按空格键暂停;按’E’退出。
关键词:中断调用,打字练习,回车键进入,空格键暂停
目录
1设计目的 ..................................................1
2概要设计 ..................................................2
2.1 系统总体分析 ................................................................ 2
2.2 主模块框图及说明 ............................................................ 2
3详细设计 ..................................................4
3.1 主模块及子模块说明 .......................................................... 4
3.2 各模块详细设计 .............................................................. 4
4程序调试 .................................................10
4.1 运行界面分析 ............................................................... 10
4.2 调试过程及分析 ............................................................. 12
5心得体会 .................................................13
5.1 设计体会 ................................................................... 13
5.2 系统改进 ................................................................... 13
参考文献...................................................14
I
安徽理工大学课程设计(论文)
1设计目的
汇编语言是计算机能够提供给用户使用的最快而又最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。由于汇编语言如此的接近计算机硬件,因此,它可以最大限度地发挥计算机硬件的性能。由此可见汇编语言的重要性,学好这门课程,同样可为相关的专业打下基础。
汇编语言程序设计课程设计是在教学实践基础上进行的一次试验,也是对该课程所学理论知识的深化和提高。因此,要求学生能综合应用所学知识,设计和制造出具有具有一定功能的应用系统,并且在实验的基本技能方面进行了一次全面的训练。
此外,它还可以培养学生综合运用所学知识独立完成汇编程序课题的能力,使学生能够较全面的巩固和应用课堂上所学的基本理论和程序设计方法,能够较熟练地完成汇编语言程序的设计和调试。
再者,它同样可以提高学生运用理论去处理实际问题的能力和独立思考的能力,使学生的编程思想和编程能力有所提高,最终达到熟练地掌握编写汇编源程序的基本方法的目的。
-1-
安徽理工大学课程设计(论文)
2概要设计
2.1 系统总体分析
此程序的主要目的是在DOS界面下实现打字练习的功能。具体实现中从总体来看包括以下几个主要模块:界面显示模块、字母输入正确与否的相关处理模块,按下空格键后如何实现暂停和继续的功能模块,按下‘E’实现退出功能的模块以及按下ESC键后返回主界面模块等。
2.2 主模块框图及说明
打字练习程序的主要功能模块图如图2-1:
图2-1 程序主要功能模块图
程序执行流程图如图2-2:
-2-
安徽理工大学课程设计(论文)
图2-2 程序流程图
-3-
安徽理工大学课程设计(论文)
3详细设计
3.1 主模块及子模块说明
界面显示模块:主要包括两部分,运行可执行程序显示主界面以及按下Enter键显示78个字母组成的乱序行。
字母输入正确与否的相关处理模块:当字母输入正确后字母在当前位置消失并在原字母位置产生新的字母;当字母输入错误时,界面上字母下方的笑脸置为空格。
按下空格键的相关处理模块:字母下落时按下空格键,则字母在当前位置暂停,直到你再次键入空格键后字母才会继续下落,否则保持暂停状态并一直持续下去。
实现退出和返回功能模块:进入主界面后,按下‘E’则程序退出;进入字母下落界面按下ESC键程序则返回主界面。
3.2 各模块详细设计
界面显示模块:采用宏调用的方式将界面清屏并显示主界面和字母组成的乱序行界面,如图3-1:
图3-1 界面显示模块
字母输入正确与否的相关处理模块:当输入字母的ASCII码与当前下落字母的ASCII码相同时,字母在当前位置消失并在原字母位置产生新的字母;当字母输入错误时,界面上字母下方的笑脸置为空格。
按下空格键的相关处理模块:字母下落时按下空格键,则字母在当前位置暂停,直到程序判断出你再次键入的键为空格键时字母才会继续下落,否则保持暂停状态并一直等待键盘输入。
-4-
安徽理工大学课程设计(论文)
实现退出和返回功能模块:进入主界面后,按下‘E’则程序退出;进入字母下落界面按下ESC键程序则返回主界面。
程序主要功能代码及其说明如下:
clear_screen macro op1,op2,op3,op4 ;清屏宏定义
mov ah,06h
mov al,00h
mov bh,07h
mov ch,op1
mov cl,op2
mov dh,op3
mov dl,op4
int 10h
mov ah,02h ;设置光标位置
mov bh,00h
mov dh,00h
mov dl,00h
int 10h
endm
menu macro op1,op2,op3 ;菜单显示宏定义
mov ah,02h
mov bh,00h
mov dh,op1
mov dl,op2
int 10h
mov ah,09h
lea dx,op3
int 21h
endm
clear_screen 00d,00d,24d,79d ;清屏
menu 05d,15d,WP ;
menu 07h,15d,date
-5- 菜单信息的宏调用
安徽理工大学课程设计(论文)
menu 09d,15d,meg
menu 11d,15d,meg1
menu 13d,15d,meg2
menu 15d,15d,meg3
menu 17d,15d,meg4
put: mov ah,02h ;设置光标位置 mov bh,00h
mov dh,22d
mov dl,33d
int 10h
mov ah,01h ;
int 21h
cmp al,0dh ;
je speed3
cmp al,45h ;
je exit
exit: mov ah,4ch
int 21h
speed3: mov ax,speed
mov speed,ax
jmp begin
nextletter:
mov ah,02h ;
mov dl,[si]
int 21h
inc si
inc cx
cmp cx,78d
je nextcycle
jmp nextletter
nextcycle:
lea di,letters 从键盘输入任意字符 如果键入为Enter,则开始 如果键入为'E',则退出 显示字母 判断字母位置是否在屏幕范围内
-6- ;
安徽理工大学课程设计(论文)
lea si,position_flag
add present_position,30d ;控制下一个字母的位置 cmp present_position,78
ja from_front ;若不在则跳转
out_cycle: ; 延迟
push cx
mov cx,00h
in_cycle:
add cx,01h
cmp cx,1000
jne in_cycle
push dx ;
mov ah,06h ;
mov dl,0ffh
int 21h
pop dx
jz pass ;
cmp al,1bh ;
je to_start1
cmp al," " ;
je pause
cmp al,[di] ;
je disappear
pass: pop cx
inc cx
cmp cx,speed
je print
jmp out_cycle
pause: push dx ;
mov ah,06h
mov dl,0ffh
int 21h
pop dx ;字符在每一位置所停留时间,延迟 保存之前字符位置 从键盘输入字符 字符在左上则转移 如果键入ESC,则返回主菜单 如果键入SPACE,则游戏暂停 输入字母正确!则字母消失 ;字符下落速度,也起延迟作用 暂停处理
-7-
安徽理工大学课程设计(论文)
cmp al," "
jne pause
jmp pass ;若输入空格则继续
to_start1: ;返回主菜单
jmp start
print:
mov ah,0ah ;在当前光标位置写空格 mov al," "
mov bh,00h
mov cx,01h
int 10h
inc dh
mov ah,02h ;改变光标位置
mov bh,00h
int 10h
mov ah,0ah ;在当前光标位置写字母 mov al,[di]
mov bh,00h
mov cx,01h
int 10h
pop cx
inc cx
cmp cx,21d
je print_next_letter
jmp nextrow ;下一行
disappear: ;击中字母后输出空格 pop cx
pop cx
mov ah,0ah
mov al," "
mov bh,00h
mov cx,01h
int 10h
jmp hit
-8-
安徽理工大学课程设计(论文)
hit: mov ah,02h
mov bh,00h
mov dh,01h
mov dl,present_position
int 10h
mov al,[di] ; 出现下一个新字母的算法 add al,7
cmp al,7ah
ja convey_letter
mov ah,0ah
mov bh,00h
mov cx,01h
int 10h
mov [di],al
add letter_counter,01h
jmp nextcycle
-9-
安徽理工大学课程设计(论文)
4程序调试
4.1 运行界面分析
运行可执行程序后出现主界面,主界面如图4-1:
图4-1 主界面
键入Enter键后出现78个字母组成的乱序行并且字母下落,如图4-2:
图4-2 78个字母组成的乱序行
这时其中任一字母落下,在键盘上敲入该字母,如果输入正确,字母消失。如果输入不正确,界面中的笑脸变为空格,如图4-3:
-10-
安徽理工大学课程设计(论文)
图4-3 输入不正确后,笑脸变为空格
按空格键暂停,如图4-4:
图4-4 按空格键字母下落暂停
再按下空格键时字母继续下落,如图4-5:
-11-
安徽理工大学课程设计(论文)
图4-5 再次按下空格键时字母下落
按下ESC键则返回主界面。
4.2 调试过程及分析
用汇编编译软件MASM对编写的源程序(wordgame.asm)进行编译,连接,运行,并在dos界面下运行debug命令debug wordgame.exe,然后执行可执行程序进入主界面。起初连接后出现了下面的问题:
后来才注意到将文件保存的路径中应该不能含中文,如图4-6:
图4-6 文件保存路径不合理图
在接下来的运行过程中,基本上没遇到什么特别大的问题。
-12-
安徽理工大学课程设计(论文)
5心得体会
5.1 设计体会
本次的课程设计是我接触的第一门用低级语言实现的课程设计,相对于高级语言来说,汇编语言的确有许多的难度,相似的编程思想用汇编语言实现也确实比用高级语言实现要复杂的多。但不管怎样,此次的课程设计我还是顺利的完成了,并且学到了许多东西,尽管花了许多的精力和时间,我感觉一切都是值得的。
此次的课程设计,使我更深刻的感受到了编写程序的一般流程:确定程序的主要框架,然后画出流程图,继而对具体的模块逐一的实现。此思想尤其对汇编语言比较实用,这是因为汇编语言编程相对其他语言编程比较复杂,在设计上应把重点放在程序的功能实现上,不要太在意程序的结构和显示界面的设计。
此次的课程设计,也激发了我对编程中遇到的问题的思考,有效地提高了我对汇编的认识和理解,尤其是一些常见指令的应用,比如宏指令的应用、与地址转移有关的指令以及常见的中断调用的使用等等。但我最大的收获就是我掌握了用汇编语言编写程序解决实际问题应该具备的条件:要想写好汇编语言的程序,必须认真的对待代码的每个细节,还必须熟练地掌握debug命令,这对程序的调试是非常重要的。
但非常诚恳的说,这个课程设计的完成并不是我个人的功劳。刚开始我参考了网上的代码并尝试着阅读,但由于代码太长,所以有一些细节不是太懂,最后通过查阅相关的资料、向同学的咨询和老师的指导,基本上能把程序看的比较透彻,在此非常感谢你们的帮助。接下来就是对代码进行了相应的修改,其中修改的部分主要有控制字母下落速度、将代码简化等。但由于时间有限,其他部分改的不多,但每个模块的具体实现原理我都了解的比较透彻。
5.2 系统改进
此程序虽然基本功能都能实现,那么它是不是很完美呢?绝对不是。下面谈一下系统中尚存在的一些问题及其解决方案:首先源程序的代码量相当大,有些代码还可以进一步的优化;其次程序的界面设计还不是很漂亮;再者还存在一个问题就是,当78个乱序行的字母都落下时,笑脸消失完了,然而字母依然在下落,实际上应该让打字练习结束比较好些,针对这个问题可以进一步的进行完善,比如退出程序或返回主界面均可以;此外程序的功能尚且比较简单,还可以添加一些比较复杂的环节,比如打字结束后统计你所取得的成绩,并对打字情况评个级别等等,总之还有许多可以改善的空间。 针对以上的问题,今后的时间里我会不断地完善,以求更好的应用于实际生活中。
-13-
安徽理工大学课程设计(论文)
参考文献
[1]李敬兆等编.《汇编语言程序设计》.合肥:中国科学技术大学出版社,2008.9
[2]李敬兆等编.《汇编语言程序设计实验教程及习题解答》.合肥:中国科学技术大学出版社,2008.9
[3]王爽等编.《汇编语言》.北京:清华大学出版社,2003.5
[4]曹加恒等编.《新一代汇编语言课程设计》.北京:高等教育出版社,2003.6
[5]杨路明等编.《汇编语言程序设计》.长沙:中南大学出版社,2005.8
[6]詹仕华等编.《汇编语言程序设计》.北京:中国电力出版社,2008.2
[7]詹仕华等编.《汇编语言程序设计习题解答及课程设计、设计辅导》.北京:中国电力出版社,2008.2
[8]宋彩莉等编.《汇编语言程序设计学习指导》.西安:西安交通大学出版社,2008.2
-14-