汇编课程设计.docx
《汇编课程设计.docx》由会员分享,可在线阅读,更多相关《汇编课程设计.docx(47页珍藏版)》请在冰豆网上搜索。
![汇编课程设计.docx](https://file1.bdocx.com/fileroot1/2022-12/18/6daf3537-3880-44fd-b5d4-4aa9e6bf5223/6daf3537-3880-44fd-b5d4-4aa9e6bf52231.gif)
汇编课程设计
课程设计
2013~2014学年第二学期
设计题目汇编语言程序设计课程设计-打字练习程序的设计
院(系)计算机科学与信息工程学院
专业计算机科学与技术
班级学号
学生姓名
设计时间2014年6月30日——2014年7月5日
指导教师
提交日期2014年7月5日
上海应用技术学院课程设计任务书
课程名称
汇编语言程序设计课程设计
课程代码
B704207
设计题目
汇编语言程序设计课程设计-打字练习程序的设计
题目序号
设计时间
2014年6月30日——2014年7月5日
系(院)
计算机科学与信息工程
专业
计算机科学与技术
班级
一、课程设计任务(条件)、具体技术参数(指标)
本课程设计是《汇编语言程序设计》课程的后继教学环节,通过对一个较大型的、综合性的应用程序进行阅读、修改、添加功能等工作,使学生对汇编语言程序设计有更进一步的认识,提高阅读理解复杂程序的能力和程序设计能力。
根据所给的“typetest.asm”应用程序框架,在此基础上修改和添加功能。
基本任务
1.认真阅读“typetest.asm”源程序,理解程序每一条指令在程序中的作用。
绘制程序流程图(简略总图,各模块详细流程图),给程序中的关键语句(后跟分号)作注释;
2.设置输入界面,用户输入密码后才能进入主菜单;(DONE)
3.修改主菜单,在主菜单上显示当天日期;(DONE)
4.修改主菜单,增加可供用户选择难度级别的选项;(DONE)
5.为用户打分,正确输入字母使用时间越少,得分越高;
6.修改程序,在屏幕右上角显示用户得分、已输入字母数、正确数;
7.将程序中的“置光标位置”程序段落用宏调用完成,添加“置光标位置”宏定义。
(DONE)
扩展任务
1.设置限定时间,到达该时间,用户尚未得到要求的分数时,游戏停止;
2.到达限定时间,用户得分达到预设的值时,自动提高难度等级,屏幕变色;
3.修改程序,底行的笑脸字母消失后,不再在该列下落字母(提示:
设置数组记录笑脸字母的存在与否)。
笑脸字母全部消失后,游戏停止,显示告别画面,显示用户成绩。
其他任务
自行设计新的功能。
二、对课程设计成果的要求(包括课程设计说明书、图纸、图表、实物等软硬件要求)
1.分析原“typetest.asm”程序结构(见附件),画出主程序粗略的流程图和各个模块的详细流程图,每个功能模块用文字说明他们的功能(与对应流程图放在一起);
2.对已经实现的功能(修改的、新编写的)做详细的说明,并附上流程图及程序清单(修改/增加的指令请使用大写字母,以示区别);
3.对该“打字练习程序”的进一步设想;
4.对于有设想但最终未实现的功能的大致编程思路的阐述;
5.论述在设计过程中遇到的并且对你具有启发性的问题
三、课程设计工作进度计划:
周一:
布置任务,介绍程序功能和基本模块。
学生仔细阅读原始源程序,在重要行添加注解。
周二:
画出主程序粗略的流程图和各个模块的详细流程图,对课程设计的基本任务进行设计,并开始编程。
周三~周四:
设计程序及调试程序。
同时着手撰写课程设计报告。
周五:
完成设计,提交开发完成的程序和课程设计报告,接受教师考评。
四、主要参考资料
[1]杨文显,宓双,胡建人.新编汇编语言程序设计.清华大学出版社,2010
[2]朱玉龙,任文览等.汇编语言程序设计.清华大学出版社,2003
[3][美]KipR.Irvine.汇编语言程序设计.电子工业出版社,2004
指导教师(签名):
教研室主任(签名):
杨晶鑫
2014年6月25日2014年6月25日
上海应用技术学院课程设计任务书ii
2.22用户密码验证…………………………………………………………………………
2.23游戏功能模块…………………………………………………………………………
2.24游戏难度选择…………………………………………………………………………
2.25游戏计分、计个数、显示已输出字母………………………………………………
2.26游戏自动升级并变色…………………………………………………………………
2.27游戏结束模块…………………………………………………………………………
1概述
这次课程设计主要是用汇编语言设计一个打字游戏,任务是要设计一个具备输入输出界面、调用宏指令、用户密码设置、显示当天日期,游戏难度级别划分、游戏显示分数、正确的个数等,以及扩展功能限定时间或者到达要求的分数游戏停止、难度等级自动提高屏幕变色,以及底行笑脸消失字母不在此行下落等功能。
本程序的设定考虑到用户使用的方便以及用户资料的保密性,界面简洁方便于用户操作,为此程序的正确性和健壮性尤为重要,所以编写程序时,要不断进行调试,以确保程序没有BUG。
1.1基本功能
本游戏有一下几大功能:
1..显示功能
菜单显示、时间显示、功能显示、字母显示,动态字母。
2.用户输入界面,设置安全密码
3.当天日期显示
4.游戏难度级别划分选择以及自动提升难度。
5.为用户打分,正确输入字母使用时间越少,得分越高;
6.在屏幕右上角显示用户得分、已输入字母数、正确数;
7..结束界面
1.2拓展功能
1.设置限定时间,到达该时间,用户尚未得到要求的分数时,游戏停止;
2.到达限定时间,用户得分达到预设的值时,自动提高难度等级,屏幕变色;
3.修改程序,底行的笑脸字母消失后,不再在该列下落字母(提示:
设置数组记录笑脸字母的存在与否)。
笑脸字母全部消失后,游戏停止,显示告别画面,显示用户成绩。
其他任务
1.3宏调用
为了使代码简化,所以程序中多次用到宏调用。
宏定义一:
Init_boardermacrorow,col,char,dhdl,count;边框宏定义,row=行,col=列,char=字符,count=次数
Localll
movcx,count
movdh,row
movdl,col
ll:
movah,02h;置光标位置,bh=页号,dh/dl=行/列
movbh,00h
int10h
pushcx
movah,0ah;在光标位置显示字符
moval,char;al=字符,cx=字符重复次数,bh=显示页
movbh,00h
movcx,01h
int10h
popcx
incdhdl
loopll
宏定义二:
clear_screenmacrotop,left,bottom,right,color;清屏宏定义
movah,06h;屏幕初始化al=上卷行数,bh=卷入行性质
moval,00h
movbh,color
movch,top;ch/cl=左上角行/列号,dh/dl=右上角行/列号
movcl,left
movdh,bottom
movdl,right
int10h
movah,02h;置光标位置,bh=页号,dh/dl=行/列
movbh,00h
movdh,00h
movdl,00h
int10h
endm
宏定义三:
uangbiaomacropage,row,col;设置光标位置宏定义
movah,02H
movbh,page
movdl,col
movdh,row
int10H
ENDM
宏定义四:
menumacrorow,col,text;菜单显示宏定义
movah,02h;置光标位置,bh=页号,dh/dl=行/列
movbh,00h
movdh,row
movdl,col
int10h
movah,09h;显示字符串,ds:
dx=串地址
leadx,text
int21h
endm
2详细设计说明
总程序的详细说明。
2.1原“typetest.asm”程序结构
一,登陆界面
二,显示当天日期
三,消笑脸
四,推出界面
图1typetest.asm结构图
2.2已经实现的功能(修改的、新编写的)程序结构
一,原有功能
1.登陆界面
2.游戏界面
3.字体下落
4.字体消失
5.笑脸消失
6.退出游戏
二,修改功能
1.用户密码登陆
2.光标宏调用
3.显示日期
4.游戏打分,字母个数等
5.游戏级别选择
6.游戏难度自动提升
三,拓展功能
1.游戏未达到分数,游戏停止
2.游戏达到预设值,等级提升,并且颜色改变
3.显示告别时显示用户成绩
2.2.1用户界面
界面代码
menu09d,15d,mes0
menu11d,18d,mes1
menu13d,18d,mes2
menu15d,18d,mes3
menu17d,15d,mes4
guangbiao00h,22d,33d;设置光标位置,bh=页号,dh/dl=行/列
keyin:
movah,07h;从键盘输入命令字符
int21h
cmpal,0dh
jebegin1;输入为回车开始
cmpal,'E'
jeexit
cmpal,'e'
jeexit;按e退出
jmpkeyin;否则回到界面
exit:
movax,4c00h
int21h
2.2.2用户密码验证
No
Yes
用户密码验证代码:
NEW:
movputnum,0
movrighnum,0
movscore,0
movcishu,0
movgametime,0
movcolour,0fh
clear_screen00d,00d,24d,79d,079h;全屏清屏
Init_boarder00d,00d,0ah,dl,80d;边框
Init_boarder24d,00d,0ah,dl,80d;边框
Init_boarder00d,00d,0ah,dh,25d;边框
Init_boarder00d,79d,0ah,dh,25d;边框
clear_screen01d,01d,23d,78d,079h;清屏,保留外部边框
menu10d,18d,mes5;显示输入密码
movsi,0;si代表密码下标
movcx,10;一共10位数字,验证10次
next:
movah,07h;从键盘输入一个字符,在al中
int21h
pushax
movdl,'*';输入一个字符,显示一个'*',显示字符在dl上
movah,02h
int21h
popax
cmpal,passwords[si];10个字符一个一个比较
jnewrong;如果输入字符错误,跳转到WRONG
incsi
loopnext;如果正确就继续循环
jmpstart0;全部对比完毕,如果正确跳转到START1
wrong:
movsi,0h
jmpNEW
2.2.3游戏功能模块
2.2.4游戏难度选择
源代码
;-------------------------------------------------------------------------
;**选择游戏难度**
;-------------------------------------------------------------------------
begin1:
clear_screen01d,01d,23d,78d,079h;边界不清,其他中间清屏
menu5d,30d,mes7;游戏难度
menu8d,30d,mes8
menu11d,30d,mes9
menu14d,30d,mes10
guangbiao0,19,28
leadx,mes11;选择游戏的等级,对应等级,赋值
callreaddec
cmpax,2
jedone
cmpax,1
jedone
cmpax,3
jedone
cmpax,4
jedone
jmpbegin1;选择错误,则重新选择
;-------------------------------------------------------------------------
;**游戏难度升级**(达到最高级,则退出)
;-------------------------------------------------------------------------
higher:
;难度升级
pushbx
movGAMETIME,0;游戏次数
incdengji;等级
movBX,dengji
popBX
cmpdengji,4
jnajixu;不高于4,则转向JIXU
jmpVERY_GOOD;如果已经是最高等级,则退出,显示good
done:
movdengji,ax
;-------------------------------------------------------------------------
jixu:
clear_screen01d,01d,23d,78d,079h;清屏
Init_boarder23d,01d,01h,dl,78d;设置笑脸边框在最后第二排,01h代表笑脸
movbx,dengji;根据等级选择速度等级
decbx
shlbx,1;逻辑左移
movcx,speed[BX]
wait_for_key:
;延迟
pushcx
movcx,yanchi[BX];需要修改
2.2.5游戏计分、计个数、显示已输出字母
;------------------------------------------------------------------
;**显示必要数值**
;------------------------------------------------------------------
guangbiao0,0,8
leadx,mes12;显示已输出的字母
movax,putnum
callwritedec
guangbiao0,0,35
leadx,mes13;显示正确的字母数
movax,righnum
callwritedec
guangbiao0,0,58
leadx,mes14;显示分数
movax,score
callwritedec
pass0:
INCPUTNUM;输入字母个数加一
movbh,0
movah,3
int10h
PUSHDX
PUSHAX
guangbiao0,0,8;光标位置设定
LEADX,MES12;显示的输入个数加一
MOVAX,PUTNUM
CALLWRITEDEC
POPAX
POPDX
pushax
MOVAX,RIGHNUM;如果输入的数有5个错的,则自动退出
ADDAX,5
CMPAX,PUTNUM
JNZTUI
jmpJIESHU
TUI:
popax
GUANGBIAO0,DH,DL
GUANGBIAO00h,dh,dl
movah,0ah
moval,""
movbh,00h
movcx,01h
int10h
INCCISHU;次数
CMPCISHU,10
JNENEX
JMPJIESHU;10次没有输入结束
INCRIGHNUM
PUSHBX;进栈
PUSHDX;进栈
PUSHAX;进栈
PUSHDI;进栈
GUANGBIAO0,00,35
LEADX,MES13;显示正确提示
MOVAX,RIGHNUM
CALLWRITEDEC
GUANGBIAO0,00,58
MOVSI,SCORE;si代表分数
MOVBX,DENGJI
ADDSI,BX
MOVSCORE,SI
LEADX,MES14;计算分数并输出
MOVAX,SCORE;显示分数
CALLWRITEDEC
POPDI;出栈
POPAX;出栈
POPDX;出栈
POPBX;出栈
JMPnext_letter;出现下一个字母
2.2.6游戏自动升级变色
;-------------------------------------------------------------------------
;**游戏难度升级**(达到最高级,则退出)
;-------------------------------------------------------------------------
higher:
;难度升级
pushbx
movGAMETIME,0;游戏次数
incdengji;等级
movBX,dengji
popBX
cmpdengji,4
jnajixu;不高于4,则转向JIXU
jmpVERY_GOOD;如果已经是最高等级,则退出,显示good
done:
movdengji,ax
;--------------------------------------------------------------------------
;**选择速度**
;--------------------------------------------------------------------------
movbx,dengji;根据等级选择速度等级
decbx
shlbx,1;逻辑左移
movcx,speed[BX]
wait_for_key:
;延迟
pushcx
movcx,yanchi[BX];需要修改
;--------------------------------------------------------------------------
HIGHER1:
addCOLOUR,6;改变颜色
CLEAR_SCREEN0,0,24,79,COLOUR
JMPHIGHER2
HIGHER2:
JMPHIGHER
2.27游戏结束模块
;----------------------------------------------------------------------------
;**计数**
;----------------------------------------------------------------------------
pass0:
INCPUTNUM;输入字母个数加一
movbh,0
movah,3
int10h
PUSHDX
PUSHAX
guangbiao0,0,8;光标位置设定
LEADX,MES12;显示的输入个数加一
MOVAX,PUTNUM
CALLWRITEDEC
POPAX
POPDX
pushax
MOVAX,RIGHNUM;如果输入的数有5个错的,则自动退出
ADDAX,5
CMPAX,PUTNUM
JNZTUI
jmpJIESHU
TUI:
popax
GUANGBIAO0,DH,DL
GUANGBIAO00h,dh,dl
movah,0ah
moval,""
movbh,00h
movcx,01h
int10h
INCCISHU;次数
CMPCISHU,10
JNENEX
JMPJIESHU;10次没有输入结束
JIESHU:
CLEAR_SCREEN0,0,24,79,079h;清屏
GUANGBIAO0,5,32
LEADX,MES14;显示分数
MOVAX,SCORE
CALLWRITEDEC
GUANGBIAO0,10,31;设置光标位置
LEADX,MES15;游戏结束
MOVAH,09H
INT21H
GUANGBIAO0,15,18;设置光标位置
LEADX