汇编语言课程设计报告-打字练习程序(内附源程序).doc_第1页
汇编语言课程设计报告-打字练习程序(内附源程序).doc_第2页
汇编语言课程设计报告-打字练习程序(内附源程序).doc_第3页
汇编语言课程设计报告-打字练习程序(内附源程序).doc_第4页
汇编语言课程设计报告-打字练习程序(内附源程序).doc_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

汇编语言程序设计报告 1 课 程 设计 20102010 20112011 学年第二学期学年第二学期 设计题目设计题目 打字练习程序打字练习程序 院(系)院(系) 计算机科学与信息工程计算机科学与信息工程 专专 业业 计算机科学与技术计算机科学与技术 班班 级级 091041b1091041b1 学号学号 09104111130910411113 学生姓名学生姓名 王涛王涛 设计时间设计时间 20112011 年年 6 6 月月 2020 日日20112011 年年 6 6 月月 2424 日日 指导教师指导教师 蒯锐蒯锐 提交日期提交日期 20112011 年年 6 6 月月 2424 日日 汇编语言程序设计报告 2 上海应用技术学院课程设计任务书上海应用技术学院课程设计任务书 课程名称课程名称汇编语言课程设计汇编语言课程设计课程代码课程代码 b704207b704207 设计题目设计题目打字练习程序打字练习程序题目序号题目序号 设计时间设计时间20112011 年年 6 6 月月 2020 日日 20112011 年年 6 6 月月 2424 日日 系(院)系(院) 计算机科学与信息计算机科学与信息 工程工程 专业专业计算机科学与技术计算机科学与技术班级班级 091041b1091041b1 一、课程设计任务(条件)一、课程设计任务(条件) 、具体技术参数(指标)、具体技术参数(指标) 本课程设计是80x86 汇编语言程序设计课程的后继教学环节, 通过对一个较大型的、综合性的 应用程序进行阅读、修改、添加功能等工作, 使学生对汇编语言程序设计有更进一步的认识, 提高 阅读理解复杂程序的能力和程序设计能力。 根据所给的“typetest.asm”应用程序框架, 在此基础上修改和添加功能。 基本任务: 1 认真阅读“typetest.asm”源程序, 理解程序每一条指令在程序中的作用。绘制程序流程图 (简略总图,各模块详细流程图) ,给程序中的关键语句(后跟分号)作注释。设置输入界面, 用户输入密码后才能进入主菜单 ; 2. 修改主菜单, 在主菜单上显示当天日期 ; 3. 修改主菜单, 增加可供用户选择难度级别的选项。 4. 为用户打分,正确输入字母使用时间越少,得分越高。 5. 修改程序, 在屏幕右上角显示用户得分、已输入字母数、正确数。 6. 将程序中的“置光标位置”程序段落用宏调用完成, 添加“置光标位置”宏定义。 扩展任务: 7. 设置限定时间,到达该时间,用户尚未得到要求的分数时,游戏停止。 8. 到达限定时间,用户得分达到预设的值时, 自动提高难度等级, 屏幕变色。 9. 修改程序,底行的笑脸字母消失后,不再在该列下落字母(提示:设置数组记录笑脸字母的 存在与否) 。笑脸字母全部消失后, 游戏停止, 显示告别画面,显示用户成绩。其他任务: 汇编语言程序设计报告 3 自行设计新的功能。 二、对课程设计成果的要求(包括课程设计说明书、图纸、图表、实物等软硬件要求) (1)分析原“typetest.asm”程序结构: 画出主程序粗略的流程图和各个模块的详细流 程图,每个功能模块用文字说明他们的功能(与对应流程图放在一起) ; (2)对你已经实现的功能(修改的、新编写的)做详细的说明, 并附上流程图及程序清 单(修改修改/ /增加的指令请使用大写字母,以示区别增加的指令请使用大写字母,以示区别); (3)自己对该“打字练习程序”的进一步设想; (4)对于有设想但最终未实现的功能的大致编程思路的阐述; (5)论述在设计过程中遇到的并且对你具有启发性的问题。 (6)严禁抄袭,发现雷同,双方扣分严禁抄袭,发现雷同,双方扣分。 三、课程设计工作进度计划: 周一:教师布置任务,讲解本课设模块。学生细读原始源程序,在重要行添加注解。 周二:画出主程序粗略的流程图和各个模块的详细流程图,开始基本任务。 周三周四:设计程序及调试程序。同时着手写报告。 周五:完成设计,提交报告,接受教师考评。 汇编语言程序设计报告 4 四、主要参考资料 1 杨文显,宓双,胡建人.新编汇编语言程序设计,清华大学出版社,2010 2 朱玉龙,任文览等.汇编语言程序设计,清华大学出版社,2003 3 美kip r.irvine. 电子工业出版社,2004 指导教师(签名):蒯锐 教研室主任(签名):杨晶鑫 2011 年 6 月 20 日 2011 年 6 月 20 日 汇编语言程序设计报告 5 目录目录 2010 2011 学年第二学 期 1 1.概 述 5 1.1 基本功 能 5 1.2 扩展功 能 6 2.详细设计说 明 7 2.1 分析原“typetest.asm”程序结 构8 2.1 已经实现的功能(修改的、新编写的)说 明9 汇编语言程序设计报告 6 3. 对该“打字练习程序”的进一步设 想10 3.1 11 3.2 12 3.3 12 4. 课程设计总 结 13 5. 软件使用说 明 13 6附录(参考文献,原代码) 14 6.1 参考文 献 14 6.2 源代 码 15 汇编语言程序设计报告 7 1 1概述概述 本课程设计是80x86 汇编语言程序设计课程的后继教学环节, 通过对一个 较大型的、综合性的应用程序进行阅读、修改、添加功能等工作, 使学生对汇 编语言程序设计有更进一步的认识, 提高阅读理解复杂程序的能力和程序设计 能力基本功能 1.1 基本功能 (1)设置输入界面, 用户输入密码后才能进入主菜单 (2)修改主菜单, 在主菜单上显示当天日期。 (3)修改主菜单, 增加可供用户选择难度级别的选项。 (4)为用户打分,正确输入字母使用时间越少,得分越高。 (5)修改程序, 在屏幕右上角显示用户得分、已输入字母数、正确数。 (6)将程序中的“置光标位置”程序段落用宏调用完成, 添加“置光标位置” 宏定义。 1.2 拓展功能 1. 设置限定时间,到达该时间,用户尚未得到要求的分数时,游戏停止。 2. 到达限定时间,用户得分达到预设的值时, 自动提高难度等级, 屏幕变色。 3. 修改程序,底行的笑脸字母消失后,不再在该列下落字母(提示:设置数组 记录笑脸字母的存在与否) 。笑脸字母全部消失后, 游戏停止, 显示告别画 面,显示用户成绩。其他任务: 汇编语言程序设计报告 8 2 2详细设计说明详细设计说明 2.1分析原“typetest.asm”程序结构 2.1.1.首先在 typetest.asm 中定义了四个宏调用的程序 (1)方框宏定义 (2)清屏宏定义 (3)菜单显示宏定义 (4)设置光标位置宏定义 2.1.2 data 数据段的定义:包括的所有的显示字幕的定义。 2.1.3 各宏定义函数的调用以及对各个子函数的调用。 2.1.4 程序的主要流程图 汇编语言程序设计报告 9 方框宏定义 清屏宏定义 菜单显示宏定义 设置光标位置宏定义 data 数据段的定义: date db 0ah,0dh, “date:$“ mes0 db 0ah,0dh, “(1)press enter key to continue.$“ mes1 db 0ah,0dh, “(2)when a letter is dropping,please hit it!$“ mes2 db 0ah,0dh, “(3)press space key to pause!$“ mes3 db 0ah,0dh, “(4)press esc key to return main interface!$“ mes4 db 0ah,0dh, “(5)press letter e to exit!$“ mes5 db please enter your password :$ mes6 db 0ah,0dh,“1: $“ 汇编语言程序设计报告 10 返回 不正确 密码正确 确定后进入 开始 用户输入密码 判断密码 进入主菜单 汇编语言程序设计报告 11 选择需要练习的速度选项 1.fast2veryfast3.slow4.veryslow 选择需要的速度选项 开始练习打字游戏 汇编语言程序设计报告 12 计算打字的正确数 根据正确数计算出应得分数 显示用户所得分数,然后退出练 习界面 汇编语言程序设计报告 13 2.22.2 已经实现的功能(修改的、新编写的)说明已经实现的功能(修改的、新编写的)说明 2.2.1 本程序已实现了基本的功能: (7)设置输入界面, 用户输入密码后才能进入主菜单; (8)修改主菜单, 在主菜单上显示当天日期; (9)修改主菜单, 增加可供用户选择难度级别的选项; (10)为用户打分,正确输入字母使用时间越少,得分越高; (11)修改程序, 在屏幕右上角显示用户得分、已输入字母数、正确数; (12)将程序中的“置光标位置”程序段落用宏调用完成, 添加“置光标位置” 宏定义; 2.2.2 本程序的扩展功能: (1) 修改了主界面的背景颜色以及字体的颜色,对一些主要的提示信息进行 了一些优化。 (2) 增加了一键显示用户得分记录的功能,只要用户在主界面上输入“c” , 就可以显示出来用户的得分记录 汇编语言程序设计报告 14 3 3对对“打字练习程序打字练习程序”的进一步设想的进一步设想 3.1可以让每次出现的字母都变得有逻辑性,就像打汉字的时候的那种逻辑性, 还可以增加英语之类的打字练习。 3.2可以改变每一个字母在掉落的时候的颜色。让每一个字母的不同时刻的颜 色都由电脑随机产生。 3.3在打字练习的过程中还可以有一些适当的声音来配合着练习的进行,这样 的话效果和用户的体验都会有更进一步的提高的。 4 4课程设计总结课程设计总结 4.1通过这次课程设计让我跟具体的了解了汇编语言的用途以及他的特点,这 样有利于在今后的实践中更好的去应用汇编语言解决问题,同时通过这次 的课程设计也体现出了我的在汇编方面的一些基础知识的不足。由于对汇 编语言的一些基本知识的掌握不足,程序中还存在或多或少的缺陷和不足, 有一些的基本功能在逻辑上还存在一些的小问题,但是不会影响基本的使 用。 5 5软件使用说明软件使用说明 由于系统版本不同的缘故,在程序汇编链接的时候会停滞一部,但只要在敲一 下回车在进入一次就好了。很多时候在进入时输入密码后需要按回车才能跳转 到主界面。 汇编语言程序设计报告 15 6 6附录(参考文献,原代码)附录(参考文献,原代码) 参考文献参考文献 1 杨文显,宓双,胡建人.新编汇编语言程序设计,清华大学出版社,2010 2 朱玉龙,任文览等.汇编语言程序设计,清华大学出版社,2003 3 美kip r.irvine. 电子工业出版社,2004 原代码原代码 ; assembly program for test your type skills ; writed by in 06/24/2003 ; modified by mi shuang in 06/06/2005 ; - include ylib.h init_boarder macro row,col,char,dhdl,count; localll mov cx, count mov dh, row mov dl, col ll: mov ah, 02h mov bh, 00h int 10h push cx mov ah, 0ah mov al, char mov bh, 00h mov cx, 01h 汇编语言程序设计报告 16 int 10h pop cx inc dhdl loop ll endm ; - clear_screen macro top, left, bottom, right,col;清屏宏定义 mov ah, 06h mov al, 00h mov bh, col mov ch, top mov cl, left mov dh, bottom mov dl, right int 10h mov ah, 02h mov bh, 00h mov dh, 00h mov dl, 00h int 10h endm ;- setcusor macro page,row,column ;设置光标位置 mov ah,02h mov bh,page mov dl,column mov dh,row int 10h endm ; - 汇编语言程序设计报告 17 menumacrorow, col, text; 菜单显示宏定义 mov ah, 02h mov bh, 024h mov dh, row mov dl, col int 10h mov ah, 09h lea dx, text int 21h endm ; = data segment kaishi db 0ah,0dh, “ welcome to play the game !$“ year dw ? month db ? day db ? date db 0ah,0dh, “date:$“ mes0 db 0ah,0dh, “(1)press enter key to continue.$“ mes1 db 0ah,0dh, “(2)when a letter is dropping,please hit it!$“ mes2 db 0ah,0dh, “(3)press space key to pause!$“ mes3 db 0ah,0dh, “(4)press esc key to return main interface!$“ mes4 db 0ah,0dh, “(5)press letter e to exit!$“ mes5 db please enter your password :$ mes6 db 0ah,0dh, “1: $“ mes7 db 0ah,0dh, “2: $“ mes8 db 0ah,0dh, “3: $“ mess8db 0ah,0dh, “4: $“ mes9 db please choose the speed you want:$ mes10 db “the game is over!$“ mes15 db “do you want to continue ? yes(1)/no(0):$“ 汇编语言程序设计报告 18 mes11 db “your time:$“ mes12 db “right keys:$“ mes13 db “your score:$“ mes14 db “you have input:$“ mes20 db “hi guy good job!$“ mes21 db 0ah,0dh, “(6)press cto check your records!$“ mes22 db “these records:$“ col db 00h,24h,0fdh,0dh ;颜色 numb1 dw ? ;已输入字母的个数 numb dw ? ;输入正确字母的个数 score dw ? ;每轮游戏的分数 time dw ? sum dw ? ;所有字母下落的行数和 sum1 dw ? game_time dw ? ;记录游戏的次数 scores dw 4 dup(?) ;记录游戏分数 password db “111111“ password1 db 6 dup(?) grade dw ? speed dw1000h,300h,5000h,8000h yanchi dw 0f00h,3fffh,1fffh letters db “jwmilzoeucgpravskntxhdyqfb“ db “iytpkwnxlsvxrmofzhgaebudjq“ db “nwimzoexrphysfqtvdcgljukda“ present_position db 1 db 0 data ends ; = codesegment assumecs: code, ds: data 汇编语言程序设计报告 19 start: mov ax, data mov ds,ax mov es,ax new: clear_screen 0,0,24,79,0f4h setcusor 0,10,30 lea dx,mes5 mov ah,09h int 21h ;- - setcusor 0,11,61 lea bx,password1 mov cx,6 input: mov ah,07h int 21h mov bx,al inc bx mov ah,02h mov dl,* int 21h ;- - loop input contiun: mov ah,07h int 21h cmp al,0dh 汇编语言程序设计报告 20 jne contiun mov cx,6 lea si,password lea di,password1 check: mov al,si cmp al,di jne new inc si inc di loop check ;密码的输入及判断是否正确 ;- - start1: clear_screen 0d,0d,24d,79d,07h mov grade,0 mov numb,0 mov numb1,0 mov sum,0 mov score,0 mov cx,1000h ;隐藏光标 mov ah,01h int 10h clear_screen 0d,0d,24d,79d,1eh ;清屏 init_boarder 0d, 0d, *, dl, 80d init_boarder 24d,0d, *, dl, 80d init_boarder 0d, 0d, *, dh, 25d init_boarder 0d, 79d, *, dh, 25d ;初始化边框 menu 3d,20d,kaishi; ;显示菜单 menu 7d,15d, date 汇编语言程序设计报告 21 push dx ;显示当天的时间 mov ah,2ah int 21h mov year,cx mov month,dh mov day,dl mov dx,-1 mov ax,year call writedec mov ah,0 mov al,month call writedec mov dx,-1 mov al,day call writedec pop dx menu 09d, 15d, mes0 menu 11d, 15d, mes1 menu 13d, 15d, mes2 menu 15d, 15d, mes3 menu 17d, 15d, mes4 menu 29d, 15d, mes21 ;- - mov ah,02h ;设置光标位置 mov bh, 00h mov dh, 22d mov dl, 33d int 10h keyin: 汇编语言程序设计报告 22 mov ah, 07h ;从键盘输入命令字符,无回显 int 21h cmp al, 0dh je begin cmp al, e je exit cmp al,c ;输入c查询分数记录 je search jmp keyin search : push dx clear_screen 0,0,24,79,1eh menu 5d,20d,mes22 mov cx,4 lea si,scores next33: mov ah,02h mov dl,“ “ int 21h mov dx,-1 mov ax,si call writedec add si,2 loop next33 pop dx exit: mov ax, 4c00h int 21h ;- 汇编语言程序设计报告 23 - begin: clear_screen 0,0,24,79,0f6h menu 6d,28d,mes6 menu 9d,28d,mes7 menu 13d,28d,mes8 menu 15d,28d,mess8 setcusor 0,17,28 lea dx,mes9 call readdec cmp ax,2 ;选择游戏的等级 je done cmp ax,1 je done cmp ax,3 je done cmp ax,4 ;jne begin jmp done higher: ;难度增加时升级 push bx mov bx,game_time dec bx shl bx,1 mov si,score mov scoresbx,si mov numb,0 mov numb1,0 mov score,0 汇编语言程序设计报告 24 mov sum,0 mov sum1,0 mov bx,grade clear_screen 00d, 00d, 24d, 79d,colbx pop bx inc grade cmp grade,3 ja ok1 jmp ten ok1: jmp ok2 ;- - done: mov grade,ax clear_screen 00d, 00d, 24d, 79d,1eh ;清屏 ten: init_boarder 00d, 00d, *, dl, 80d init_boarder 24d, 00d, *, dl, 80d init_boarder 00d, 00d, *, dh, 25d init_boarder 00d, 79d, *, dh, 25d ;初始化边框 clear_screen 02d, 02d, 23d, 78d,1eh; 清屏(边框还存在) init_boarder 23d, 01d, 01h, dl, 78d; 在倒数第二行显示一行笑脸 setcusor 0,01,8 lea dx,mes14 mov ax,numb1 call writedec setcusor 0,01,35 lea dx,mes12 汇编语言程序设计报告 25 mov ax,numb call writedec setcusor 0,01,55 lea dx,mes13 mov ax,score call writedec ;显示已输击字母数,正确的字母数和分 数 ;- - mov ah, 02h mov bh, 00h mov dh, 02h mov dl, 02h int 10h ;将光标设置在第一行第一列 mov cx, 78 lea si, letters nextletter:mov ah, 02h; 显示字母 mov dl,si int 21h inc si loop nextletter ;- - start_game:;游戏开始 mov time,0 mov ah, 2ch int 21h;取系统时间,返回一个 099 的数,在 dl 里 inc dl cmp dl,78 汇编语言程序设计报告 26 jna sg1 sub dl,78 sg1: mov present_position, dl lea di, letters add di, word ptr present_position ;di 指向即将掉落的字母 dec di mov dl, present_position mov ah, 02h mov bh, 00h mov dh, 02h int 10h ;将光标设置在第一行和当前列的位置 mov cx, 20d;总共有 20 行是空的 ;- - nextrow: push cx mov bx,grade dec bx shl bx,1 mov cx,speedbx wait_for_key: push cx mov cx,yanchibx; 延迟 delay:loop delay push dx mov ah, 06h ; 从键盘输入字符 mov dl, 0ffh int 21h pop dx 汇编语言程序设计报告 27 jz pass;zf=1 表示没有输入字符,zf=0 表示有字符输入 cmp al, 1bh ; 如果键入 esc,则返回主菜单 je to_start cmp al, “ “; 如果键入 space,则游戏暂停 jne pass0 jmp pause ok2: jmp ok3 midstep: jmp nextrow ;- - pause: push dx; 暂停处理 mov ah, 06h mov dl, 0ffh int 21h pop dx cmp al, “ “ jne pause je pass jmp pass0 to_start: jmp start1 ;- - pass0: inc numb1 push dx push ax 汇编语言程序设计报告 28 setcusor 0,01,8 lea dx,mes14 mov ax,numb1 call writedec pop ax pop dx setcusor 0,dh,dl cmp al,di ; 输入字母正确!则字母消失 je disappear jmp pass high1: jmp higher kk3: jmp to_start ;- - pass: pop cx loop wait_for_key down: inc time inc sum mov ah, 0ah ; 在当前光标位置写空格 mov al, “ “ mov bh, 00h mov cx, 01h int 10h inc dh mov ah, 02h; 改变光标位置 mov bh, 00h 汇编语言程序设计报告 29 int 10h mov ah, 0ah; 在当前光标位置写字母 mov al, di mov bh, 00h mov cx, 01h int 10h pop cx loop midstep ;下一行 ;- - letter_over: 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, “ “ mov bh, 00h mov cx, 01h int 10h jmp next_letter jmp disappear jmp disappear ok3: jmp ok4 汇编语言程序设计报告 30 kk2: jmp kk3 disappear: ; 击中字母后输出空 pop cx po

温馨提示

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

评论

0/150

提交评论