版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
网络教育陕西师范大学远程教育学院考查课科目____可视化程序设设计_____姓名____________学号_______专业____计算机应用技术_____批次______12年秋______层次____高中起点专科_____学习中心_知金教育上海_
目录目
录
......................................................................................................................
1概
述
...................................................................................................................
课程设计目的
....................................................................................................
课程设计内容
....................................................................................................
2
系统需求分析
...........................................................................................................
系统目标
............................................................................................................
主体功能
............................................................................................................
开发环境
............................................................................................................
3
系统概要设计
.........................................................................................................
系统的功能模块划分
........................................................................................
系统流程图
........................................................................................................
4系统详细设计
.........................................................................................................
流程控制模块设计
............................................................................................
键盘监测处理模块设计
....................................................................................
计时处理模块设计
............................................................................................
其他补充说明
....................................................................................................
5
测试
.........................................................................................................................
测试方案
............................................................................................................
测试结果
............................................................................................................
6
小结
.........................................................................................................................
附
录
......................................................................................................................
附录1
源程序
............................................................................................................
8
1
概
述
课程设计目的
本课程设计是在学完教学大纲规定的全部内容、完成所有实践环节的基础上,旨在神话学生学习的汇编语言课程基本知识,机一部掌握汇编语言程序设计方法,提高分析问题、解决问题的综合应用能力。
课程设计内容
打字计时练习程序
2
系统需求分析
系统目标
设计一个在键盘上练习打字并能统计时间的程序。通过它练习英文打字练习,并能够统计时间。
主体功能
要求:在缓冲区中预放了一些字母,运行时,可按照屏幕上显示的字母输入练习,每输入完一行回车键后,可显示练习输入的时间。
开发环境
Window
XP+TASM5.0
3
系统概要设计
系统的功能模块划分
流程控制(主程序
)
键盘监测处理
计时处理模块
系统流程图
主体流程图:4系统详细设计
流程控制模块设计
流程控制模块即为主程序模块。主要功能为程序环境配置和流程控制,详细如下保存原09H中断向量,并配置自身中断(键盘中断入口
KBINT)
保存原1CH中断向量,并配置自身中断(时钟中断入口
CLINT)
通过BIOS
对屏幕及显示器所提供的服务程序设置显示方式
允许键盘和定时器中断
显示提示信息及例句
通过键盘监测处理模块显示用户输入,并判断是否为回车(0DH)。如为回车符,说明一个句子输入完毕,此时通过计时处理模块显示出打字时间。然后顺序显示下一个例句。如果所存放的例句都已显示完,则又从第一个例句开始显示,直至键入某一功能键(如Esc键、Shift键等)转入退出部分,结束打字练习。
退出程序。在退出前利用DOS功能恢复系统原中断向量。
注:5、6、7可参考主程序流程图。具体实现代码参照附录1
MAIN
程序段。
键盘监测处理模块设计
此模块具体实现可分为两个部分。
第一部分:KBINT
键盘中断处理程序。通过自编的KBINT键盘中断处理程序替换原09H中断向量,检测按键时产生的中断,并把按键的扫描码转换为ASCII码存入缓存区buffer,这个工作和ROM09类型的键盘中断例行程序所完成的工作大致相同,只是在解释各个键时作了简化,即只解释了可显示字符,如英文字母、数字及一些符号;其他特殊键,如组合键、双态键、功能键等都未作解释,只作为字符码0来处理。
第二部分:KBGET
获取键盘键入信息。此部分功能较为简单,为获取键盘键入的字符信息以供主程序进行流程控制和在屏幕显示。
注:以上两个部分的具体实现代码分别参照附录1
KBINT
“键盘中断处理程序”和KBGET
“获取键盘键入的信息”。
计时处理模块设计
此模块具体实现亦可分为两个部分。
第一部分:CLINT
定时器中断处理程序。打字时间统计利用自定时器中断处理程序CLINT来完成。每输完一例句,计时一次。在此中断例行程序中,定时器中断的次数记录在计数单元COUTNT中,当COUTNT计数值为18时,SEC计数单元加1
,当SEC计数值达到60时,MIN计数单元加1
。因为输入完一个句子无论如何也不会达到小时级,所以对HOURS计数值的调整判断,实际上只起到退出定时器中断的作用。
第二部分:DISPTIME
显示打字练习时间。显示时间的子程序DISPTIME通过调用子程序BINDEC将二进制数转化为十进制数,以min:sec:msec的形式显示出来。其中msec是由count记数值转换成的:count×1秒/18.2=count×55ms
。
注:以上两个部分的具体实现代码分别参照附录1
CLINT
“定时器中断处理程序”和DISPTIME
“显示打字练习时间”。
其他补充说明
提示信息以及例句以字符串形式存储在代码中。缓冲区BUFFER,
BUFPT1
,BUFPT2以及其他变量(如时间参数
COUNT
SEC
MIN
HOURS等)已在数据段定义详细可参照附录1
“数据段”。
另,代码段中有几个子程序未在上面模块设计中介绍,此处作简要说明。
INCT:计时程序中进位模块,协同时间中断计时程序CLINT实现计时。
BINDEC
与
DECDIV:实现具体的进制转换功能,协同DISPTIME
显示打字练习时间。
DISPCHAR:字符显示子程序,以显示字符5
测试
测试方案
3.打开编译链接后的生成程序,观察提示信息。
4.按照提示输入,并回车
5.输入五次,查看结果
测试结果
1.编译源程序,结果如下:2.链接0BJ文件,结果如下:3.打开生成的typetest.exe,显示如下信息:4.按照提示输入字符,回车后结果如下:5.按照提示继续输入至五次:回车后,结果:6.输入任意控制符(此处输入Esc),程序退出。
至此,测试完成。
结论:程序达到系统目标要求,实现了主体功能,运行结果正确。
6
小结
在这次的课程设计,我进一步深入了解了汇编语言,自身收获也不少.这是我第二次用汇编语言来处理一具体的问题,历时一周终于完成,其间有不少感触。在编写程序期间,编译程序时不断的出现错误,有的错误是因为粗心而导致的,一看就能解决;有的不知道是怎么错了,连书上都找不到解决的方法,不过通过不断的学习网上老师的教程的帮助很快就解决了。
通过这一周的课程设计,无论从学习上还是从自身角度,我自认都提高的非常迅速,发现了自己的能力和未被挖掘的潜力,认证了自身的坚强与韧力,总结出只有在强压与竞争中才会有意想不到的收获和进步。从要实现的功能到流程图的绘制,从程序的编写到程序的检查,从程序的调试到实验报告的写作,其间每一个过程都是自己不断探索的过程。
通过这次课程设计,我明白了做任何事情都要脚踏实地,认真钻研,严格谨慎,容不得半点敷衍。附
录
附录1
源程序
STACK
SEGMENT
PARA
STACK
'STACK'
DB
256
DUP(0)
TOP
LABEL
WORD
STACK
ENDS
;-------------------------------------------
;
以下为数据段
;-------------------------------------------
DATA
SEGMENT
PARA
PUBLIC
'DATA'
BUFFER
DB
16H
DUP(0)
缓冲区大小
BUFPT1
DW
0
缓冲区1
BUFPT2
DW
0
缓冲区2
KBFLAG
DB
0
参数,80H表示允许,00表示不允许
PROMPT
DB
'
*PLEASE
PRACTISE
TYPING*',0DH,0AH,'$'
定义提示语句
SCANTAB
DB
0,0,'1234567890-=',8,0
定义键盘
DB
'QWERTYUIOP[]',0DH,0
定义键盘第一行英文字母及符号
DB
'ASDFGHJKL;',0,0,0,0
键盘第二行英文字母及符号
DB
'ZXCVBNM,./',0,0,0
键盘第三行英文字母及符号
DB
'
',0,0,0,0,0,0,0,0,0,0,0,0,0
DB
'789-456+1230.'
******设置一些存储地址便于理解******
EVEN
OLDCS9
DW
?
9号中断向量地址
OLDIP9
DW
?
9号中断向量首地址
******预设置打字练习的句子******
STR1
DB
'ABCD
EFGH
IJKL
MNOP
QRST
UVWX
YZ.'
句子1
DB
0DH,0AH,'$'
STR2
DB
'THERE
ARE
SOME
NEWSPAPERS
ON
THE
TABLE.'
DB
0DH,0AH,'$'
STR3
DB
'THERE
ARE
SOME
CLOUDS
IN
THE
SKY.'
DB
0DH,0AH,'$'
STR4
DB
'SHE
ALWAYS
EATS
HER
LUNCH
AT
NOON.'
DB
0DH,0AH,'$'
STR5
DB
'I
DO
NOT
LIKE
AUTUMN
AND
WINTER.'
;句子5CRLF
DB
0DH,0AH,'$'
COLON
DB
':','$'
EVEN
SADDR
DW
STR1,STR2,STR3,STR4,STR5
;******定义时间参数******
COUNT
DW
0
记时器记数
SEC
DW
0
秒
MIN
DW
0
分
HOURS
DW
0
小时
SAVE_LC
DW
2
DUP(?)
1C向量地址
DATA
ENDS
;------------------------------------------------
;
以下为代码段
;------------------------------------------------
CODE
SEGMENT
ASSUME
CS:CODE,DS:DATA,ES:DATA,SS:STACK
MAIN
PROC
FAR
START:
MOV
AX,STACK
MOV
SS,AX
MOV
SP,OFFSET
TOP
PUSH
DS
现场保护
SUB
AX,AX
PUSH
AX
MOV
AX,DATA
MOV
DS,AX
MOV
ES,AX
;*******将原中断向量09H保存在自设的单元中******
MOV
AH,0
MOV
AL,4
INT
21H
MOV
AH,0BH
MOV
BH,0
MOV
BL,4
INT
11H
MOV
AH,35H
取中断向量的功能调用
MOV
AL,09H
INT
21HMOV
OLDCS9,ES
MOV
OLDIP9,BX
;******设置自编处理程序的中断向量******
PUSH
DS
MOV
DX,SEG
KBINT
自编中断类型程序段地址放入DS
MOV
DS,DX
MOV
DX,OFFSET
KBINT
自编中断类型程序偏移地址放入DX
MOV
AL,09H
MOV
AH,25H
设置中断向量功能调用
INT
21H
POP
DS
;******将原中断向量1CH保存在自设的单元中******
MOV
AH,35H
MOV
AL,1CH
INT
21H
MOV
SAVE_LC,BX
MOV
SAVE_LC+2,ES
;******设置自编处理程序的中断向量******
PUSH
DS
MOV
DX,SEG
CLINT
MOV
DS,DX
MOV
DX,OFFSET
CLINT
MOV
AL,1CH
MOV
AH,25H
INT
21H
POP
DS
;******允许键盘和定时器中断******
IN
AL,21H
允许键盘和定时器中断
AND
AL,11111100B
OUT
21H,AL
;******设置显示方式******
FIRST:
MOV
AH,0
MOV
AL,3
INT
10H
;******显示提示信息******
MOV
DX,OFFSET
PROMPT
显示提示信息
MOV
AH,9
INT
21H;******在屏幕上显示例句******
MOV
SI,0
NEXT:
MOV
DX,SADDR[SI]
显示例句
MOV
AH,09H
INT
21H
;******初始化变量******
MOV
COUNT,0
设置初值
MOV
SEC,0
MOV
MIN,0
MOV
HOURS,0
;******允许更高一级的中断******
STI
FOREVER:
CALL
KBGET
TEST
KBFLAG,,80H
JNZ
ENDINT
PUSH
AX
CALL
DISPCHAR
POP
AX
CMP
AL,0DH
JNZ
FOREVER
MOV
AL,0AH
CALL
DISPCHAR
;******显示时间******
CALL
DISPTIME
LEA
DX,CRLF
MOV
AH,09H
INT
21H
;******显示例句结束否?******
ADD
SI,2
CMP
SI,5*2
JNE
NEXT
JMP
FIRST
;******原来的中断向量******
ENDINT:
CLI
PUSH
DS
MOV
DX,SAVE_LC
MOV
AX,SAVE_LC+2MOV
DS,AX
MOV
AL,1CH
恢复中断向量1CH
MOV
AH,25H
INT
21H
POP
DS
PUSH
DS
MOV
DX,OLDIP9
MOV
AX,OLDCS9
MOV
DS,AX
MOV
AL,09H
MOV
AH,25H
INT
21H
POP
DS
STI
RET
MAIN
ENDP
;******定时器中断处理程序******
CLINT
PROC
NEAR
PUSH
DS
MOV
BX,DATA
MOV
DS,BX
LEA
BX,COUNT
INC
WORD
PTR[BX]
CMP
WORD
PTR[BX],18
初始化记数
JNE
RETURN
CALL
INCT
ADJ:
CMP
HOURS,12
是否满12小时
JLE
RETURN
SUB
HOURS,12
满足减去12
RETURN:
POP
DS
STI
IRET
CLINT
ENDP
;-------------------------------
INCT
PROC
NEAR
MOV
WORD
PTR[BX],0ADD
BX,2
INC
WORD
PTR[BX]
BX内容自增1
CMP
WORD
PTR[BX],60
和60比较
JNE
EXIT
CALL
INCT
EXIT:
RET
INCT
ENDP
;******显示打字练习时间******
DISPTIME
PROC
NEAR
显示时间主段
MOV
AX,MIN
分移动到AX寄存器
CALL
BINDEC
显示数字
MOV
BX,0
MOV
AL,':'
MOV
AH,0EH
显示冒号
INT
10H
MOV
AX,SEC
秒移动到AX
CALL
BINDEC
MOV
BX,0
MOV
AL,':'
MOV
AH,0EH
INT
10H
MOV
BX,COUNT
MOV
AL,55D
百分秒
MUL
BL
CALL
BINDEC
RET
DISPTIME
ENDP
;******将二进转化为十进显示时间******
BINDEC
PROC
NEAR
MOV
CX,100D
显示百位
CALL
DECDIV
MOV
CX,10D
显示十位
CALL
DECDIV
MOV
CX,1
显示个位
CALL
DECDIV
RET
BINDEC
ENDPDECDIV
PROC
NEAR
转化成字符显示
MOV
DX,0
DIV
CX
MOV
BX,0
ADD
AL,30H
转换成ASCII
MOV
AH,0EH
INT
10H
显示一个字符
MOV
AX,DX
RET
DECDIV
ENDP
;******获取键盘键入的信息******
KBGET
PROC
NEAR
PUSH
BX
CLI
MOV
BX,BUFPT1
标志缓冲区的大小
CMP
BX,BUFPT2
JNZ
KBGET2
CMP
KBFLAG,0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年大学(经济学)财政学阶段测试题及答案
- 2025年高职电子商务技术(电商平台技术)试题及答案
- 2025年高职汽车检测与维修技术(汽车售后服务管理)试题及答案
- 2025年大学大四(康复治疗学)运动康复技术综合试题及答案
- 2025年中职化学工艺(化工流程基础)试题及答案
- 2025年高职市场营销(渠道拓展方案)试题及答案
- 2025年大学大四(口腔医学)口腔修复学基础试题及答案
- 2025年中职(机电设备安装与维修)机电设备安装试题及答案
- 2025年大学服装与服饰设计(时尚设计)模拟试题
- 2025年大学(神经病学)神经病学实验阶段测试题及解析
- 2025河南周口临港开发区事业单位招才引智4人考试重点题库及答案解析
- 2025年无人机资格证考试题库+答案
- 南京工装合同范本
- 登高作业监理实施细则
- DB42-T 2462-2025 悬索桥索夹螺杆紧固力超声拉拔法检测技术规程
- 大学生择业观和创业观
- 车载光通信技术发展及无源网络应用前景
- 工程伦理-形考任务四(权重20%)-国开(SX)-参考资料
- 初中书香阅读社团教案
- 酒店年终总结汇报
- 《无人机地面站与任务规划》 课件 第1-5章 概论 -无人机航测任务规划与实施
评论
0/150
提交评论