可视化程序设计考查办法打字联系软件_第1页
可视化程序设计考查办法打字联系软件_第2页
可视化程序设计考查办法打字联系软件_第3页
可视化程序设计考查办法打字联系软件_第4页
可视化程序设计考查办法打字联系软件_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

网络教育陕西师范大学远程教育学院考查课科目____可视化程序设设计_____姓名____________学号_______专业____计算机应用技术_____批次______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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论