当前位置:文档之家› 键盘录入数据的转换与显示

键盘录入数据的转换与显示

键盘录入数据的转换与显示
键盘录入数据的转换与显示

目录

键盘录入数据的转换与显示 0

1设计任务及要求分析 0

1.1设计任务 0

1.2要求分析 0

2方案比较及认证说明 (1)

3系统原理阐述 (2)

3.1系统设计的软硬件环境 (2)

3.2系统设计中用到的DOS调用 (2)

4软件设计说明 (5)

4.1 ASCII码转换成二进制算法实现 (5)

4.2二进制转换成ASCII码算法实现 (5)

4.3主程序结构分析 (5)

4.4子程序结构分析 (7)

4.5中断程序的结构分析 (8)

5调试记录及结果分析 (9)

5.1调试记录 (9)

5.2调试结果分析 (9)

总结和心得体会 (10)

参考文献 (11)

附录一源程序和程序注释 (12)

附录二程序运行结果截图 (15)

附录三本科生课程设计成绩评定表 (15)

键盘录入数据的转换与显示

1设计任务及要求分析

1.1设计任务

从键盘读入二个五位十进制数(1位符号位+4位数值位),并将这二个十进制数,分别转换为二进制数,然后求其和,再将和以十进制形式进行显示。按Q退出程序。

1.2要求分析

通过对课程设计任务书的要求进行分析可知,首先要求从键盘读入二个五位十进制数(1位符号位(+-)+4位数值位),此时,向计算机中输入的数是其实是ASCII2码,而不是真正的二进制数,应该先将这两个分别输入的数在计算机中将其转化为计算机所能识别的机器语言即二进制,然后,通过相应的指令使这两转化过的二进制数相加,当然这个时候,并不能直接输出,因为此时的数是二进制数,不是ASCII2码,只有先转化成ASCII2码之后才能把这两个数之和以其对应的字符的形式输出到屏幕上。以上就是本次课设的要求所对应的具体含义。

2方案比较及认证说明

输入输出方式的比较。

方案一:BIOS功能调用方式输入输出数据。此方案使用相对复杂一些,而其我们对BIOS 功能调用不是很熟悉。

方案二:MSDOS功能调用的方式输入输出数据。此方案相对方案一较为简单实用,但是由于我们平时接触较少所以也不太熟悉。

方案三:用emu8086编译器进行编译。由于它结合了一个先进的原始编辑器、组译器、反组译器、具除错功能的软件模拟工具(虚拟PC),还有一个循序渐进的指导工具。该软件包含了学习汇编语言的全部内容。综上,我们选用方案三的输入输出方式,输入数据和输出数据。

3系统原理阐述

3.1系统设计的软硬件环境

我们设计键盘录入数据的转换与显示的硬件环境是X86计算机平台的IBM-PC兼容机,开发的软件环境是Windows 7操作系统下的MFPCI98汇编编译环境。虽然我们不是在标准的8086 IBM_PC平台下编程,也不是标准的DOS操作系统环境下编程;但是我们的硬件平台是兼容8086的X86计算机平台,软件平台是更高级并且兼容DOS的Windows7操作系统,但是我们还是最好使用emu8086所以我们程序运行的结果绝对跟标准8086IBM-PC平台上

运行的结果完全一样。

3.2系统设计中用到的DOS调用

DOS是1979年由微软公司为IBM个人电脑开发的MS-DOS,它是一个单用户单任务的操作系统。后来DOS的概念也包括了其它公司生产的与MS-DOS兼容的系统,如PC-DOS、DR-DOS, 以及一些其它相对不太出名的DOS兼容产品。它们在1985年到1995年及其后的一段时间内占据操作系统的统治地位,最著名和广泛使用的DOS系统从1981年直到1995年的15年间微软在推出Windows 95之后,宣布MS-DOS不再单独发布新版本。不过FreeDOS等与

MS-DOS兼容的DOS则在继续发展着。DOS不紧为用户提供了许多指令还同时为客户提供了上百个可以直接调用的子程序,这些子程序的调用称为系统功能的调用。当类型码n=

05H~1FH时,调用BIOS的中断处理程序;类型码n=20H~3FH时,调用DOS的中断处理

程序。按DOS中断规定,用指令写入口参数,然后执行INT n指令,执行完毕后,依据

结果进行分析及处理。

下面介绍一些在本程序中用到的一些DOS输入输出功能。

1.单字符输入--1号

功能:从键盘输入一个字符。

输入参数:无。

输出参数:AL=ASCII码。

2.单字符输出--2号

功能:在屏幕上显示1个字符(ASCII码)。

输入参数:DL=ASCII码。

输出参数:无。

3.多字符输入——0AH

功能:多个字符输入到缓冲区。

输入参数:DS:DX=输入缓冲区首地址。

输出参数:DS: DX=输入字符串所在缓冲区地址。

设置缓冲区要注意以下几点:

4多字符输出——9号

功能:多个字符输出到屏幕显示。

输入参数:DS:DX=输出字符缓冲区首地址。

输出参数:无。

该功能对输出字符的个数没有要求,但是输出字符串要以‘$’结束。

5过程终止——4CH号

该调用的功能是结束当前程序,并且返回调用它的程序。如果在DEBUG状态下运行则返回DEBUG;如果在DOS下运行,则返回DOS。在汇编语言程序结束处加上“MOVAX,4C00H”和“INT 21H”两条指令,以利于程序执行完毕,返回操作系统控制。

6.直接输入、输出单字符(6号功能调用)

格式: MOV DL, 输入/输出标志

MOV AH, 06H

INT 21H

功能:执行键盘输入操作或屏幕显示输出操作,但不检查Ctrl+Break组合键是否按下。执行这两种操作的选择由DL寄存器中的内容决定。

①当(DL)=0FFH时,执行键盘输入操作。若标志ZF=0,AL中放入字符的ASCII 码;若标志ZF=1,表示无键按下。这种调用用来检测键盘是否有键按下,但不等待键盘输入。

②当(DL)≠0FFH时,表示将DL中内容送屏幕显示输出。

7.检查键盘的工作状态(0BH号功能调用)

格式: MOV AH, 0BH

INT 21H

功能:检查是否有键盘输入,若有键按下,则使AL=0FFH,若无键按下,则AL=00H。对于利用键盘操作退出循环或使程序结束之类的操作来说,这种调用是很方便实用的。

8.设置系统日期(2BH号功能调用)

格式: MOV CX, 年号

MOV DH, 月号

MOV DL, 日期

MOV AH, 2BH

INT 21H

功能:设置有效的年、月、日。当AL=0时,设置成功;当AL=0FFH时,设置失败。

9.设置系统时间(2DH号功能调用)

格式: MOV CH, 小时

MOV CL, 分

MOV DH, 秒

MOV AH, 2DH

INT 21H

功能:设置有效的时间。当AL=0时,设置成功;当AL=0FFH时,设置失败。

4软件设计说明

4.1 ASCII码转换成二进制算法实现

ASCII码转换为二进制数 ;算法为,首先将其转换成十进制数字,再用累加和乘10加X 的方法变成二进制数,如将 ;358转换为二进制数,可先将累加和赋0,再计算10+5)10+8),结果为二 ;进制数,再由符号位决定是否需要求补。

4.2二进制转换成ASCII码算法实现

AX中的数范围在+32767到-32768之间,先检查AX中的符号位,以决定输出“+”还是“-”,若是负数,应先求补,得到原码后即可与正数作统一处理。转换方法为将被转换的二进制数先除以10000,商;即为万位数,再将余数除以1000,商为千位数,以此类推,求出百、十位数,剩下的为个位数。最后,将各个数加上30H,即成为对应字符。4.3主程序结构分析

程序执行一次一共用了9次21H号中断。第1、3、5、6、7次调用前AH写入的是9,所以这几次调用INT21是在屏幕上显示DX为首地址的字符串,也就是显示的是响应的提示信息和两个数之和的结果;第2、4次INT21H中断调用前AH写入了10,所以这两次调用的作用是输入两个五位十进制数,且在没个五位的十进制数输入后,立即调用

ASCII_TO_BIN函数转换成相应的二进制数;第八次INT21H调用之前AH中写入了1,该次输入一个字符,在把输入的该字符和Q和q比较,看是否是其中的一个,若是则程序结束,此时在AH中写入4CH中,再调用INT21H,显然是把CPU交给操作系统;若不是则程序回到开始处,程序循环。主程序的流程图如图4-1所示。

图4-1 主程序流程图

4.4子程序结构分析

ASC_TO_BIN(ASCII码字符转化成二进制子函数),顾名思义,本函数的作用是将ASCII2码转化成二进制,在本程序中两次输入的数的转化过程都要调用程序。算法实现已在前面分析,这里不再重述,ASC_TO_BIN子程序的流程图如图4-2图所示。

图4-2 ASC_TO_BIN子程序流程图

BIN_TO_ASCII(将二进制数转换成相应ASCII码形式十进制数函数),该函数的功能是将一个二进制数转化成对应ASCII码形式的十进制数,以便屏幕输出。该子程序的算法实现已在前面说明,程序流程图如图4-3所示。

图4-3 BIN_TO_ASCII子程序流程图

4.5中断程序的结构分析

INT21H号中断是一个系统中断,中断程序根据中断前写入AH中的值决定中断的功能,前面已说明中断程序的功能,中断程序执行的流程图如图4-4所示。

图4-4 中断程序流程图

5调试记录及结果分析

5.1调试记录

刚写完程序第一次调试时,程序老是出错,错误提示如图5-1所示。

图5-1 调试出错提示

经过反复认真检查和修改,最后终于找到了程序出错的原因,原来是一些关于指令的格式出错了,后面修改了主程序和子程序的指令格式,程序就可以正常运行了。运行结果如图5-2所示。

图5-2 正确运行的结果

5.2调试结果分析

从图5-2和附录二中可以看出,程序运行结果完全满足预期要求。

6 总结和心得体会

不知不觉,大三下学期已经接近了尾声,微机原理与接口技术的课程设计已经完结了,从刚开始接到课设任务书时的烦躁,完全的不知所措,一片茫然到后来渐渐的有了眉目,直到最后做出成果,这中间经历了太多的纠结与挫折。

刚拿到题目时,我感觉我平时课堂上所学的知识与我的课设题目没有太大的联系,因为,平时课堂上你只需要把老师上课要讲的细节记下来,这样应付考试是完全没有问题的。但是,课程设计则不一样,它立足于平日所学的基础知识,但是同时它又是一种拔高,涉及到很多课外的知识,此时的我内心十分茫然,然后,我所做的就是立足于基础建立一个基本的想法,画出流程图,将大的目标逐渐细化,分成很多子工程,然后各个击破。到这里。查阅资料的重要性就体现出来了,现在的大学主要培养的是学生们的自学能力,遇到问题,思考问题,通过查资料和请教老师同学来解决问题。也就是在这个过程中,我也知道团队合作的重要性,有的时候以个人的力量太渺小,一意孤行往往不能的到最后的成功,只有和大家一起,利用团队的量才能得到成功的果实。在这次课程设计中,我真正体会到了合作的重要性,遇到很多问题时,当我看书查资料不能解决时,这是去找同学讨论一下,收获很大,可以使很多问题迎刃而解,直到问题最终解决。

不可否认,本程序存在不少缺点和不足,但通过这次课程设计的却找出了自己在学习上的不足,对以后的工作也有指导作用。我相信在以后的学习中会克服这些不足,达到熟练掌握汇编语言的目的。有困难并不怕,在学习的过程中会遇到很多的困难,真正重要的是要有面对困难百折不挠的勇气。

这次课程设计受益非浅,学到了不少知识,同时也认识到自身的不足,需要加强自身训练,学以致用,学会自我总结,吸取教训,积累经验,在学习和实践中来不断的提升自己。我会永远的铭记这一次的课设,它将永远启发着我,不论是学习上还是生活中。

相关主题
文本预览
相关文档 最新文档