汇编打字练习.docx
《汇编打字练习.docx》由会员分享,可在线阅读,更多相关《汇编打字练习.docx(27页珍藏版)》请在冰点文库上搜索。
汇编打字练习
攀枝花学院
学生课程设计(论文)
题目:
打字练习
学生姓名学号:
所在院(系):
计算机学院
专业:
2009计算机科学与技术
班级:
第二组
指导教师:
何老师职称:
讲师
2010年01月07日
攀枝花学院本科学生课程设计任务书
题 目
打字练习
1、课程设计的目的
1、使同学们增进对汇编语言的认识,加强用汇编语言编程的能力。
2、通过查找、运用设计资料,完成工程设计所必备的基本训练。
3、使同学们更深入的了解计算机系统内部的有关知识,为以后的学习和系统开发奠定良好的基础。
2、课程设计的内容和要求(包括原始数据、技术要求、工作要求等)
设计内容:
编程实现如下功能:
将26个字母中的任一字母从屏幕落下,用户要在这个过程中键入落下的字母,如果键入正确,字母消失;键入不正确,字母继续下落。
按下列要求设计主菜单:
按回车键进入打字练习;按Esc键返回主界面;按空格键暂停;按大写字母“E”程序结束。
设计思路:
循环调用BIOS的10H中断类型的09号功能,显示一个有提示信息的开始界面。
调用DOS系统功能调用的1号功能,接受从键盘输入的字符到AL寄存器,如果(AL)为空格,进入打字练习界面;如果(AL)为“E”,则退出程序。
在界面的第0行显示由26个字母组成的字符串。
字母下落的设计过程是:
(1)利用BIOS功能调用的2号功能,置光标位置。
(2)10号功能在光标位置写字母。
(3)延迟一段时间。
(4)重置光标位置(列坐标不变,改变行坐标),利用10号功能在光标位置写空格,延迟一段时间。
(5)重复
(1)~(4)。
打字练习的实现过程是:
当字母下落没有超过最大行坐标时,利用DOS系统功能调用的6号功能,接受从键盘输入的字符到AL寄存器。
如果(AL)为1BH(Esc),则转向主界面显示的程序段;如果(AL)为空格,则字母在确定光标位置显示,延迟一段时间,直到(AL)再次为空合格;如果(AL)为任意字母,则判断其是否和下落字母相同,如果相同,则在相应光标位置显示空合格;否则,字母继续下落。
重复以上过程。
操作说明:
运行可执行程序testword.exe,出现菜单主界面,按空格键出现由26个字母组成的乱序行,这时其中任一字母落下,在键盘上敲入该字母,如果输入正确,字母消失;否则,字母继续下落。
按Esc键返回主菜单;按空格键暂停;按“E”退出。
3、主要参考文献
[1]《汇编语言程序设计》,吴向军等,高等教育出版社,2002
[2]《IBM-PC汇编语言及程序设计实验教程》,沈美明等,清华大学出版社,2001
[3]《汇编语言程序设计》,钱晓捷等,电子工业出版社,2000
[4]《汇编语言程序设计案例精编》,李珍香等,中国水利水电出版社,2004
[5]《汇编语言程序设计》,白小明,中国铁道出版社,2009-8-1
[6]《汇编语言程序设计》,王成耀,姚琳,机械工业出版社,2003-03-01
4、课程设计工作进度计划
时间内容安排
1天分析设计准备
3天编程调试阶段
1天编写课程设计报告
指导教师(签字)
日期
年月日
教研室意见:
年月日
学生(签字):
接受任务时间:
年月日
课程设计(论文)指导教师成绩评定表
题目名称
打字练习
评分项目
分值
得分
评价内涵
工作
表现
20%
01
学习态度
6
遵守各项纪律,工作刻苦努力,具有良好的科学工作态度。
02
科学实践、调研
7
通过实验、试验、查阅文献、深入生产实践等渠道获取与课程设计有关的材料。
03
课题工作量
7
按期圆满完成规定的任务,工作量饱满。
能力
水平
35%
04
综合运用知识的能力
10
能运用所学知识和技能去发现与解决实际问题,能正确处理实验数据,能对课题进行理论分析,得出有价值的结论。
05
应用文献的能力
5
能独立查阅相关文献和从事其他调研;能提出并较好地论述课题的实施方案;有收集、加工各种信息及获取新知识的能力。
06
设计(实验)能力,方案的设计能力
5
能正确设计实验方案,独立进行装置安装、调试、操作等实验工作,数据正确、可靠;研究思路清晰、完整。
07
计算及计算机应用能力
5
具有较强的数据运算与处理能力;能运用计算机进行资料搜集、加工、处理和辅助设计等。
08
对计算或实验结果的分析能力(综合分析能力、技术经济分析能力)
10
具有较强的数据收集、分析、处理、综合的能力。
成果
质量
45%
09
插图(或图纸)质量、篇幅、设计(论文)规范化程度
5
符合本专业相关规范或规定要求;规范化符合本文件第五条要求。
10
设计说明书(论文)质量
30
综述简练完整,有见解;立论正确,论述充分,结论严谨合理;实验正确,分析处理科学。
11
创新
10
对前人工作有改进或突破,或有独特见解。
成绩
指导教师评语
指导教师签名:
年 月 日
摘要
微机原理及应用是一门实践性很强的课程;其课程设计目的在于综合运用所学知识,全面掌握微机计算机与DOS方式的工作原理、编程和使用方法;在设计中,通过小组协作提出并论证设计方案,进行软件调试,最后获得正确结果,可以加深和巩固对理论知识的更好掌握,进一步建立计算机应用系统体的概念,初步掌握DOS开发方法,为以后进行实际的软件应用开发奠定良好的基础。
本设计是利用Masmforwindow集成实验环境来实现得打字练习程序,当前,在计算机和许多手机上流行许多小游戏,小软件,应用都很广泛,比如本次编写的练习打字小程序就很有趣,不仅让我们学习打字,更加重要的是我们在编写的过程中更好的掌握学过的知识,锻炼了我们的编程技能。
通过运用汇编语言中有的循环,子程序调用等来完成程序的编写,并且通过对程序的调试,逐步的掌握汇编语言的功能,在自己不足的方面进行改正,进一步的巩固所学的知识,熟练应用汇编语言进行一些程序的制作,进一步培养了对编程的兴趣
关键词课程设计,软件调试,打字练习,编程
1设计内容简介
1.1设计任务
设计主菜单:
按回车键进入打字练习;按ESC键进入延缓界面;按空格键暂停;按大写字母“E”程序结束。
将两位十进制数从屏幕上方落下,用户要在这个过程中键入落下的字母,在下落的过程中键入落下的数字,如果正确,数字消失;键入不正确,数字继续下落。
若键入正确,则得分,没有键入正确,不扣分。
在打字的过程中,每下落十个数记一次总成绩。
1.2设计思想
用汇编语言实现打字程序的思想,首先用BIOS的10H中断类型的02H功能置光标位置,接着用DOS的21H中断类型的09H功能显示字符串来显示主界面;调用DOS的21H的08H功能,接受从键盘输入的字符到AL寄存器,判断AL如果为回车以默认速度开始游戏,如为S键则进入速度选择界面,如为E键则退出程序;进入速度选择界面后,调用DOS的21H的08H功能,选择速度后进入游戏;进入游戏后,随机落下一字母,通过21H的06H功能调用,接受从键盘输入的字符到AL寄存器,如键入ESC进入成绩界面,如键入空格则暂停游戏,如没有得到输入或输入错误则继续下落,输入正确则字母消失,并通过21H的02H功能调用发生响铃;接着继续下落其他字母,如果落下的字母数大于78个则退出游戏进入成绩界面。
进入成绩界面后通过DOS的21H的02H功能调用显示击中字母的个数和丢失字母的个数,暂停大概2秒钟后自动回到主界面。
1.3设备环境
16位Windows2000操作系统,文本编辑器使用写字板,汇编程序使用MASM.EXE,连接程序使用LINK.EXE,调试程序使用DEBUG.EXE。
1.4知识点运用
Windows2000操作系统、写字板、汇编程序等的基本使用规则;调用BIOS的1号功能、2号功能、6号功能、09号功能、10号功能等;汇编语言中,循环语句、判断语句的使用和嵌套;文本的建立,程序链接的方法;绘图和屏幕截图的方法;
DEBUG调试程序。
2程序流程设计
主要流程图
图2.1 打字练习程序流程图
3程序代码设计
Init_gamemacroop1,op2,op3,op4,op5,op6
movcx,00h
movdh,op1
movdl,op2
op6:
movah,02h
movbh,00h
int10h
pushcx
movah,0ah
moval,op3
movbh,00h
movcx,01h
int10h
popcx
inccx
incop4
cmpcx,op5
jneop6
endm
clear_screenmacroop1,op2,op3,op4
;本段程序主要是通过定义变量和调用实现清屏宏定义
movah,06h
moval,00h
movbh,07h
movch,op1
movcl,op2
movdh,op3
movdl,op4
int10h
movah,02h
movbh,00h
movdh,00h
movdl,00h
int10h
endm
menumacroop1,op2,op3
;本段程序主要是通过定义变量和调用来实现菜单显示宏定义
movah,02h
movbh,00h
movdh,op1
movdl,op2
int10h
movah,09h
leadx,op3
int21h
endm
datasegment
ZKdb"WELCOMETOPLAY$"
nodb"date:
2010-12-31$"
megdb"pressEnterkeytocontinue.......$"
meg1db"whenaletterisdropping,pleasehitit!
$"
meg2db"pressspacekeytopause!
$"
meg3db"pressESCkeytoreturnmaininterface!
$"
meg4db"pressletter'E'toexit!
$"
speeddw600d
lettersdb"jwmilzoeucgpravskntxhdyqfb"
db"iytpkwnxlsvxrmofzhgaebudjq"
db"nwimzoexrphysfqtvdcgljukda"
letters_bakdb"jwmilzoeucgpravskntxhdyqfb"
db"iytpkwnxlsvxrmofzhgaebudjq"
db"nwimzoexrphysfqtvdcgljukda"
letter_counterdb0
life_flagdb78dup(0)
position_flagdb78dup(0)
present_positiondb1
dataends
;本段主要用于主界面的显示,起到提示作用
stacksegmentparastack'stack'
db64dup(0)
stackends
codesegment
mainprocfar
assumecs:
code,ds:
data,ss:
stack
start:
movax,data
movds,ax
movletter_counter,00h
movpresent_position,1
leasi,position_flag
movah,00h
movcx,00h
init_postion_flag:
mov[si],ah
incsi
inccx
cmpcx,78d
jneinit_postion_flag
leadi,letters
leasi,letters_bak
movcx,00h
init_letters:
movah,[si]
mov[di],ah
incsi
incdi
inccx
cmpcx,78d
jneinit_letters
movah,00h
leasi,life_flag
movcx,00h
init_life_flag:
mov[si],ah
incsi
inccx
cmpcx,78d
jneinit_life_flag
movcx,00h
movah,01h
orch,00010000b
int10h
clear_screen00d,00d,24d,79d
Init_game00d,00d,0ah,dl,80d,nextsign1
Init_game24d,00d,0ah,dl,80d,nextsign2
Init_game00d,00d,0ah,dh,25d,nextsign3
Init_game00d,79d,0ah,dh,25d,nextsign4
menu05d,15d,ZK
;本段程序主要是对菜单信息的宏调用
menu07h,15d,no
menu09d,15d,meg
menu11d,15d,meg1
menu13d,15d,meg2
menu15d,15d,meg3
menu17d,15d,meg4
put:
movah,02h
;此段用来设置光标位置
movbh,00h
movdh,22d
movdl,33d
int10h
movah,01h
;通过本段代码,能够从键盘输入任意字符
int21h
cmpal,0dh
jespeed3
cmpal,45h
jeexit
exit:
movah,4ch
int21h
speed3:
movax,speed+12
movspeed,ax
jmpbegin
begin:
clear_screen01d,01d,23d,78d
;第二次使用清屏宏调用
clear_screen01d,01d,23d,78d
Init_game23d,01d,01h,dl,78d,nextsign5
movah,02h
movbh,00h
movdh,01h
movdl,01h
int10h
movcx,00h
leasi,letters
nextletter:
movah,02h
;用来示字母
movdl,[si]
int21h
incsi
inccx
cmpcx,78d
jenextcycle
jmpextletter
from_front:
subpresent_position,78d
jmpgobackto_si
find_zero:
cmpletter_counter,78d
jerecycle
cmppresent_position,78d
jefrom_one
movah,00h
nextsi:
addpresent_position,01h
incsi
cmp[si],ah
jegobackto_di
cmppresent_position,78d
jefrom_one
jmpnextsi
from_one:
movpresent_position,01h
jmpgobackto_si
recycle:
movletter_counter,00h
movpresent_position,01d
leasi,position_flag
movcx,00h
movah,00h
clearsi:
mov[si],ah
inccx
cmpcx,78d
jenextcycle
incsi
jmpclearsi
nextcycle:
leadi,letters
leasi,position_flag
addpresent_position,31d
cmppresent_position,78
jafrom_front
gobackto_si:
addsi,wordptrpresent_position
decsi
movah,[si]
cmpah,01h
jefind_zero
gobackto_di:
movah,01h
mov[si],ah
adddi,wordptrpresent_position
decdi
movdl,present_position
movah,02h
movbh,00h
movdh,01h
int10h
movcx,00h
nextrow:
pushcx
movcx,00h
out_cycle:
;时间的延迟
pushcx
movcx,00h
in_cycle:
addcx,01h
cmpcx,1000
jnein_cycle
pushdx
movah,06h
;从键盘输入字符
movdl,0ffh
int21h
popdx
jzpass
cmpal,1bh
;如果键入ESC,则返回主菜单
jeto_start1
cmpal,""
;如果键入SPACE,则游戏暂停
jepause
cmpal,[di]
;输入字母正确!
则字母消失
jedisappear
pass:
popcx
inccx
cmpcx,speed
jeprint
jmpout_cycle
pause:
pushdx
;用来暂停处理
movah,06h
movdl,0ffh
int21h
popdx
cmpal,""
jnepause
jmppass
to_start1:
;用于返回主菜单
jmpstart
print:
movah,0ah
;在当前光标位置写空格
moval,""
movbh,00h
movcx,01h
int10h
incdh
movah,02h
;用来改变光标位置
movbh,00h
int10h
movah,0ah
;在当前光标位置写字母
moval,[di]
movbh,00h
movcx,01h
int10h
popcx
inccx
cmpcx,21d
jeprint_next_letter
jmpnextrow
;下一行
disappear:
;击中字母后输出空格
popcx
popcx
movah,0ah
moval,""
movbh,00h
movcx,01h
int10h
jmphit
print_next_letter:
leasi,life_flag
addsi,wordptrpresent_position
decsi
movah,0ah
moval,""
movbh,00h
movcx,01h
int10h
incdh
movah,02h
movbh,00h
int10h
movah,0ah
moval,""
movbh,00h
movcx,01h
int10h
movah,1
mov[si],ah
hit:
movah,02h
movbh,00h
movdh,01h
movdl,present_position
int10h
moval,[di]
;出现下一个新字母的数法
addal,7
cmpal,7ah
jaconvey_letter
movah,0ah
movbh,00h
movcx,01h
int10h
mov[di],al
addletter_counter,01h
jmpnextcycle
convey_letter:
subal,7ah
addal,61h
movah,0ah
movbh,00h
movcx,01h
int10h
mov[di],al
addletter_counter,01h
jmpnextcycle
clear_screen01,01,23,78
movah,02h
movbh,00h
movdh,11d
movdl,20d
int10h
incdh
incdh
movah,02h
movbh,00h
int10h
notkey:
movah,07h
int21h
cmpal,0dh
jeto_start
cmpal,1bh
jeover
jmpnotkey
to_start:
clear_screen00,00,24,79
jmpstart
over:
clear_screen01,01,23,78
movah,02h
movbh,00h
movdh,11d
movdl,15h
int10h
movah,02h
movbh,00h
movdh,13d
movdl,15h
int10h
movah,07h
int21h
movah,07h
int21h
clear_screen00,00,24,79
movax,4c00h
int21h
mainendp
codeends
endstart
;程序结束
4程序调试运行
4.1调试阶段
(1)打开windows命令窗口,进入masm程序的安装目录,汇编源文件,如图:
图4.1.1文件链接图
(2)链接原文件,并运行可执行文件,如下图:
图4.1.2运行可执行文件图
(3)进入主程序段显示提示信息,程序功能应该实现下图所示:
图4.1.3程序主界面图
4.2运行阶段
(1)按回车键进入打字练习页面,并且开始练习打字,如下图:
图4.2.1打字主