1、1 打字计时练习 1 设计目的 通过课程设计,主要达到以下目的: 1.使学生增进对汇编语言的认识,加强用汇编语言编程的能力。 2.使学生掌握汇编语言的中断调用功能的应用,可以用汇编语言调用各种中断 调用功能,并由此实现对硬件的控制等。 3.使学生了解和掌握汇编语言程序设计过程、方法及实现, 巩固微机原理课程上 学到的知识。 4.通过课程设计可以使我们更加了解书上的知识,了解书上的语句并且能够应用 自己的程序中. 5.进一步掌握屏幕输出显示的设计方法. 2 设计思想 题目的要求是通过系统时钟得到输入 30 个字符所需的时间间隔,并在屏幕 上显示输入字符和时间间隔。用汇编语言实现打字程序的思想,首
2、先用指针保存 30 个测试用的字符,接着用 DOS 的 21H 中断类型的 09H 功能显示字符串来显示 主界面;调用 DOS 的 21H 的 01H 功能,接受从键盘输入的第一个字符字符,然后 调用 DOS 的 21H 的 2cH 功能获取系统时间,将系统时间存入 TIMEBUFF 中。接着 将输入的剩余 29 个字符放在循环中,待输入 30 个字符完毕后再次调用 DOS 的 21H 的 2cH 功能获取系统时间,将此次的时间运算后放入 dx 中,将开始输入的 时间放入 ax 中,将两次的时间差放入 cx 中,其中 ch 放秒钟十位,cl 放个位。 调用比较输入的字符是否正确的函数, 通过
3、DOS 的 21H 的 02H 功能调用显示输入 的字母和其中输错字母的个数,然后显示时间间隔。调用 DOS 的 21H 中断类型的 07H,当接下来输入如果是”q”就退出,是其他字符就清空错误的数目还有 30 个字符的指针,开始新一轮的打字计时。 2 3 软件流程图 否 是 否 是 开始 显示待检测的字符串 接收输入的第一个字符 获取系统时间 继续输入剩余字符 检测输入是否完成 再次获取系统时间 计算两次时间差 比较得到错误输入字符的个数 显示输入字符及错误数和时间间隔 输入是否为 q 结束 3 4 程序 DATA segment TIPdb0DH,0AH,-now begin-,0DH,0
4、AH,$ TIMEBUFF1 db 0 ;保存考试输入时的分钟数 TIMEBUFF2 db 0 ;保存开始输入时的秒 STR1 db abcdefghijklmnopqrstuvwxyzabcd,0DH,0AH,$ ;30 个字符 ERRORFLAG db 0 ;保存 30 个字符的指针 ERROR db 0 ;保存错误的数目 TIMEIS db 0DH,0AH,the time is ,$ ERRORIS db 0DH,0AH,the error is ,$ RESTART db 0DH,0AH,press q to exit or others to restart,$ DATA ends
5、 ACK segment dw 20 dup(0) ACK ends CODE segment assume cs:CODE,ds:DATA,ss:ACK start: mov ax, ACK mov ss, ax mov sp, 40 mov ax, DATA ;屏幕初始显示 mov ds, ax mov dx, offset TIP mov ah, 9 int 21H mov dx, offset STR1 ;显示 30 个字符 mov ah, 9 int 21H mov ah, 1 ;调用 1 号中断接受第一个字符 int 21h call Compare mov ah, 2CH ;调用
6、 2CH 号中断,获取系统时间 int 21H mov TIMEBUFF1, cl ;将系统时间存入 TIMEBUFF 中 mov TIMEBUFF2, dh 4 mov cx, 29 ;剩余的 29 个字符放在循环中 loops:mov ah,1 int 21H call Compare loop loops mov ah, 2CH ;输入完毕,再次获取系统时间 int 21H mov al, cl ;将此次的时间运算后放入 dx 中 mov cl, 60 mul cl mov cl, 8 shr dx, cl add ax, dx mov dx, ax mov al, TIMEBUFF1 ;将开始输入的时间放入 ax 中 mov cl, 60 mul cl xor cx, cx