微机原理课程设计打字练习程序.doc
《微机原理课程设计打字练习程序.doc》由会员分享,可在线阅读,更多相关《微机原理课程设计打字练习程序.doc(22页珍藏版)》请在三一办公上搜索。
1、打字练习程序1设计目的这次课设的任务是写一个程序,运行可执行程序后,出现主界面,按回车键出现由26个字母组成的乱序行,这时其中任一字母落下,在键盘上敲入该字母,如果输入正确,字母消失;按回车键进入打字练习;按ESC键返回主界面;按空格键暂停;按Q退出。通过课程设计,主要达到以下目的:(1)增进对汇编语言的认识,加强用汇编语言编程的能力;(2)掌握汇编语言的中断调用功能的应用,可以用汇编语言调用各种中断调用功能,并由此实现对硬件的控制等;(3)了解和掌握汇编语言程序设计过程、方法及实现,为以后微机原理课程的学习打下良好基础;(4)通过课程设计可以使我们更加了解书上的知识,了解书上的语句并且能够应
2、用自己的程序中;(5)掌握屏幕输出显示的设计方法。2概要设计图2-1 主程序流程图2.1 系统总体分析根据题目要求可以看到有以下几部分来实现打字练习:(1)由26字母乱序组成一行显示行;(2)字母自动落下;(3)从键盘输入的字母与落下字母相同则该字母消失,并且下一个字母自动接着落下;(4)按下“Esc”键则程序返回到主界面;(5)按空格键游戏暂停;(6)在主界面按“Q”则程序退出。 打字练习的主要功能由以上六部分组成,每一部分之间的联系都是比较紧密的。对于以上几个部分,最主要的部分就是第二三两个部分,这是打字练习的重点,需要详细设计其所需要的功能。2.2主模块框图及说明程序的核心模块是打字,各
3、个模块功能的实现主要是通过键盘输入指令来融合的,主要流程是先到主界面,然后选择你想要进行的指令:ENTER进入打字界面开始打字,“Q”退出程序,空格在打字练习时执行暂停的功能,ESC是从打字界面返回到主界面。核心模块的程序流程大体如下面的流程图图2-1。3详细设计3.1 主模块及子模块说明主界面是程序的初始入口,也是其他功能模块的接入点。主模块是打字模块,也是核心模块,主要通过各个键盘符来控制各个子模块之间的协调。子模块分为判断输入字符判断模块(这当中包含两个小的子模块:主界面输入字符判断和打字模块输入字符判断)、暂停模块、退出模块(这当中包含两个小的子模块:打字界面返回主界面模块和主界面退出
4、程序模块)。3.2 各模块详细设计3.2.1主界面模块 当程序运行后,我们首先要进行选择,是要继续进行即进入打字练习程序还是终止练习退出程序。所以,在这里我们需要设置一个程序,该程序要判断键盘键入的字符,我们不妨规定ESC键和ENTER键分别为终止程序的控制键和进入打字练习程序的控制键,即当检验到键盘输入ESC后,退出程序;当键盘输入为ENTER时进入打字练习程序。单元程序如下:ZK db WELCOME TO PLAY THIS GAME!$ no db date:2010/01/11$meg db Press Enter key to continue.$meg1 db When a le
5、tter is dropping,please hit it!$meg2 db Press Space key to pause!$meg3 db Press ESC key to return main interface!$meg4 db Press letter Q to exit!$;设置主界面的显示内容.clear_screen 00d,00d,24d,79d ;清屏宏定义 Init_game 00d,00d,0ah,dl,80d,nextsign1 Init_game 24d,00d,0ah,dl,80d,nextsign2 Init_game 00d,00d,0ah,dh,25d
6、,nextsign3 Init_game 00d,79d,0ah,dh,25d,nextsign4 menu 05d,15d,ZK ;菜单信息的宏调用 menu 07h,15d,no 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 ;输入
7、为ENTRY进入打字练习 cmp al,51h jne put ;输入为“Q”退出程序 mov ah,4ch int 21h以上代码是清屏,并调用宏实现主界面的显示,并在主界面中设置了菜单显示后的光标位置,以方便使用者的操作。 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 ;如果键入ESC,则返回主菜单 je to_start1 cmp al, ;如果键入SPACE,则游戏暂停 je pause cmp
8、 al,di ;输入字母正确!则字母消失 je disappearto_start1: ;返回主菜单 jmp start上述程序段中用到了中断INT21,利用中断的有关规定,先将01H存入到AH当中,则AL中即为由键盘键入的字符。在此,先通过CMP指令来判断输入的字符是否是ENTER键(ENTER键的ASCII码为十六进制的0DH),如果是的话,程序将跳转到程序disappear,disappear是定义的又一个程序,该程序即为打字练习程序的核心部分。如果不是ENTER的话,将执行下一条指令,即判断键盘键入的是否为Q键,此功能由CMPAL,51H来实现,其中51H是Q键的ACSII码的十六进制
9、的表示。如果是Q键的话,程序将退出打字练习程序。如果键盘键入的既不是ENTER也不是Q键的话,程序将继续等待键盘的输入,直到输入的按键为ENTER和Q当中的一个为止。3.2.2随机字母产生模块当用户选择继续运行程序且进入打字练习界面时,则程序需要首先为用户输出一列随机的字符序列,这时程序就需要自动的调用产生随机字符序列的程序。程序段如下:letters db jwmilzoeucgpravskntxhdyqfb db iytpkwnxlsvxrmofzhgaebudjq db nwimzoexrphysfqtvdcgljukdaletters_bak db jwmilzoeucgpravskn
10、txhdyqfb db iytpkwnxlsvxrmofzhgaebudjq db nwimzoexrphysfqtvdcgljukda ;定义待“下落”的字符letter_counter db 0 begin: clear_screen 01d,01d,23d,78d ;清屏宏调用 clear_screen 01d,01d,23d,78d Init_game 23d,01d,01h,dl,78d,nextsign5 mov ah,02h mov bh,00h mov dh,01h mov dl,01h int 10h mov cx,00h lea si,letters上述的程序段中,begi
11、n实现了输出的字符的随机显示,这个随机是我们要事先通过自己随机定义一段由26个字母组成的序列,然后由begin来调用,从而间接来实现随即字母的产生。Begin段利用了INT10,其功能是设置屏幕显示方式,灵活的利用INT10丰富的指令功能,可以巧妙的设计出想要的程序来。INT10中断规定,DH和DL共同控制着字符输出的位置,其中DH为字符输出的行标,DL为字符输出的列标,通过改变DH和DL的值,可以改变字符在命令符输出屏幕上的位置;如果AH=09H时,则AL=字符,BL则是控制着输出的字符属性或颜色;计数器CX中存放的则是重复输出字符的个数。3.2.3字母落下模块程序进入打字功能,自动落下字母
12、,等待键盘输入字符,以此来判断输入者想什么,如果键盘输入与预期的相符合则程序自动执行相关功能。如果输入字符与落下字符相同,程序执行当前字母消失和产生下一落下字母的功能,字母落下功能的实现是通过逐行替换的方法实现的,字母在当前行出现会有一个延迟时间,当过了这个延迟时间时,程序执行当前位置清空操作,并在下一行显示上一行的字母。代码如下: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 c
13、onvey_letter mov ah,0ah mov bh,00h mov cx,01h int 10h mov di,al add letter_counter,01h jmp nextcycle convey_letter: sub al,7ah add al,61h mov ah,0ah mov bh,00h mov cx,01h int 10h mov di,al add letter_counter,01h jmp nextcycle clear_screen 01,01,23,78 mov ah,02h mov bh,00h mov dh,11d mov dl,20d int 1
14、0h inc dh inc dh mov ah,02h mov bh,00h int 10hdisappear: ;击中字母后输出空格 pop cx pop cx mov ah,0ah mov al, mov bh,00h mov cx,01h int 10h jmp hit 3.2.4暂停模块如果输入空格,则程序执行暂停功能,暂停功能的实现是通过以下方法实现的:当从键盘输入空格时,程序收到暂停信号,执行跳转,跳转到一个死循环模块,就是无限显示当前屏幕,不做其他任何操作,直到键盘再次输入空格时,程序收到暂停结束指令,跳转回到主程序模块,继续执行主模块的功能。代码如下:pass: pop cx
15、inc cx cmp cx,speed je print jmp out_cyclepause: push dx ;宏定义暂停处理 mov ah,06h mov dl,0ffh int 21h pop dx cmp al, jne pause jmp pass3.2.5返回主界面模块如果键盘输入ESC,程序结束当前运行,返回到程序的主界面,然后等待主界面中键盘的输入,这又跳回到主界面模块。相关代码包含在3.2.1主界面功能代码段当中。4程序调试4.1 运行界面分析程序运行后的主界面如图4-1,主界面第一行是欢迎语,第二行为程序制作的日期。接下来是操作说明。图4-1 程序主界面当用户按下ENTE
16、R键时,程序自动跳入到图4-2的界面,字母随机落下,用户便可以开始打字练习了。练习只要按照说明来做就可以了。图4-2 打字界面当用户按下“Q”键时,程序回到主界面如图图4-1,当用户按下的既不是ENTRY,也不是“Q”键时,程序仍然保留在主界面,如图图4-3。图4-3 按下非ENTRY、非“Q”界面 当键盘输入字母与屏幕落下字母相同时,字母消失;不相同时,字母没有消失,直到碰到下面“地面”。 打字过程按下空格键,则打字练习暂停,对其他键无反应,再次按下空格键,又恢复打字练习。4.2 调试过程及分析 开始在网上找到的源程序代码能够满足题目的大多数要求,但是在主界面按下除ENTRY以外的任何键时,
17、程序都会退出来,在源程序中找到对应的退出语句时,发现判断退出的分支语句没起到作用,后来根据流程图,合理地调整了一下退出语句中的分支结构,调试后,程序能够实现在主界面按下“Q”键退出打字练习程序的功能。 当程序正在运行时,如果之前已按下空格键暂停,则此时按下ESC退不出去,必须再次按下空格让程序开始运行才能退出。这是因为按下空格键时,程序跳转到一个死循环模块,无限显示当前屏幕,直到键盘再次输入空格。5心得体会5.1 设计体会课程设计对我们多数初学汇编的学生来说,确实是一座高峰。翻越他是需付出努力的。我也是在探索了好久才弄明白一点点皮毛,在此做个小总结,也许对自己今后的学习有些借鉴作用。在整个程序
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 课程设计 打字 练习 程序
链接地址:https://www.31ppt.com/p-2882658.html