汇编语言课程设计打字练习程序_第1页
汇编语言课程设计打字练习程序_第2页
汇编语言课程设计打字练习程序_第3页
汇编语言课程设计打字练习程序_第4页
汇编语言课程设计打字练习程序_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

1、汇编语言设计报告课题:打字计时练习程序专业计算机科学与技术(网络工程)学生姓名张飞龙班级B计算机092学号指导教师王志宏完成日期2011年6月22日打字计时练习程序设计1.问题提出及功能要求设计一个在键盘上练习打字并能统计时间的程序。通过它练习英文打字练习,并能够统计时间。要求:在缓冲区中预放了一些字母,运行时,可按照屏幕上显示的字母输入练习,每输入完一行后按回车键,可显示出练习输入的时间和下一行例句。按Esc键可退出程序。2算法设计2.1设计思路在键盘上练习的打字例句及其地址表、计时单元等预先放在DATA数据段中,自编的中断程序kbint检测按键时产生的中断,并把按键的扫描码转换为ASCII

2、码存入缓存区buffer,这个工作和ROM09类型的键盘中断例行程序所完成的工作大致相同,只是在解释各个键时作了简化,即只解释了可显示字符,如英文字母、数字及一些符号;其他特殊键,如组合键、双态键、功能键等都未作解释,只作为字符码0来处理。在主程序部分保存原09类型的中断向量,设置自编例行程序的中断向量,设置中断屏蔽位,然后开中断。当键盘中断处理后,主程序中安排指令读取缓冲区中的字符并显示在屏幕上。在主程序的末尾,利用DOS功能恢复原09类型的中断向量,然后返回DOS。在显示键入的字符时,还应判断字符是否为回车(0DH)。如为回车符,说明一个句子输入完毕,此时调用显示时间的子程序显示出打字时间

3、,然后顺序显示下一个例句。如果所存放的例句都已显示完,则又从第一个例句开始显示,直至键入某一功能键(如Esc键、Shift键等)退出程序,结束打字练习。打字时间统计利用自定时器中断处理程序clint来完成。每输完一例句,计时一次。在此中断例行程序中,定时器中断的次数记录在计数单元count中,当count计数值为18时,sec计数单元加1 ,当sec计数值达到60时,min计数单元加1 。因为输入完一个句子无论如何也不会达到小时级,所以对hours计数值的调整判断,实际上只起到退出定时器中断的作用。显示时间的子程序disptime分别将各遍野单元的二进制数转换为十进制数,并以min:sec:m

4、sec的形式显示出来。其中msec是由count记数值转换成的:count1秒/18.2count55ms2.2程序流程图保存原中断09H到自设的单元中设置自编处理程序的中断向量09H保存原中断向量1CH到自设的单元中设置自编处理程序的中断向量1CH设置允许键盘和定时器中断设置显示方式为8025显示提示信息在屏幕上显示例句初始化变量count、sec、min、hours开中断Call kbgetKbflag=80h?(键盘输入的是控制键或功能键吗)开始Call dispchar显示该字符Call dispcharCall disptime显示回车换行符检测并等待键盘中断的子程序显示打字时间显示

5、回车换行符字符5个例句都练习完了吗?恢复原中断向量1CH、09H,返回操作系统Y输入的字符为回车符0DH?AL换行符(0AH)NNNY3代码设计3.1功能模块说明3.1.1定义数据段,设置主要参数:缓冲区:BUFFER, BUFPT1 ,BUFPT2 3.1.2代码段调用中断8259,键盘中断,时钟中断,设置打字计时文件程序顺序3.1.3使用子程序分化各子功能DISPTIME PROC NEAR BINDEC PROC NEAR ;将二进制转化为十进制显示时间 DECDIV PROC NEAR ;转化成字符显示DISPCHAR PROC NEAR KBGET PROC NEAR ;获取键盘键入

6、的信息KBINT PROC NEAR ;查表查到相应的字符RESET09 PROC ;重新设置09号中断RESET1C PROC ;重新设置1c功能RESET PROC ;回复1C与093.2源程序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 ;缓冲区1BUFPT2 DW 0 ;缓冲区2KBFLAG DB 0 ;参数,80H表示允许,00表示不允许PROMPT D

7、B *PLEASE PRACTISE TYPING*,0DH,0AH,$ ;定义提示语句SCANTAB DB 0,0,-=,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

8、DB ABCD EFGH IJKL MNOP QRST UVWX YZ. ;句子1DB 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. CRLF DB 0DH,0AH,$ COLON DB :,$ EV

9、EN 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,

10、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 21H MOV OLDCS9,ES MOV OLDIP9,BX ;*设置自编处理程序的中断向量*PUSH DS MOV DX,SEG KBINT ;自编中断类型程序段地址放入DSMOV DS,DX MOV DX,OFFSET KBINT ;自编中断类型程序偏移地址放入DXMOV AL,09H MOV AH,25H ;设置中断向量功

11、能调用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,B OUT 21H,AL ;*设置显示方式*FIRST: MOV AH,0 MOV AL,3 INT

12、 10H ;*显示提示信息*MOV DX,OFFSET PROMPT ;显示提示信息MOV AH,9 INT 21H ;*在屏幕上显示例句*MOV SI,0 NEXT: MOV DX,SADDRSI ;显示例句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

13、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+2 MOV DS,AX MOV AL,1CH ;恢复中断向量1CHMOV AH,25H INT 21H POP DS PUSH DS MOV DX,OLDIP9 MOV AX,OLDCS9 MOV DS,AX MOV AL,09H M

14、OV 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 PTRBX CMP WORD PTRBX,18 ;初始化记数JNE RETURN CALL INCT ADJ: CMP HOURS,12 ;是否满12小时JLE RETURN SUB HOURS,12 ;满足减去12RETURN: POP DS STI IRET CLINT ENDP INCT PROC NEAR MOV WORD PTRBX,0 AD

15、D BX,2 INC WORD PTRBX ;BX内容自增1CMP WORD PTRBX,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 ;秒移动到AXCALL BINDEC MOV BX,0 MOV AL,: MOV AH,0EH INT 10H MOV BX,COUNT MOV AL,55D

16、 ;百分秒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 ENDP DECDIV PROC NEAR ;转化成字符显示MOV DX,0 DIV CX MOV BX,0 ADD AL,30H ;转换成ASCIIMOV AH,0EH INT 10H ;显示一个字符MOV AX,DX RET DECDIV ENDP *获取键盘键

17、入的信息*KBGET PROC NEAR PUSH BX CLI MOV BX,BUFPT1 ;标志缓冲区的大小CMP BX,BUFPT2 JNZ KBGET2 CMP KBFLAG,0 ;!=00H的时候,一直获取键盘JNZ KBGET3 STI POP BX JMP KBGET KBGET2: MOV AL,BUFFER+BX INC BX CMP BX,16H JC KBGET3 MOV BX,0 KBGET3: MOV BUFPT1,BX POP BX RET KBGET ENDP ;*键盘中断处理程序*KBINT PROC NEAR PUSH BX PUSH AX IN AL,60H

18、 ;键盘输入寄存器端口地址PUSH AX IN AL,61H ;控制商品寄存器地址OR AL,80H OUT 61H,AL ;读数据AND AL,7FH ;第八位清0,ASCII只有7位OUT 61H,AL POP AX TEST AL,80H JNZ KBINT2 MOV BX,OFFSET SCANTAB ;查表输出字符XLAT SCANTAB ;查表CMP AL,0 JNZ KBINT4 MOV KBFLAG,80H JMP KBINT2 KBINT4: MOV BX,BUFPT2 MOV BUFFER+BX,AL INC BX CMP BX,16H JC KBINT3 MOV BX,0

19、 KBINT3: CMP BX,BUFPT1 JZ KBINT2 MOV BUFPT2,BX KBINT2: CLI MOV AL,20H OUT 20H,AL ;送H端口POP AX POP BX STI IRET KBINT ENDP DISPCHAR PROC NEAR ;显示字符PUSH BX MOV BX,0 MOV AH,0EH ;显示一个字符在AL里INT 10H ;显示一个字条符POP BX RET DISPCHAR ENDP CODE ENDS END START 4调试与运行4.1实验步骤:1) 打开windows命令窗口2) 进入masm程序的安装目录,汇编源文件,如图:图4.1.2 汇编程序3) 连接程序,并查看生成可执行文件weijia.exe。图4.1.3 查看生成可执行文件4) 关闭对话框,打开可执行文件

温馨提示

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

评论

0/150

提交评论