汇编设计报告打字计时练习程序.docx

上传人:b****5 文档编号:2879060 上传时间:2022-11-16 格式:DOCX 页数:17 大小:65.31KB
下载 相关 举报
汇编设计报告打字计时练习程序.docx_第1页
第1页 / 共17页
汇编设计报告打字计时练习程序.docx_第2页
第2页 / 共17页
汇编设计报告打字计时练习程序.docx_第3页
第3页 / 共17页
汇编设计报告打字计时练习程序.docx_第4页
第4页 / 共17页
汇编设计报告打字计时练习程序.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

汇编设计报告打字计时练习程序.docx

《汇编设计报告打字计时练习程序.docx》由会员分享,可在线阅读,更多相关《汇编设计报告打字计时练习程序.docx(17页珍藏版)》请在冰豆网上搜索。

汇编设计报告打字计时练习程序.docx

汇编设计报告打字计时练习程序

 

汇编语言课程设计报告

(2012--2013年度第1学期)

课题名称:

打字计时练习程序

目录

1设计目的1

2概要设计1

2.1系统总体分析1

2.2主模块框图2

3详细设计2

3.1主模块及子模块说明2

3.2各模块详细设计3

3.2.1主界面模块3

3.2.2中断处理模块3

3.2.3打字计时模块5

4程序调试8

4.1运行界面分析8

4.2调试过程及分析10

5心得体会10

5.1设计体会10

5.2系统改进11

参考文献12

附录13

附录1源程序清单13

附录1.1打字计时练习模块源程序13

 

打字计时练习程序

1设计目的

这次课程的任务是写一个在键盘上练习打字并能统计时间的程序,运行可执行程序后,按回车键出现主界面,进入英文打字练习并计时,通过课程设计,主要达到以下目的:

1.增进对汇编语言的认识,加强运用汇编语言编程的能力;

2.掌握汇编语言的中断调用功能的应用,可以用汇编语言调用各种调用功能,并由此实现对硬件的控制等;

3.了解和掌握汇编语言程序设计过程、方法及实现,为以后微机原理课程的学习打下坚实的基础;

4.通过课程设计可以使我们更加了解书上的知识,了解书上的语句并能用到自己的程序设计中;

5.掌握屏幕输出显示的设计方法。

2概要设计

2.1系统总体分析

在缓冲区中预放了一些字母,运行时,可按照屏幕上显示的字母输入练习,每输入完一行按回车键后,可显示出练习输入的时间。

当一个句子输入完后(回车键作为结束符),屏幕上以min:

sec:

msec的格式显示出键入字符的时间。

在每次打字之前,屏幕上先显示一个例句,然后打字员按照例句,将句中字符通过键盘输入。

这个过程共进行五次,当键入一个Enter键时,退出打字计时练习程序。

在键盘上联系的打字例句及其地址表、计时单位等预放在DATA数据段中。

自编的中断程序Kbint检测按键时产生的中断,并把按键扫描码转换为ASCII码存入缓存区BUFFER(内存中的一个区域),这个工作和EOM09类型的键盘中断例行程序所完成的工作大致相同,只是在解释各个键时做了简化,即只解释了可显示字符(如英文小写字母、数字及一些字符),其他特殊键(如组合键、双态键、功能键等)都未做解释,只做字符码0来处理。

在主程序部分保存原有09类型的中断向量,设置自编例行程序的中断向量,设置中断屏蔽位,然后开中断。

当键盘中段处理后,主程序安排指令读取缓存区中的字符并显示在屏幕上。

在主程序的末尾,利用DOS功能恢复原09类型的中断向量,然后返回DOS。

在显示键入的字符时,还应判断字符是否为回车符(0DH)。

如为回车符,说明一个句子输入完毕,此时调用显示时间的子程序显示打字时间,然后顺序显示一个例句。

如果所存放的例句都已显示完毕,则再次从第一个例句开始显示,直至键入某个功能(如ESC键等)退出程序,结束打字练习。

打字时间统计利用自编的定时器中断处理程序Clint来完成。

每输入一个例句,计时一次。

在此中断例行程序中,定时器中断的次数记录在计数单位count中,当count的计数值为18时,sec计数单位加1,当sec计数值打到60时,min计数单位加1.因为输入完一个句子无论如何也不会达到小时级,所以hours计数值的调整判断,实际上只起到退出定时器的作用。

加入一个显示菜单程序,使得原来的程序更具有观赏性;显示时间的子程序disptime分别将各计时单位的二进制数转换为十进制,并以min:

sec:

msec的形式出来。

其中msec是由count中的计数值转换成的。

Count*1s/18.2=count*55ms

此式中,18.2是计算机系统中产生的一个时间中断,每秒18.2次。

2.2主模块框图

程序的核心模块是打字计时,通过显示的例句进行打字练习,最后显示出运行时间,主体流程图如下:

a.建立汇编原程序—通过———→b。

编译为目标文件—↓——→d.连接为可执行文件

↑↓

∣c.不通过,重新修改(语句错误)↓

∣———————————————————↓

↑f.不正确,用调式工具调式,重新修改(逻辑错误)↓

﹂———————————————————————e.运行

正确g.完成

3详细设计

3.1主模块及子模块说明

主模块:

运行可执行程序显示打字主界面

缓冲区:

BUFFER,BUFPT1,BUFPT2

调用中断8259,键盘中断,时钟中断,设置打字计时文件输入所显示的例句、显示所用时间、回到主界面程序顺序。

3.2各模块详细设计

3.2.1主界面模块

主界面模块:

采用宏调用的方式将界面清屏并显示主界面和字母组成的乱序行界面。

程序运行后,我们首先要进行选择要继续进行即进入打字练习程序还是终止练习退出程序。

所以需要设置一个程序判断键盘键入的字符,规定E键和ENTER键分别为终止程序的控制键和进入打字练习程序的控制键,即当检验到键盘输入E后,退出程序;当键盘输入为ENTER时进入打字练习程序。

程序段中用到了中断INT21,利用中断的有关规定,先将01H存入到AH当中,则AL中即为由键盘键入的字符。

在此,先通过CMP指令来判断输入的字符是否是ENTER键(ENTER键的ASCII码为十六进制的0DH,程序开头部分的宏定义已经令CR为0DH),如果是的话,程序将跳转到程序speed3,speed3是定义的又一个程序,该程序即为打字练习程序的核心部分。

如果不是ENTER的话,将执行下一条指令,即判断键盘键入的是否为E键,此功能由CMP AL,45H来实现,其中45H是E键的ACSII码的十六进制的表示。

如果是E键的话,程序将跳转到exit子程序,再通过exit程序来判断是否要退出打字练习程序。

如果键盘键入的既不是ENTER也不是E键的话,程序将继续等待键盘的输入,直到输入的按键为ENTER和E当中的一个为止。

3.2.2中断处理模块

利用DOS提供的程序控制硬件。

优点是兼容性好,使用方便。

DOS是IBMPC系列微机的操作系统负责管理系统的所有资源,协调微机的操作,其中包括大量可供用户调用的服务程序。

DOS的功能调用不依赖于硬件系统。

所有的DOS系统功能调用都是利用软件中断指令INT21H来实现的。

也就是说在程序中需要调用DOS功能的时候,只要使用一条INT21H指令即可。

INT21H是一个具有90多个子功能的中断服务程序,这些子功能大致可以分为4类:

设备管理、目录管理、文件管理和其他。

为了方便用户使用这些子功能,INT21H对每一个子功能都进行了编号—称为功能号。

这样用户就能通过指定功能号来调用INT21H的不同子功能.

DOS系统功能调用的方法如下:

1.AH->功能号。

2.在其他的寄存器中放入该功能所要求的入口参数

3.在执行INT21H指令。

4.分析出口参数

用户自编中断处理程序基本形式

(1)将原中断向量保存在堆栈中或自设的存储单元中。

movah,35h

moval,int-type

int21h

movkeep-ip,bx

movkeep-cs,es

(2)设置自编处理程序的中断向量:

pushds

movdx,offsetroutine

movax,segroutine

movds,ax

moval,int-type

movah,25h

int21h

popds

(3)当中断程序结束时,必须恢复原来的中断向量,否则后续程序不能正确使用系统提供的例行程序。

pushds

movdx,keep-ip

movax,keep-cs

movds.ax

moval,int-type

movah,25h

int21h

popds

(4)编写中断处理子程序以完成中断处理功能,结束时由IRET返回中断点。

routineprocfar

pushax

sti

moval,20h

mov20h,al

popax

iret

routineendp

3.2.3打字计时模块

打字的计时部分就是定时器中断处理部分。

定时器的终端类型为08H,中断优先级比键盘高,只要在键盘中断处理程序KBINT中用一条STI指令允许高级中断,那么在整个键盘的输入过程中,定时器会以每秒18.2次的频率产生中断。

根据计时的需求,在整个键盘的输入过程中,必须把定时器中断的次数转换成时间,因此需要使用1CH中断扩充原定时期例行程序的功能。

在自编的1CH中断例行程序中,定时器中断的次数记录在计数单元count中,当count计数值为18时,sec计数单元加1,当sec计数值达到60时,main计数单元加1.当然,输入一个句子无论如何也不会达到小时计,所以对hours计数值的调整判断,实际上只起到推出定时器中断的作用。

当打完一个例句后按Enter键显示打字练习时间:

calldisptime

leadx,crlf

movah,09h

int21h

addsi,2

cmpsi,5*2

jnenext

jmpfirst

endint:

cli

pushds

movdx,save_lc

movax,save_lc+2

movds,ax

moval,1ch

movah,25h

int21h

popds

pushds

movdx,oldip9

movax,oldcs9

movds,ax

moval,09h

movah,25h

int21h

popds

sti

ret

mainendp

clintprocnear

pushds

movbx,data

movds,bx

leabx,count

incwordptr[bx]

cmpwordptr[bx],18

jnereturn

callinct

adj:

cmphours,12

jlereturn

subhours,12

return:

popds

sti

iret

clintendp

inctprocnear

movwordptr[bx],0

addbx,2

incwordptr[bx]

cmpwordptr[bx],60

jneexit

callinct

exit:

ret

inctendp

disptimeprocnear

movax,min

callbindec

movbx,0

moval,':

'

movah,0eh

int10h

movax,sec

callbindec

movbx,0

moval,':

'

movah,0eh

int10h

movbx,count

moval,55d

mulbl

callbindec

ret

disptimeendp

bindecprocnear

movcx,100d

calldecdiv

movcx,10d

calldecdiv

movcx,1

calldecdiv

ret

bindecendp

decdivprocnear

movdx,0

divcx

movbx,0

addal,30h

movah,0e

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1