汇编语言程序设计打字练习程序
第四章 汇编语言程序设计上机练习及简单程序设计
第四章汇编语言程序设计上机练习及简单程序设计一、汇编语言程序上机过程1、掌握常用工具软件 PE,MASM和LINK的使用。
2、伪指令: SEGMENT,ENDS,ASSUME,END,OFFSET,DUP。
3、利用的 1号功能实现键盘输入的方法。
4、了解.EXE文件和.COM文件的区别及用INT 21H 、INT 4CH号功能返回系统的方法。
程序:data segmentmessage db 'This is a sample program of keyboard and disply'db 0dh,0ah,'Please strike the key!',0dh,0ah,'$' data endsstack segment para stack 'stack'db 50 dup(?)stack endscode segmentassume cs:code,ds:data,ss:stackstart: mov ax,datamov ds,axmov dx,offset messagemov ah,9int 21hagain: mov ah,1int 21hcmp al,1bhje exitcmp al,61hjc ndcmp al,7ahja ndand al,11011111bnd: mov dl,almov ah,2int 21hjmp againexit: mov ah,4chint 21hcode endsend start实验步骤:1、用用文字编辑工具(记事本或EDITPLUS)将源程序输入,其扩展名为.ASM。
2、用MASM对源文件进行汇编,产生.OBJ文件和.LST文件。
若汇编时提示有错,用文字编辑工具修改源程序后重新汇编,直至通过。
3、用LINK将.OBJ文件连接成可执行的.EXE文件。
4、在DOS状态下运行LINK产生的.EXE文件。
汇编语言课程设计报告打字练习程序
提供全套毕业设计,欢迎咨询汇编语言课程设计报告程序题目:打字练习程序学生姓名:XX班级:2010级计算机科学与技术专业4班学号:XXX院系:计算机科学学院指导教师:XXX—I—目录1设计目的 (3)2概要设计 (3)2.1 系统总体分析 (3)2.2主模块框图及说明 (4)3 详细设计 (5)3.1 主模块及子模块说明 (5)3.2 各模块详细设计 (5)3.2.1主界面模块 (5)3.2.2随机字母产生模块 (7)3.2.3字母落下模块 (9)3.2.4暂停模块 (10)4.程序调试 (11)4.1运行界面分析 (11)4.2调试过程及分析 (13)5心得体会 (13)5.1 设计体会 (13)5.2 系统改进 (13)参考文献 (14)附:程序源代码 (14)陕西师范大学汇编语言课程设计实验报告1设计目的本程序运行后,出现主界面,按回车键出现由26个字母组成的乱序行,这时其中任一字母落下,在键盘上敲入该字母,如果输入正确,字母消失;按回车键进入打字练习;按ESC键返回主界面;按空格键暂停;按‘E’退出。
通过课程设计,主要达到以下目的:1. 增进对汇编语言的认识,加强用汇编语言编程的能力;2. 掌握汇编语言的中断调用功能的应用,可以用汇编语言调用各种中断调用功能,并由此实现对硬件的控制等;3. 了解和掌握汇编语言程序设计过程、方法及实现,为以后微机原理课程的学习打下良好基础;4. 通过课程设计可以使我们更加了解书上的知识,了解书上的语句并且能够应用自己的程序中;5. 掌握屏幕输出显示的设计方法。
2概要设计2.1 系统总体分析根据题目要求可以看到有以下几部分来实现打字练习:1.由26字母乱序组成一行显示行。
2.字母自动落下。
3.从键盘输入的字母与落下字母相同则该字母消失,并且下一个字母自动接着落下。
4.按下“Ese”键则程序返回到主界面。
5.按空格键游戏暂停。
6.在主界面按“E”则程序退出。
打字练习的主要功能由以上六部分组成,每一部分之间的联系都是比较紧密的。
打字练习程序
信息科学与技术学院微机原理与接口技术课程设计课题名称:打字练习程序学生姓名:学号:专业、年级:指导教师:时间:1、题目及要求:1.1、题目:打字练习程序1.2、要求:1)、缓冲区中预放了一些字母2)、运行时,可按照屏幕上显示的字母输入练习3)、当按结束,可显示出练习输入的时间,并且能显示出正确率。
4)、要求界面美观。
2、功能设计:2.1、功能模块:主程序模块-----主要是随机产生字符并将字符送入缓冲区,调用其他子程序和宏设置窗口及时间、字符总数和正确个数。
打字结果计算与显示模块( UseTimeAndOut,RightRata_out)-----主要计算所用时间及正确率并输出。
设置字符颜色模块(clew_char)-----主要设置打字时缓冲区字符和打字区字符的颜色,包括错误时字符的颜色显示。
字符满行处理模块(isFullLine)-----主要功能是当字符输入满行时进行换行。
输出模块(OutTime,btod_out)-----输出程序运行时的时间。
统计模块(Tongji)-----统计字符个数和正确个数并记录时间。
宏的作用:清屏(Clear)----- 用于按要求清理屏幕(不同颜色),以便产生想要的窗口。
设置光标位置(SETGB)-----用于移动光标位置,以便按要求输出。
读光标位置(READGB)-----用于读取当前光标位置。
提示(Tishi)-----用于输出提示语句。
2.2、功能图:图1 功能图3、详细设计:3.1、设计方法:根据设计要求,该课程设计只应用了些简单的函数调用,中断,宏调用。
其中随机产生字符的实现是通过调用中断(ah=2ch,int 10)取系统时间的1/100 来得到一组随机数,把这些随机数当做指针,然后取指针对应的字符表中相应的字符,得到一串字符。
在把结果显示到屏幕上时将数据拆分后输出到屏幕上。
如‘123’在屏幕上显示时必须一个一个输出,还有在输出小数点时也采取了相应的办法。
汇编语言打字练习程序实验报告
课程设计说明书题目: 打字练习摘要在IBM-PC系统中,驻留的ROM中有8KB的BIOS。
它实现对系统中种种常用设备的输入输出操作的管理。
其中的16H中断调用即为键盘输入输出中断调用,实现从键盘输入字符到AL寄存器、读键盘缓冲区字符到AL寄存器、读取特殊功能键的状态等功能。
本程序是一个在键盘上打字练习的程序,运行可执行程序后,出现主界面,按回车键出现由78个字母组成的乱序行,这时其中任一字母落下,在键盘上敲入该字母,如果输入正确,字母消失;按回车键进入打字练习;按ESC 健返回主界面;按空格键暂停;按’E’退出。
关键词:中断调用,打字练习,回车键进入,空格键暂停目录1设计目的 (1)2概要设计 (2)2.1 系统总体分析 (2)2.2 主模块框图及说明 (2)3详细设计 (4)3.1 主模块及子模块说明 (4)3.2 各模块详细设计 (4)4程序调试 (10)4.1 运行界面分析 (10)4.2 调试过程及分析 (12)5心得体会 (13)5.1 设计体会 (13)5.2 系统改进 (13)参考文献 (14)1设计目的汇编语言是计算机能够提供给用户使用的最快而又最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。
由于汇编语言如此的接近计算机硬件,因此,它可以最大限度地发挥计算机硬件的性能。
由此可见汇编语言的重要性,学好这门课程,同样可为相关的专业打下基础。
汇编语言程序设计课程设计是在教学实践基础上进行的一次试验,也是对该课程所学理论知识的深化和提高。
因此,要求学生能综合应用所学知识,设计和制造出具有具有一定功能的应用系统,并且在实验的基本技能方面进行了一次全面的训练。
此外,它还可以培养学生综合运用所学知识独立完成汇编程序课题的能力,使学生能够较全面的巩固和应用课堂上所学的基本理论和程序设计方法,能够较熟练地完成汇编语言程序的设计和调试。
再者,它同样可以提高学生运用理论去处理实际问题的能力和独立思考的能力,使学生的编程思想和编程能力有所提高,最终达到熟练地掌握编写汇编源程序的基本方法的目的。
汇编语言打字练习程序课程设计报告
课程设计说明书题目: 打字练习院系:专业班级:学号:学生姓名:指导教师:2010 年 12 月 31 日安徽理工大学课程设计(论文)任务书计算机科学与工程学院硬件教研室ﻩ2010年12月17日安徽理工大学课程设计(论文)成绩评定表摘要汇编语言是计算机能够给用户使用的最高效快捷的语言,也是唯一能对计算机所有硬件进行操纵的语言。
鉴于汇编语言的用途广泛以及重要性,我花费的大量的时间完成此次课程时机,打字练习。
打字练习是计算机常用的小应用程序,可以给想练习打字的人提供一个好的练习空间。
本文的核心部分是对于详细设计的讲解与分析,而这当中的侧重点又在于设计思想的再现。
关键词:功能模块,核心代码,随机字符,模块调用,功能分析目录1设计目的ﻩ错误!未定义书签。
2概要设计 .......................................................................... 错误!未定义书签。
2.1系统总体分析 ...................................................................................................... 错误!未定义书签。
2.2主模块框图及说明ﻩ错误!未定义书签。
3 详细设计 ......................................................................... 错误!未定义书签。
3.1主模块及子模块说明 ........................................................................................ 错误!未定义书签。
3.2各模块详细设计ﻩ错误!未定义书签。
3.2.1主界面模块.................................................................................................. 错误!未定义书签。
汇编语言课程设计打字计时练习【范本模板】
学生课程设计(论文)题目:打字计时练习学生姓名:学号:所在院(系):计算机学院专业:信息与计算科学班级: 06级2班指导教师:职称:2008年12 月26 日攀枝花学院教务处制攀枝花学院本科学生课程设计任务书注:任务书由指导教师填写。
课程设计(论文)指导教师成绩评定表摘要在IBM—PC系统中,驻留的ROM中有8KB的BIOS。
它实现对系统中种种常用设备的输入输出操作的管理。
其中的16H中断调用即为键盘输入输出中断调用,实现从键盘输入字符到AL寄存器、读键盘缓冲区字符到AL寄存器、读取特殊功能键的状态等功能。
本程序是一个在键盘上练习打字并能统计时间的程序,在缓冲区中预放了一些字母,运行时,可按照屏幕上显示的字母输入练习,每输入完一行按回车键后,可显示出练习输入的时间.通过它练习英文打字练习,并能够统计时间。
程序运行时,使用自编的中断向量处理程序.程序退出时,恢复中断向量。
关键词打字计时,寄存器,缓冲区,中断向量1、课程设计题目描述和要求1.1 问题提出及功能要求设计一个在键盘上练习打字并能统计时间的程序。
通过它练习英文打字练习,并能够统计时间。
屏幕上显示出提示信息和练习例句,按照例句从键盘上输入字母即可,每输入完一行后按回车键,可显示出练习输入的时间和下一行例句.按Esc 键可退出程序.1。
2 运行环境Windows XP/98/2000操作系统、文本编辑器使用EDIT或NOTEPAD,汇编程序使用MASM。
EXE,连接程序使用LINK.EXE,调试程序使用DEBUG。
EXE。
1。
3 本课题涉及的知识点定义数据段,设置主要参数:设置9号中断向量地址,9号中断向量首址,1C 向量地址;定义时间参数为秒、分、小时。
在代码段,调用中断8259、键盘中断、时钟中断、并设置打字计时文件程序顺序。
整个程序使用序分化各子功能.2、算法设计2。
1设计思路在键盘上练习的打字例句及其地址表、计时单元等预先放在DATA数据段中,自编的中断程序kbint检测按键时产生的中断,并把按键的扫描码转换为ASCII 码存入缓存区buffer,这个工作和ROM09类型的键盘中断例行程序所完成的工作大致相同,只是在解释各个键时作了简化,即只解释了可显示字符,如英文字母、数字及一些符号;其他特殊键,如组合键、双态键、功能键等都未作解释,只作为字符码0来处理.在主程序部分保存原09类型的中断向量,设置自编例行程序的中断向量,设置中断屏蔽位,然后开中断。
汇编语言源程序,实现10个有符号字型整数键盘输入,然后按反序输出所输入的10个有符
汇编语言源程序,实现10个有符号字型整数键盘输入,然后按反序输出所输入的10个有符号字型整数。
引言:汇编语言是一种低级机器语言,用于编写计算机程序。
它直接操作计算机硬件,具有高效性和灵活性。
本文将介绍如何使用汇编语言编写一个程序,实现键盘输入10个有符号整数,并按反序输出这些整数。
正文:1. 输入模块1.1 初始化键盘输入在汇编语言中,我们可以使用BIOS中断来初始化键盘输入。
通过调用INT 16h中断,我们可以设置键盘输入的模式和功能。
在本例中,我们将设置键盘输入模式为扫描码模式,并启用键盘中断。
1.2 读取键盘输入使用INT 16h中断的另一个功能来读取键盘输入。
通过调用INT 16h中断的功能号为0h的子功能,我们可以从键盘缓冲区中读取一个字符。
我们可以使用循环来读取10个字符,并将它们存储在内存中的一个数组中。
1.3 转换字符为整数由于键盘输入的字符是ASCII码,我们需要将它们转换为整数。
在汇编语言中,可以使用SUB指令将字符的ASCII码值减去字符'0'的ASCII码值,从而得到整数值。
2. 反序输出模块2.1 初始化输出与键盘输入类似,我们可以使用BIOS中断来初始化屏幕输出。
通过调用INT 10h中断,我们可以设置屏幕输出的模式和功能。
在本例中,我们将设置屏幕输出模式为文本模式,并清空屏幕。
2.2 输出整数我们可以使用INT 10h中断的功能号为0Eh的子功能来在屏幕上输出字符。
通过循环,我们可以从存储整数的数组中读取整数,并将其转换为字符后输出。
2.3 反序输出为了按反序输出整数,我们可以使用两个指针,一个指向数组的开头,另一个指向数组的末尾。
通过交换两个指针所指向的元素,我们可以实现反序输出。
总结:通过使用汇编语言编写的程序,我们可以实现键盘输入10个有符号整数,并按反序输出这些整数。
通过初始化键盘输入和屏幕输出,以及使用循环和指针操作,我们可以实现这个功能。
打字练习汇编语言程序程序设计
目录1 方案论证 (1)1.1题目要求 (1)1.2算法说明 (1)1.2.1输入/输出算法 (1)1.2.2时间计算算法 (2)1.2.3正确率计算算法 (2)2程序流程图 (3)2.1主程序流程图 (3)2.2时间计算流程图 (4)2.3正确率计算流程图 (5)3.设计关键问题 (7)3.1输入输出 (7)3.1.1 输出显示信息 (7)3.1.2 输入十个字符 (8)3.2 输入字符串所用时间计算 (9)3.3 正确率判断 (10)4.调试运行结果分析 (12)心得体会 (15)参考文献 (16)附录 (17)打字练习汇编语言程序程序设计1 方案论证1.1题目要求本次《微机原理与接口技术》课程设计的题目是打字练习汇编语言程序设计,要求在屏幕输出提示信息及一串有十个字符的字符串的同时开始记录系统时间,当输入十个字符后,再次记录系统时间,计算输入字符串的时间,及输入字符串的正确率,并将最终结果显示在屏幕上。
只有完全正确才能进入下一字符串的练习,并最后显示赞赏提示信息,否则,继续练习该字符串的输入,知道全部输入正确;一串字符串输入结束后,如果不想继续打字练习,则按‘1’退出打字练习如果想继续进行打字练习,则按任意键进入下一字符串的练习,直到练习完三串字符串,按‘1’退出。
1.2算法说明打字练习汇编语言程序设计的主要算法是进行时间的计算和正确率的判断,并将最后结果显示在屏幕上。
1.2.1输入/输出算法DOS功能调用的过程为:首先,将DOS功能调用号送入寄存器AH中,其次,如果序言按要求给定输入参数(有的不需要输入参数),最后,写入终端指令INT21H。
DOS的输入输出包括单字符输入输出和多字符输入输出。
(1)单字符输入输出算法单字符的输入,是DOS的01H号功能调用,没有输入参数,输出参数是AL=要输入字符的ASCII码。
单字符的输出,是DOS的02H号功能调用,输入参数为DL=要输出的字符的ASCII码,无数除参数。
打字练习程序设计论文
目录一概述 (2)1.背景分析及意义 (2)2. 课程设计的目的 (2)3. 课程设计的要求 (3)4.汇编语言的介绍 (3)二总体方案设计 (5)1. 程序设计的整体设计思路 (5)2. 算法的整体设计思路 (6)3. 程序的主要特点 (6)4. 程序的主要功能 (6)三详细设计 (7)1. 主界面的设计 (7)2. 打字练习程序设计 (8)3.等级界面的设计 (9)4. 帮助界面的设计 (9)5. 生命计数和分数值的设计 (10)6. 清屏子程序设计 (11)四程序的调试与运行结果说明 (12)1.MASM5.0简介 (12)2. 程序的运行结果 (12)五课程设计总结 (16)致谢 (16)参考文献 (18)附录 (19)一概述1.背景分析及意义随着计算机的不断更新发展,计算机在各个领域的应用越来越多,更多的软件开发人员和相关技术人员在程序设计的过程中应用汇编程序或编制汇编语言。
而汇编语言作为计算机专业大学生必修课,每个作为本专业的学生对汇编的理解和学习就显得尤为重要。
汇编语言是计算机能够提供用户使用的最快而又最好最有效的与言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。
因而,对程序的空间和时间要求很高的场合,汇编语言的应用就显得必不可少了,一些直接控制硬件的应用场合,则更是非用汇编语言不可了。
《打字练习程序设计》课程设计是在教学实践基础上进行的一次大型实验,也是对该课程所学理论知识的深化和提高。
因此,要求我们能综合应用所学知识,设计与制造出具有较复杂功能的应用系统,并且在实验的基本技能方面上进行一次全面的训练。
通过具体的问题分析、设计、调试、运行程序。
在实际问题中锻炼提高自己,增加了对本门课程内容的理解,锻炼了动手能力。
就这个程序具体而言:调用宏,显示背景和主界面,通过选择不同的选项,可以进入不同的界面;采用BIOS功能的中断,可以在任何时候退出当前所在的界面并通过选择进入其他的界面。
汇编语言程序设计课程设计-打字练习程序的设计
课程设计2013~ 2014学年第二学期设计题目汇编语言程序设计课程设计-打字练习程序的设计院(系)计算机科学与信息工程学院专业网络工程提交日期 2014年7月5日上海应用技术学院课程设计任务书指导教师(签名):教研室主任(签名):杨晶鑫2014年6 月25 日2014年6 月25 日目录上海应用技术学院课程设计任务书..................................................... i错误!未定义书签。
目录.................................................................................................................................... i ii 1概述. (1)1.1基本功能 (1)1.2拓展功能 (1)1.3代码的格式 (1)2详细设计说明 (4)2.1原“TYPETEST.ASM”程序结构 (4)2.2已经实现的功能(修改的、新编写的)程序结构 (5)2.3各模块功能 (7)2.3.1用户验证模块: (7)2.3.2功能选择模块: (9)2.3.3游戏选择模式: (12)2.3.4游戏模块: (15)2.3.5游戏结束模式: (22)2.3.6退回主菜单: (23)3课程设计总结 (25)3.1设计体会 (25)3.2系统改进 (25)4软件使用说明 (26)4.1用户密码: (26)4.2运行环境: (26)4.3使用方法 (26)参考文献 (34)附录 (35)源代码: (35)1 概述本次课程设计主要是设计一个打字游戏,通过对一个较大型的、综合性的应用程序进行阅读、修改、添加功能等工作, 加深对汇编语言程序设计的认识,提高阅读理解复杂程序的能力和程序设计能力。
本程序运行后,出现主界面,按回车键出现由26个字母组成的乱序行,这时其中任一字母落下,在键盘上敲入该字母,如果输入正确,字母消失;按回车键进入打字练习;按ESC键返回主界面;按空格键暂停;按‘E’退出;程序包括自动计分功能,根据打字的快慢分别获得不同的分数,根据打字的难度,分别变化不同的颜色,并且设置了用户名和密码,使软件运行起来更加安全。
打字练习计时程序设计说明书
学号:课程设计题目打字练习计时程序设计学院专业班级姓名指导教师2014 年月日课程设计任务书学生姓名:专业班级:指导教师:工作单位:题目: 打字计时练习程序设计要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.用汇编语言编写一个打字计时练习的程序,在缓冲区中预放一些字母,运行时,可按照屏幕上显示的字母输入练习。
2.按某个键开始练习,每输入完一行按回车键后,可显示出练习的时间及正确率。
3.撰写课程设计说明书。
内容包括:摘要、目录、正文、参考文献、附录(程序清单)。
正文部分包括:设计任务及要求、方案比较及论证、软件设计说明(软件思想,流程,源程序设计及说明等)、程序调试说明和结果分析、课程设计收获及心得体会。
时间安排:12月30日-----12月31日查阅资料及方案设计1月2日-----1月3日编程1月6日调试程序1月7日-----1月8日撰写课程设计报告指导教师签名:年月日系主任(或责任教师)签名:年月日目录摘要 (1)1.设计要求 (2)1.1设计任务 (2)1.2设计要求 (2)1.3设计目的 (2)2.算法设计 (3)2.1设计思路 (3)2.2程序流程图 (3)3设计说明 (5)3.1BIOS中断 (5)3.1.1显示输出管理 (5)3.2DOS中断 (6)3.2.1DOS中断 (6)3.2.2 DOS中断和BIOS中断使用方法 (6)4.程序说明 (8)4.1计算正确率子程序 (8)4.2键盘获取子程序 (9)5.调试与运行 (11)5.1运行程序: (11)5.2调试中出现的问题 (12)6.总结 (13)参考文献 (14)附录 (15)摘要计算机的不断更新发展,在各个领域的应用越来越多。
而汇编语言是计算机能够提供用户使用的最快而又最好最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。
因而,对程序的空间和时间要求很高的场合,汇编语言的应用就显得必不可少了,一些直接控制硬件的应用场合,则更是非用汇编语言不可。
汇编语言上机实训
===========================================================4月28日1、从键盘输入一个数n ( 1<=n<=9 ),然后屏幕上显示连续的n个“+”号。
例如,当键盘输入的是5时,屏幕上显示+++++2、从键盘输入一个字母,然后程序使得屏幕再出现该字母之后的5个后继字母。
例如:键盘输入的是m,则屏幕上除了m外,还出现nopqr。
===========================================================5月5日1、编程:在屏幕上显示如下字符:1234567123456712345672、[选做] 一个2位数( 11-99 ),个位数与十位数之和为12,求所有符合要求的数。
并显示出来,格式如下:3948.... (省略掉若干行)93提示:用两重循环来做,循环体中判断个位数与十位数是否满足条件,如果满足,则显示出来,并换一行。
===========================================================5月12日1、一个2位数( 11-99 ),个位数的2倍与十位数之和为15,求所有符合要求的数的个数并在屏幕上显示出个数。
提示:共有17,36,55,74,93等5个值。
2、[选做] 键盘输入两个小写的英文字母,编程实现在其下一行显示出这两个字母之间的所有字母。
(要考虑输入的时候,字母的大小关系)。
例1:bg (这是键盘输入的)cdef (这是软件显示的)例2:kh (这是键盘输入的)ij (这是软件显示的)===========================================================5月19-21日1、键盘输入有序的两个小写的英文字母(即第1个字母比第2个字母的ASCII值小),编程实现在其下一行显示出这两个字母之间的所有字母。
用汇编编写的指法打字练习软件TT
Init_boarder macro row,col,char,dhdl,countLocal l1mov cx,countmov dh,rowmov dl,coll1:mov ah,02hmov bh,00hint 10hpush cxmov ah,0ahmov al,charmov bh,00hmov cx,01hint 10hpop cxinc dhdlloop l1endmclear_screen macro top,left,bottom,right,col;清屏宏定义 mov ah,06hmov al,00hmov bh,colmov ch,topmov cl,leftmov dh,bottommov dl,rightint 10hendmsetcusor macro page,row,column;设置光标位置mov ah,02hmov bh,pagemov dl,columnmov dh,rowint 10hendmmenu macro row,col,text;菜单显示宏定义mov ah,02hmov bh,00hmov dh,rowmov dl,colint 10hmov cx,0mov ah,09hlea dx,textint 21hendmdata segment; add your data here!;pkey db "press any key...$"kaishi db " welcome to play the game! $"mes0 db " =========================================$"mes1 db " 1.start game $"mes2 db " 2.select $"mes3 db " 3.exit $"mes4 db " =========================================$"mes5 db " select num of menu:$"mes12 db " =========================================$"mes13 db " 1.100 letters $"mes14 db " 2.200 letters $"mes15 db " 3.300 letters $"mes17 db " =========================================$"mes18 db "Correct Rate:$"mes7 db " press any key to start the game... $"mes8 db " press esc key return main menu $"mes10 db " Select The Letter's Num $"mes19 db " wait... $"mes11 db " when the game was over,press enter to restart$"mes9 db "Used Time:$"mes6 db "The correct number:$"col db 00h,24h,0fdh,0dh;颜色num dw ? ;以输入字母的个数numb dw ? ;输入正确字母的个数score dw ? ;每轮游戏的分数grade dw ?sum dw ?n db 26letters db 500 dup(0)hour db 0minu db 0seco db 0endsstack segmentdw 128 dup(0)endscode segmentstart:; set segment registers:mov ax, datamov ds, axmov es, ax; add your code here;clear_screen 0d,0d,24d,79d,07hFrame1:clear_screen 0d,0d,24d,79d,1eh ;清屏Init_boarder 0d,0d,'*',dl,80d ;显示边框上一排星号Init_boarder 24d,0d,'*',dl,80d ;显示边框下一排星号 Init_boarder 0d,0d,'*',dh,25d ;显示边框左一排星号 Init_boarder 0d,79d,'*',dh,25d ;显示边框右一排星号 menu 5d,20d,mes0menu 6d,26d,kaishi ;显示菜单menu 8d,30d,mes1menu 10d,30d,mes2menu 12d,30d,mes3menu 13d,20d,mes4menu 14d,20d,mes5inputMenuNum:mov ah,7 ;输入功能号,无回显int 21hcmp al,'1'je call num1cmp al,'2'je call num2cmp al,'3'je end1jmp inputMenuNum ;输入不符要求重输Frame2 procmov dl,al ;将选择的功能号显示出来mov ah,2int 21hclear_screen 1d,1d,23d,78d,1eh ;清屏,边框还存在menu 9d,20d,mes7menu 11d,20d,mes8; menu 12d,30d,mes10menu 13d,20d,mes11mov cx,2000h ;隐藏光标mov ah,01h ;设置光标大小int 10hmov ah,7 ;无回显输入字符int 21hmov cx,1010h ;显示光标mov ah,01hint 10hretFrame2 endpnum1 procmov dl,al ;将选择的功能号显示出来mov ah,2int 21hclear_screen 1d,1d,23d,78d,1eh;清屏,但边框存在menu 9d,20d,mes7menu 11d,20d,mes8;menu 12d,30d,mes10menu 13d,20d,mes11mov cx,2000h ;隐藏光标mov ah,01hint 10hmov ah,7 ;无回显输入字符int 21hmov cx,1010h ;显示光标mov ah,01hint 10hmov num,100call playretnum1 endpnum2 procmov dl,al ;将选择的功能号显示出来 mov ah,2int 21hclear_screen 1d,1d,23d,78d,1eh;清屏 menu 7d,20d,mes10menu 8d,20d,mes12menu 10d,20d,mes13menu 11d,20d,mes14menu 12d,20d,mes15menu 14d,20d,mes17menu 15d,20d,mes5inputMenuNum1:mov ah,07hint 21hcmp al,'1'jz m1cmp al,'2'jz m2cmp al,'3'jz m3cmp al,27 ;当输入esc键时退到主菜单 jz Frame1jmp inputMenuNum1m1:call Frame2mov num,100 ;设置字符串个数为100call playjmp m4m2:call Frame2mov num,200call playjmp m4m3:call Frame2mov num,300call playjmp m4m4: retnum2 endpplay procmov numb,0 ;正确字符个数clear_screen 02d,02d,23,78,1eh ;清屏(边框还存在) lea si,lettersmov bx,0call getletter ;调用生成字符串子程序menu 20d,15d,mes19setcusor 0d,3d,10d ;设置光标位置clear_screen 02d,02d,23,78,1eh ;清屏(边框还存在) call outlettersetcusor 0d,4d,10d ;设置光标位置mov ah,2ch ;获取当前时间int 21hmov hour,ch ;获取的小时放入hour中mov minu,cl ;获取的分钟放入minu中mov seco,dh ;获取的秒钟放入seco中call inputlettermenu 20d,5d,mes9call counttimecall outtimemenu 20d,25d,mes6mov ax,numbcall PRINTAXmenu 20d,50d,mes18call CorrectRateinput_quit:mov ah,07hint 21hcmp al,27jz Frame1cmp al,0dhjz call playjmp input_quitretplay endp;*************************************;实现随机产生字符串getletter procoutput_letter:mov ah,2ch ;获取时间 ch为小时,cl为分,dh为秒,dl为1%秒int 21hmov al,dl ;将1%秒放入al中mov ah,0 ;将ah置0,ax当被除数div n ;n为26,将商放到al中,将余数放入ah中mov dl,ah ;将余数放入dl中add dl,61h ;a的ascii码为61,将余数加上61得到随机产生字母的ascii码mov [si],dl ;将随机产生的字符放入到letters中inc si ;letters的偏移量加1inc bxcall DELAY ;计数量加1cmp bx,num ;将已产生的字符量与所需产生的字符数比较jnz output_letter ;当小于所需产生的字符数时,跳转至output_lettermov [si],'$' ;字符串结束retgetletter endp;*************************************;实现字符串的换行输出outletter proclea si,letters ;获取letters的首地址again:mov dl,[si] ;将字符串相应偏移地址里的字符放入dl 中mov ah,02h ;显示字符int 21hinc si ;letters偏移地址加1cmp [si],'$' ;判断是否已经到字符串的末尾jz q2 ;当已到达字符串末尾时跳转至q2,反之顺序执行mov ah,03h ;获取光标当前位置 dh=行号,dl=列号 mov bh,0int 10hcmp dl,75d ;判断光标列号是否为75,即已到达改行末尾jz q1 ;当光标列号是为75跳转至q1jmp againq1: add dh,2d ;将当前光标行号加2,实现隔行输出setcusor 0d,dh,10d ;重新设定光标位置jmp againq2: retoutletter endpinputletter proclea si,letters ;获取字符串的首地址mov cx,num ;将字符串的长度放入cx中input:push cx ;将cx压栈mov ah,03h ;获取光标当前位置 dh=行号,dl=列号 mov bh,0 ;页号为0int 10hcmp dl,75d ;将光标当前列号与75作比较jz l5 ;当光标当前列已是75则跳转到l5l6: mov ah,7 ;输入字符无回显,al接收输入字符的ascii 码int 21hcmp al,08h ;判断输入键是否为退格键(退格键ascii 码为08h)je l3 ;当输入退格键跳转至l3,若不是则往下执行cmp al,27 ;判断输入键是否为esc键(esc键ascii 码为27h)je quit ;当输入的是esc键,跳转至qiut,若不是则往下执行cmp al,[si] ;将输入字符与letters里相应字符比较je l1 ;当相等时跳转至l1,反之往下执行jne l2 ;当输入的字符与letters里相应字符不相等,跳转至l2done: mov dl,al ;将输入的字符放入dl中mov ah,2 ;输出字符int 21hinc si ;letters的偏移量加1pop cxdec cxjnz inputjmp l4l1: add numb,1 ;输入的字符正确,记录输入输入正确个数的numb加1mov ah,09H ;在当前光标位置显示字符,不改变光标位置mov bh,0Hmov bl,2fh ;背景颜色为绿色mov cx,1int 10Hjmp donel2:call SOUND ;输入错误mov ah,09H ;在当前光标位置显示字符,不改变光标位置mov bh,0Hmov bl,4fh ;Z表示颜色。
打字练习程序
打字练习程序功能:1) 从磁盘文件中读入一些字母(程序中只载入一屏306个字符)2) 运行时,可按照屏幕显示的字母输入练习(模拟金山打字,这个实现很有挑战性哦,先拷贝过去运行下看看效果哦)3) 输完结束或按ESC结束.结束时可显示出练习输入的时间,并显示出正确率.说明:该程序主要分成(刮弧中为相应主要的函数块)1)打字事例文件加载模块(LoadFile )注:加载文件的时候提供绝地路径,而且文件中字符不宜太少,最好多于306个。
2)打字屏幕提示及打字窗口模块(clew_char,isFullLine )注:这里是算法的集中点,注意提示功能和退格功能的实现,特别注意退格时候对字符统计的影响的处理。
3)打字时间及正误统计模块(TONGJI) 注:这里主要注意的是时间的显示和正确率的计算,试试哦自己独立实现下,很有趣的呢。
4)打字结果计算与显示模块( UseTimeAndOut,RightRata_out) 注:怎么把结果显示在屏幕上的呢,汇编中只能输出字符(串)呀,这里的技巧啊,先想想哦(整数123,虽然是一个数可在屏幕上输出'1''2''3'可不简单呢,还有带小数的(如98.34)怎么输出呀?嘿嘿想想吧,肯定是要转换的,但这算法.....);--------------------------------------------------------------------;------------------------------------------ COLORCHAR MACRO char,colorpush axpush bxpush cxpush dxmov ah,9hmov al,charmov bh,0mov bl,colormov cx,1int 10hmov ah,03hmov bh,0int 10hmov ah,02add dl,1int 10hpop dxpop cxpop bxpop axENDMBACKCHAR MACRO char,colormov ah,02hmov dl,08hint 21hCOLORCHAR char,colorENDMCLEARSCREAM MACRO alz,bhz,chz,clz, dhz,dlzpush axpush bxpush cxpush dxmov al,alzmov bh,bhzmov ch,chzmov cl,clzmov dh,dhzmov dl,dlzmov ah,6hint 10hpop dxpop cxpop bxpop axENDMSETGBTYPE MACRO chz,clzpush axpush bxpush cxpush dxmov ch,chzmov cl,clzmov ah,1int 10hpop dxpop cxpop bxpop axENDMSETGB MACRO bhz,dhz,dlzpush axpush bxpush cxpush axmov bh,bhzmov dh,dhzmov dl,dlzmov ah,2int 10hpop dxpop cxpop bxpop axENDMREADGB MACRO bhzpush axpush bxpush cxpush dxmov bh,bhzmov ah,3int 10hmov gbattr[0],dhmov gbattr[1],dlpop dxpop cxpop bxpop axENDMLINEFULL MACRO lmax,lactpush axpush bxpush cxpush dxmov ax,lactcmp ax,0jz LFEXITmov dx,0cwdmov bx,lmaxdiv bxcmp dx,0jz LNFUjmp LFEXITLNFU: mov FullFlag,1 LFEXIT: pop dxpop cxpop bxpop axENDMTISHI MACRO row,col,addrpush axpush dxSETGB 0,row,colmov ah,09hlea dx,addrint 21hpop dxpop axENDM;------------------------------------------ data segmentaddr db 400 dup('$')addrtp db 400 dup('$')Anumber dw 0Enumber dw 0Rnumber dw 0LineMax dw 0LineAct dw 0FullFlag db 0gbattr db 4 dup(0)oldgba db 4 dup(0)newirupt dw 2 dup(0)oldirupt dw 2 dup(0)count db 0Stime db 3 dup(0)Utime db 3 dup(0)temp db 50 dup(0)tempw dw 50 dup(0)path db 50 dup(0)ts00 db 'Load File$'ts01 db 'Load:$'ts02 db 'OK?$'ts03 db 'Path Error! Press any key to reinput!$'ts1 db 'Stime:$'ts2 db 'Rrate:$'ts3 db 'Total Use-Time:$'ts4 db 'Total Characters:$'ts5 db 'Correct-Reta:$'ts6 db 'Press any key to end!$' data endscode segmentassume ds:data,cs:codestart:mov ax,datamov ds,axmov ah,0hmov al,03h ;80*25/16int 10h;------------------------------------------CLEARSCREAM 0,07H,0,0,24,79CLEARSCREAM 0,5eh,9,14,14,65TISHI 10,35,ts00TISHI 12,25,ts01call LoadFileTISHI 13,45,ts02mov ah,01hint 21h;------------------------------------------CLEARSCREAM 0,07h,0,0,24,79CLEARSCREAM 0,57h,2,10,23,69CLEARSCREAM 0,17H,3,12,22,66CLEARSCREAM 0,70h,4,14,22,6 4CLEARSCREAM 0,70h,4,14,11,64CLEARSCREAM 0,17H,12,14,14, 64CLEARSCREAM 0,70h,13,18,13,35CLEARSCREAM 0,70H,13,43,13,60SETGB 0,4,14SETGBTYPE 0,24mov di,0mov cx,0ffffhAD: mov dl,addr[di]cmp dl,'$'jz A2push dxmov bp,diCALL isFullLinepop dxmov ah,02hint 21hinc diloop ADA2: mov ah,2chint 21hmov Stime[0],chmov Stime[1],clmov Stime[2],dhSETGB 0,15,14CALL TONGJImov cx,0ffffhmov di,0hAS: cmp addr[di],'$'jnz ASnt00jmp AENDASnt00: mov bp,diCALL isFullLinemov bp,diCALL clew_char;================================ ==========;READGB 0reinput:READGB 0mov ah,01int 21hcmp al,27jnz al27ntjmp exit;------------------------------------------ al27nt: cmp al,0dhjnz al0dntSETGB 0,gbattr[0],gbattr[1]jmp reinputal0dnt: cmp al,08jnz ASnextcmp gbattr[1],14jnz ASnz;inc gbattr[1]SETGB 0,gbattr[0],gbattr[1]jmp reinputASnz:mov ah,02hmov dl,' 'int 21hmov ah,02hmov dl,08hint 21hdec di;---------------dec Anumberpush axmov al,addrtp[di]cmp al,addr[di]jnz AS1ntdec RnumberAS1nt: pop axCALL TONGJI;----------------mov bp,diCALL clew_charjmp reinput ;------------------------------------------;================================ ==========ASnext:inc AnumberCALL TONGJImov addrtp[di],alcmp al,addr[di]jnz AERinc RnumberCALL TONGJIA3: inc di;loop ASdec cxcmp cx,0jz AENDjmp ASAEND: jmp exitAER: inc Enumbermov temp[1],alBACKCHAR temp[1],074hjmp A3exit: CLEARSCREAM 0,07,8,16,17,63 CLEARSCREAM 0,57,10,20,15,59TISHI 11,24,ts3call UseTimeAndOutTISHI 12,24,ts4mov bx,Anumbercall btod_outTISHI 13,24,ts5call RightRata_outTISHI 14,30,ts6mov ah,08int 21h;CALL reset_interruptmov ah,4chint 21h;--------------------------------------------------- LoadFile proc nearmov si,0LFROTA: mov ah,01hint 21hcmp al,0dhjz LoadNextcmp al,08hjz LFBKmov path[si],alinc sijmp LFROTAjmp LoadNextLFBK: cmp si,0jnz lfnzREADGB 0inc gbattr[1]SETGB 0,gbattr[0],gbattr[1]jmp LFROTAlfnz: mov path[si],0dec simov ah,02hmov dl,' 'int 21hmov ah,02hmov dl,08hint 21hjmp LFROTALoadNext:mov ah,3dhmov dx,seg pathmov ds,dxmov dx,offset pathmov al,00int 21hjc LoadERROR;bx use to save file code mov bx,axmov si,0mov dx,seg addrmov ds,dxmov dx,offset addrmov cx,1LROT: mov ah,3fhint 21hcmp addr[si],0ahjz LROTcmp addr[si],0dhjz LROTinc dxinc sicmp si,306jb LROTjmp lfretLoadERROR:TISHI 14,20,ts03mov ah,01hint 21hCLEARSCREAM 0,5eh,9,14,14,65TISHI 10,35,ts00TISHI 12,25,ts01mov si,0jmp LFROTAlfret: retLoadFile endp;--------------------------------------------------- RightRata_out proc nearpush axpush bxpush cxpush dxmov ax,Rnumbermov cx,100mul cxdiv Anumbermov bx,axCALL btod_outpush dxmov ah,02hmov dl,'.'int 21hpop dxmov ax,dxmul cxdiv Anumbermov bx,axCALL btod_outmov ah,2hmov dl,'%'int 21hpop dxpop cxpop bxpop axretRightRata_out endp;--------------------------------------------------- UseTimeAndOut proc nearmov ah,2chint 21hsub dh,Stime[2]jns SecUnBlowjz SecUnBlowadd dh,60dec clSecUnBlow:sub cl,Stime[1]jns MinUnBlowjz SecUnBlowadd cl,60dec chMinUnBlow:sub ch,Stime[0]CALL OutTimeretUseTimeAndOut endp;-----------------------------------------------OutTime proc near;ch:cl:dhmov al,chcbwmov bx,axCALL btod_outmov ah,2hmov dl,'-'int 21hmov al,clcbwmov bx,axCALL btod_outmov ah,2hmov dl,'-'int 21hmov al,dhcbwmov bx,axCALL btod_outretOutTime endp;--------------------------------------------------- TONGJI proc nearpush axpush bxpush cxpush dxmov ax,seg addrmov ds,axREADGB 0SETGB 0,13,20CLEARSCREAM 0,70h,13,18,13, 35mov ah,09hlea dx,ts1int 21hmov ah,2chint 21hCALL OutTimeSETGB 0,13,45mov ah,09hlea dx,ts2int 21hmov ax,Rnumbermov bx,axcall btod_outmov ah,2hmov dl,'/'int 21hmov ax,Anumbermov bx,axcall btod_outSETGB 0,gbattr[0],gbattr[1] pop dxpop cxpop bxpop axretTONGJI endp;---------------------------------------------- btod_out proc near ;num store in bx push axpush cxpush dxpush bpmov ax,bxmov si,4rota1: mov bl,10div blmov temp[si],ahand ax,00ffhdec sicmp si,0jnz rota1mov bp,1mov si,1rota2: mov dl,temp[si]add dl,'0'cmp dl,'0'jz btodealmov bp,0btrt1: mov ah,02hint 21hbtrt2: inc sicmp si,4jna rota2cmp bp,1jnz RTmov ah,2hint 21hjmp RTbtodeal: cmp bp,1jz btrt2jmp btrt1RT: pop bppop dxpop cxpop axretbtod_out endp;-------------------------------------------------- isFullLine proc near ;bp is the parament push axpush bxmov ah,gbattr[0]mov al,gbattr[1]mov LineMax,51mov LineAct,bpLINEFULL LineMax,LineActmov bl,FullFlagcmp bl,0jz isfexitREADGB 0add gbattr[0],1sub gbattr[1],51SETGB 0,gbattr[0],gbattr[1]mov FullFlag,0isfexit: mov gbattr[0],ahmov gbattr[1],alpop bxpop axretisFullLine endp;-------------------------------------------------- clew_char proc near ; bp is the parament push axpush bxpush cxpush dxpush siREADGB 0mov dh,gbattr[0]mov dl,gbattr[1]mov oldgba[0],dhmov oldgba[1],dl;4/14,4/64,15/14,15/64mov ax,bpmov bl,51div blmov dh,4mov dl,14add dh,aladd dl,ahmov temp[0],dhmov temp[1],dlSETGB 0,temp[0],temp[1]COLORCHAR addr[bp],5Ehcmp bp,0jz resetgbcmp temp[1],14jz clew2sub temp[1],1clew1: mov bx,bpdec bxSETGB 0,temp[0],temp[1]COLORCHAR addr[bx],07dhjmp resetgbclew2: sub temp[0],1add temp[1],50jmp clew1resetgb:SETGB 0,oldgba[0],oldgba[1]pop sipop dxpop cxpop bxpop axretclew_char endp;-------------------------------------------------- code endsend start。
汇编打字练习
攀枝花学院学生课程设计(论文)题目:打字练习学生姓名学号:所在院(系):计算机学院专业:2009计算机科学与技术班级:第二组指导教师:何老师职称:讲师2010年01月07日攀枝花学院本科学生课程设计任务书摘要微机原理及应用是一门实践性很强的课程;其课程设计目的在于综合运用所学知识,全面掌握微机计算机与DOS方式的工作原理、编程和使用方法;在设计中,通过小组协作提出并论证设计方案,进行软件调试,最后获得正确结果,可以加深和巩固对理论知识的更好掌握,进一步建立计算机应用系统体的概念,初步掌握DOS开发方法,为以后进行实际的软件应用开发奠定良好的基础。
本设计是利用Masm for window集成实验环境来实现得打字练习程序,当前,在计算机和许多手机上流行许多小游戏,小软件,应用都很广泛,比如本次编写的练习打字小程序就很有趣,不仅让我们学习打字,更加重要的是我们在编写的过程中更好的掌握学过的知识,锻炼了我们的编程技能。
通过运用汇编语言中有的循环,子程序调用等来完成程序的编写,并且通过对程序的调试,逐步的掌握汇编语言的功能,在自己不足的方面进行改正,进一步的巩固所学的知识,熟练应用汇编语言进行一些程序的制作,进一步培养了对编程的兴趣关键词课程设计,软件调试,打字练习,编程1 设计内容简介1.1 设计任务设计主菜单:按回车键进入打字练习;按ESC键进入延缓界面;按空格键暂停;按大写字母“E”程序结束。
将两位十进制数从屏幕上方落下,用户要在这个过程中键入落下的字母,在下落的过程中键入落下的数字,如果正确,数字消失;键入不正确,数字继续下落。
若键入正确,则得分,没有键入正确,不扣分。
在打字的过程中,每下落十个数记一次总成绩。
1.2 设计思想用汇编语言实现打字程序的思想,首先用BIOS的10H中断类型的02H功能置光标位置,接着用DOS的21H中断类型的09H功能显示字符串来显示主界面;调用DOS的21H的08H功能,接受从键盘输入的字符到AL寄存器,判断AL如果为回车以默认速度开始游戏,如为S键则进入速度选择界面,如为E键则退出程序;进入速度选择界面后,调用DOS的21H的08H功能,选择速度后进入游戏;进入游戏后,随机落下一字母,通过21H的06H功能调用,接受从键盘输入的字符到AL 寄存器,如键入ESC进入成绩界面,如键入空格则暂停游戏,如没有得到输入或输入错误则继续下落,输入正确则字母消失,并通过21H的02H功能调用发生响铃;接着继续下落其他字母,如果落下的字母数大于78个则退出游戏进入成绩界面。
最新汇编语言打字练习程序课程设计报告
课程设计说明书题目: 打字练习院系:专业班级:学号:学生姓名:指导教师:2010 年 12 月 31 日安徽理工大学课程设计(论文)任务书计算机科学与工程学院硬件教研室2010年12月17 日安徽理工大学课程设计(论文)成绩评定表摘要汇编语言是计算机能够给用户使用的最高效快捷的语言,也是唯一能对计算机所有硬件进行操纵的语言。
鉴于汇编语言的用途广泛以及重要性,我花费的大量的时间完成此次课程时机,打字练习。
打字练习是计算机常用的小应用程序,可以给想练习打字的人提供一个好的练习空间。
本文的核心部分是对于详细设计的讲解与分析,而这当中的侧重点又在于设计思想的再现。
关键词:功能模块,核心代码,随机字符,模块调用,功能分析目录1设计目的 (1)2概要设计 (2)2.1系统总体分析 (2)2.2主模块框图及说明 (2)3 详细设计 (4)3.1主模块及子模块说明 (4)3.2各模块详细设计 (4)3.2.1主界面模块 (4)3.2.2随机字母产生模块 (6)3.2.3字母落下模块 (7)3.2.4暂停模块 (8)3.2.5返回主界面模块 (9)4.程序调试 (9)4.1运行界面分析 (10)4.2调试过程及分析 (11)5心得体会 (12)5.1设计体会 (12)5.2系统改进 (12)参考文献 (13)1设计目的这次课设的任务是写一个程序,运行可执行程序后,出现主界面,按回车键出现由26个字母组成的乱序行,这时其中任一字母落下,在键盘上敲入该字母,如果输入正确,字母消失;按回车键进入打字练习;按ESC键返回主界面;按空格键暂停;按‘E’退出。
通过课程设计,主要达到以下目的:1. 增进对汇编语言的认识,加强用汇编语言编程的能力;2. 掌握汇编语言的中断调用功能的应用,可以用汇编语言调用各种中断调用功能,并由此实现对硬件的控制等;3. 了解和掌握汇编语言程序设计过程、方法及实现,为以后微机原理课程的学习打下良好基础;4. 通过课程设计可以使我们更加了解书上的知识,了解书上的语句并且能够应用自己的程序中;5. 掌握屏幕输出显示的设计方法。
高校计算机专业汇编语言程序设计练习题
高校计算机专业汇编语言程序设计练习题1. 程序题一:编写一个汇编程序,实现将前n个自然数的和存储在寄存器AX中。
要求通过键盘输入n的值,并将计算结果输出到屏幕上。
程序思路如下:- 读取键盘输入的n值,存储到内存变量n_value中。
- 使用循环将前n个自然数求和,计算结果存储到寄存器AX中。
- 将寄存器AX中的结果输出到屏幕上。
2. 程序题二:编写一个汇编程序,实现求一个正整数的二进制表示中1的个数。
要求通过键盘输入一个正整数,并将结果输出到屏幕上。
程序思路如下:- 读取键盘输入的正整数值,存储到内存变量num中。
- 使用循环和位运算的方式,统计num的二进制表示中1的个数。
- 将得到的1的个数结果输出到屏幕上。
3. 程序题三:编写一个汇编程序,实现对一个已经存储在内存中的字符串进行反转。
要求将反转后的字符串输出到屏幕上。
程序思路如下:- 将待反转的字符串存储到内存变量str中。
- 使用循环和栈操作的方式,对字符串进行反转。
- 将反转后的字符串输出到屏幕上。
4. 程序题四:编写一个汇编程序,实现对一个已经存储在内存中的数组进行排序。
要求将排序后的数组输出到屏幕上。
程序思路如下:- 将待排序的数组存储到内存变量array中。
- 使用循环和比较交换的方式,对数组进行排序。
- 将排序后的数组输出到屏幕上。
5. 程序题五:编写一个汇编程序,实现求一个已经存储在内存中的数组中的最大值。
要求将最大值输出到屏幕上。
程序思路如下:- 将待求最大值的数组存储到内存变量array中。
- 使用循环和比较的方式,找到数组中的最大值。
- 将最大值输出到屏幕上。
以上是五道高校计算机专业汇编语言程序设计的练习题,希望能够帮助你提升汇编语言编程的能力。
完成这些练习题可以加深对汇编语言程序设计的理解和熟练程度,同时提升解决实际问题的能力。
如果你能够自行尝试解答并编写相应的程序,将会获得更好的学习效果。
祝你在汇编语言程序设计的学习中取得进步!。
打字计时练习程序设计
目录1 设计目的 (3)2 设计任务 (3)3 设计过程 (4)3.1 方案比较与认证 (4)3.2 程序设计思想 (4)3.3 程序流程图设计 (5)3.3.1 主程序流程图设计 (5)3.3.2 其他子程序原理及流程图 (6)3.4 调试过程及结果 (11)3.4.1 调试过程出现的问题及解决 (11)3.4.2 程序运行结果 (12)4 结束语 (14)参考文献 (15)附录 (16)摘要作为一门新兴技术,微机及接口技术的发展在二十至二十一世纪非常迅速,现在对于技术的进步已成为了不可或缺的部分。
微机的应用十分的广泛,种类也很丰富,而且现在科技的进步使得人们对微机的运用变得越来越成熟。
然而提到微机,必不可少的便是汇编语言了,虽说现在的各种高级语言如:C语言、VB等早已变得比汇编语言更加适合于编程人员的使用,但是作为一个想真正学好微机的人,汇编语言是必不可少的工具。
相对于高级语言,汇编更加“接近”硬件,懂得汇编的人员在出现故障时可以更容易发现问题所在,用汇编编写程序可以更加清晰地知道程序的执行过程。
此外,用汇编语言编写的程序相对高级语言来说所占的内存要小的多,且一般执行起来要快得多。
所以,学习汇编对于我们来说仍是很有益的。
本次课程设计就是想通过运用汇编语言来编写程序以达到题目所给的要求,使得对微机(这里是8086)的知识更见牢固,也使得我们能对汇编语言更加灵活地运用。
要想顺利完成这次课程设计的任务,首先得对微机的内部结构有一定的了解,还要有对汇编语言的掌握与熟悉,比如各种指令的灵活运用,各种语句语法的运用以及对程序的灵活调制。
本次课程设计的任务是编写一个打字计时练习的程序,这将会比平时的学习与练习都复杂得多,因此在完成这次课设的过程势必会遇到不少挑战,但与此同时也会给予更多的锻炼和提高。
关键词:微机原理汇编语言打字计时程序调制打字计时练习程序设计1 设计目的微机原理是所需掌握的现代科学中必不可少的一门,微机原理和接口技术的运用以及渗入到生活的方方面面,在人们的技术进步过程中有必不可少的作用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编语言课程设计报告( 2014 -- 2015 年度第1 学期)课题名称:打字计时练习程序专业xxx学生姓名xxxx班级xxx学号xxxx指导教师xxx完成日期xxxxx目录1.设计目的与设计要求2.程序流程图 (5)2.1主程序流程图 (5)2.2时间计算流程图 (6)2.3正确率计算流程图 (7)3.设计关键问题 (9)3.1输入输出 (9)3.1.1 输出显示信息 (9)3.1.2 输入十个字符 (11)3.2 输入字符串所用时间计算 (11)3.3 正确率判断 (13)4.调试运行结果分析 (14)参考文献 (19)附录二打字计时练习程序 (19)一.设计目的本课程设计是在学完教学大纲规定的全部内容、完成所有实践环节的基础上,旨在深化学生学习的汇编语言课程基本知识,进一步掌握汇编语言程序设计方法,提高分析问题,解决问题的综合应用能力。
设计要求在缓冲区预放了一些字母,运行时,可按照屏幕上显示的字母输入练习,每输入完一行按回车键后,可显示出练习输入的时间。
设计思路1.系统总体分析在缓存区预放了一些字母,运行时可按照屏幕上显示的字母输入练习,每输入完一行按回车键后,可显示出练习输入的时间。
当一个句子分析完后(回车键作为结束符),屏幕上以min:sec:msec的格式显示出键入字符的时间。
在每次打字之前,屏幕上先显示一个例句,然后打字员按照例句,将句中字符通过键盘输入。
这个过程共进行五次,当键入一个enter键时,推出打字计时练习程序。
在键盘上联系的打字例句及其他地址表,计时单位等预存在DATA数据段中。
自编的中断程序Kbint检测按键时产生的中断,并将按键扫描码转换为ASCII码存入缓存区BUFFER(内存中一个区域),这个工作和EOM09类型的键盘中断例行程序所完成的工作大致相同,只是在解释各个键时作了简化,即只解释了可显示字符(如英文小写字母,数字及一些字符),其他特殊键(如组合键,双态键,功能键),都未做解释,只做字符码0来处理。
在主程序部分保存原有09类型的中断向量,设置自编例行程序的中断向量,设置中断屏蔽位,然后在开断。
当键盘中断处理后,主程序安排指令读取缓存区中的字符并显示在屏幕上。
在主程序的末尾,利用DOS功能恢复原09类型的中断向量,然后返回DOS。
在显示键入的字符时,还应判断字符是否为回车符。
说明一个句子输入完毕,此时调用显示时间的子程序显示打字时间,然后顺序显示一个例句。
如果所存放的例句都已显示完毕,则再次从第一个例句开始显示,直至键入某个功能(如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.主模块框图程序的核心模块是打字计时,通过显示的例句进行打字练习,最后显示打字时间,主题流程图如下:a. 建立汇编源程序—通过b.编译为目标文件——d.连接执行文件c.不通过,重新修改(语句错误) e.运行f.不正确,用调试工具调试,重新修改(逻辑错误)g.正确完成2程序流程图2.1主程序流程图、图1 主程序流程图主程序的流程图如图1所示:说明:首先定义堆栈段,数据段,代码段等,初始化。
显示提示信息提示打字练字的规则,说明如何开始,如何退出等。
显示出字符串后,开始读取系统时间并保存。
然后输入字符串存到指定的缓冲区。
输入结束后,再次读取系统时间,并由两次所读取的时间计算出输入字符串所用的时间并显示。
调用正确率计算函数,并显示在屏幕上。
看输入字符串对应位正确的个数是不是十个,如果是十个,则继续往下,看输入的是不是退出键1,如果是,则退出。
如果不是,则继续下一串字符的练习。
如果输入正确的个数不是十个,则返回继续该字符串的练习,指导最后输入的正确个数是十个。
2.2时间计算流程图计算时间的流程图如图3所示:说明:第一次读取系统时间后,分和秒分别存在了second和minutes里,第二次读取系统时间后,比较DH里的内容和second里的内容,比较结果是second里的内容比较小,则不用向分借位,直接进行减法运算,并把计算结果转换成ASCII码并在屏幕上显示。
如果比较的结果是second里的内容是比较大,则进行减法运算时,要向分借位,所以,将DH寄存器的内容加上60,再与second 里的内容进行减法运算,最后把运算结果转化成ASCII码,并显示在屏幕上。
图3 时间计算流程图2.3正确率计算流程图正确率显示函数的流程图如图4所示:说明:调用争取率判断子程序,首先保护现场,BX指向字符串ADDRESS[SI]首地址,BX+2,指向第一个要显示的字母,DI指向输入缓冲区的首地址,CX寄存器存入十,控制循环次数。
比较[BX]HE [DI]里的内容,即判断显示的和输入的字母是否相同。
如果相同,计数寄存器AL内容则加一,BX加一,DI加一,继续下次比较,直到十次循环结束。
如果不相同,则计数寄存器AL内容不变,BX 加一,DI加一,继续下一次循环,知道十次循环结束。
当十次循环结束后,即字符串输入结束后,寄存器AL里的内容就是输入正确的个数,AL高四位是输入正确数的十位,低四位是输入正确数的个位,将十位和个位分别转化成ASCII 码,并将其存入字符串中,调用DOS的9号功能输出字符串,输出的就是屏幕显示的字符串和输入的十位字符串对应位相同的个数,然后恢复现场。
每调用一次正确率判断函数,SI加二,即第一次调用该子程序屏幕上显示的是第一组字符串,第二次调用,当SI大于5时,就退出程序。
图4 正确率显示函数的流程图3.设计关键问题在打字练习汇编语言程序设计中,主要有三个问题,分别为输入和输出问题、输入字符串时间的计算、正确率的判断。
3.1输入输出3.1.1 输出显示信息输出字符串,主要是利用DOS的9号功能调用。
当开始打字练习时,要输出提示信息说明打字练习时的规则,其程序为:message db 0ah,0dh, 'Welcome to WUHAN UUIVERSITY, Please type 10letters, and you must input 10 right words, then press any key topractice the next one 'db 0ah,0dh, 'if you want to quit, press 1 ',0ah,0dh,'$'lea dx,messagemov ah,9int 21h显示信息输出后,要显示预先存在缓冲区的三组字符串,显示字符串用DOS9号调用,其程序为:str1 db 0ah,0dh,'wuhanunive'db 0dh,0ah,'$'str2 db 0ah,0dh,'hubeichina'db 0ah,0dh,'$'str3 db 0ah,0dh,'qmpzwmoxid'db 0ah,0dh,'$'address dw str1,str2,str3mov dx,offset address[si]mov ah,9int 21h只有当输入的字符串中的十个字符全部正确时,则显示进入下一字符串的练习并输出鼓励语,其程序为:et db 0dh,0ah,'Congratulations, Well done!',0ah,0dh,'$'mov dx,offset etmov ah,09hint 21h当要显示输入字符串所用的时间以及显示输入字符串个数时,可以采用单个字符的输出,但是为了在屏幕上看起来直观,就把要显示的时间和正确个数的十位和个位分别存在缓冲区,并把缓冲区的内容采用9号调用输出在屏幕上,其程序为:(1)显示输入字符所用的时间的程序time db 2 dup(?),'$'mov time[0],ah;输入字符串所用时间的十位送入time[0]mov time[1],al;输入字符串所用时间的个位送入time[1]mov dx,offset time;显示time中的内容mov ah,9int 21h(2) 显示输入字符串正确个数的程序为:num db 2 dup(?),'$'mov num[0],bh ;输入字符串正确个数的十位送入num[0]mov num[1],bl;输入字符串正确个数的个位送入num[1]mov dx,offset num;显示num中的内容mov ah,9int 21h3.1.2 输入十个字符当屏幕显示出要练习字符串时,就要输入十个字符存到指定的缓冲区中,使用DOS 1号功能调用,其功能是输入单个字符,输出参数是AL=输入字符的ASCII 码,循环十次,将十个字符存入指定的缓冲区buff中,其程序为:buff db 15 dup(?)mov cx,10 ;cx=10,控制循环次数mov bx,0again:mov ah,1 ;输入单个字符int 21hmov buff[bx],al;将输入的字符存到指定的缓冲区inc bxloop again3.2 输入字符串所用时间计算对输入字符串时间的计算,需要知道输入字符串前的时间和输入字符串后的时间,将两者相减,即得输入字符串所用的时间。
具体为:当显示第一串字符串后,调用DOS 的2CH号功能读取系统时间,读取完系统时间后,系统时间的时、分和秒分别存在寄存器CH、CL、DH中。
并将CL和DH的内容保存到minutes和second中,以便计算输入字符串所用时间用;第一次读取系统时间后,开始输入10个字符,当输入字符结束后,再次读取系统时间,首先第二次的分钟数减去第一次的分钟数,如果结果大于零,则用第二次的秒数减去第一次的秒数,所得的结果转化称ASCII码显示在屏幕上,即为输入字符串所用的时间。
如果第二次的分钟数减去第一次的分钟数的结果小于零,则第二次的秒数加上60后,再减去第一次的分钟数,所得结果妆化称ASCII码后显示在屏幕上,则为输入字符串所用的时间。