键盘录入数据的转换与显示_第1页
键盘录入数据的转换与显示_第2页
键盘录入数据的转换与显示_第3页
键盘录入数据的转换与显示_第4页
键盘录入数据的转换与显示_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

1、目录键盘录入数据的转换与显示11设计任务及要求分析11.1设计任务11.2要求分析12方案比较及认证说明23系统原理阐述33.1系统设计的软硬件环境33.2系统设计中用到的DOS调用34软件设计说明64.1 ASCII码转换成二进制算法实现64.2二进制转换成ASCII码算法实现64.3主程序结构分析64.4子程序结构分析84.5中断程序的结构分析95调试记录及结果分析105.1调试记录105.2调试结果分析10总结和心得体会11参考文献12附录一 源程序和程序注释13附录二 程序运行结果截图17附录三 本科生课程设计成绩评定表17键盘录入数据的转换与显示1设计任务及要求分析1.1设计任务 从

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

3、的字符的形式输出到屏幕上。以上就是本次课设的要求所对应的具体含义。2方案比较及认证说明输入输出方式的比较。方案一:BIOS功能调用方式输入输出数据。此方案使用相对复杂一些,而其我们对BIOS功能调用不是很熟悉。方案二:MSDOS功能调用的方式输入输出数据。此方案相对方案一较为简单实用,但是由于我们平时接触较少所以也不太熟悉。方案三:用emu8086编译 器进行编译。由于它结合了一个先进的原始编辑器、组译器、反组译器、具除错功能的软件模拟工具(虚拟PC),还有一个循序渐进的指导工具。该软件包含了学习汇编语言的全部内容。综上,我们选用方案三的输入输出方式,输入数据和输出数据。3系统原理阐述3.1系

4、统设计的软硬件环境我们设计键盘录入数据的转换与显示的硬件环境是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,它是一个单用户单

5、任务的操作系统。后来DOS的概念也包括了其它公司生产的与MS-DOS兼容的系统,如PC-DOS、DR-DOS, 以及一些其它相对不太出名的DOS兼容产品。它们在1985年到1995年及其后的一段时间内占据操作系统的统治地位,最著名和广泛使用的DOS系统从1981年直到1995年的15年间微软在推出Windows 95之后,宣布MS-DOS不再单独发布新版本。不过FreeDOS等与MS-DOS兼容的DOS则在继续发展着。DOS不紧为用户提供了许多指令还同时为客户提供了上百个可以直接调用的子程序,这些子程序的调用称为系统功能的调用。当类型码n05H1FH时,调用BIOS的中断处理程序;类型码n20

6、H3FH时,调用DOS的中断处理程序。按DOS中断规定,用指令写入口参数,然后执行INTn指令,执行完毕后,依据结果进行分析及处理。下面介绍一些在本程序中用到的一些DOS输入输出功能。1.单字符输入-1号功能:从键盘输入一个字符。输入参数:无。输出参数:AL=ASCII码。2.单字符输出-2号功能:在屏幕上显示1个字符(ASCII码)。输入参数:DL=ASCII码。输出参数:无。3.多字符输入0AH功能:多个字符输入到缓冲区。输入参数:DS:DX=输入缓冲区首地址。输出参数:DS: DX=输入字符串所在缓冲区地址。设置缓冲区要注意以下几点:4多字符输出9号功能:多个字符输出到屏幕显示。输入参数

7、:DS:DX=输出字符缓冲区首地址。输出参数:无。该功能对输出字符的个数没有要求,但是输出字符串要以$结束。5过程终止4CH号该调用的功能是结束当前程序,并且返回调用它的程序。如果在DEBUG状态下运行则返回DEBUG;如果在DOS下运行,则返回DOS。在汇编语言程序结束处加上“,”和“INT 21H”两条指令,以利于程序执行完毕,返回操作系统控制。6直接输入、输出单字符(6号功能调用)格式: MOV DL, 输入/输出标志 MOV AH, 06H INT 21H 功能:执行键盘输入操作或屏幕显示输出操作,但不检查CtrlBreak组合键是否按下。执行这两种操作的选择由DL寄存器中的内容决定。

8、 当(DL)0FFH时,执行键盘输入操作。若标志ZF0,AL中放入字符的ASCII码;若标志ZF1,表示无键按下。这种调用用来检测键盘是否有键按下,但不等待键盘输入。 当(DL)0FFH时,表示将DL中内容送屏幕显示输出。7检查键盘的工作状态(0BH号功能调用)格式: MOV AH, 0BH INT 21H 功能:检查是否有键盘输入,若有键按下,则使AL0FFH,若无键按下,则AL00H。对于利用键盘操作退出循环或使程序结束之类的操作来说,这种调用是很方便实用的。8设置系统日期(2BH号功能调用)格式: MOV CX, 年号 MOV DH, 月号 MOV DL, 日期 MOV AH, 2BH

9、INT 21H 功能:设置有效的年、月、日。当AL0时,设置成功;当AL0FFH时,设置失败。9设置系统时间(2DH号功能调用)格式: MOV CH, 小时 MOV CL, 分 MOV DH, 秒 MOV AH, 2DH INT 21H 功能:设置有效的时间。当AL0时,设置成功;当AL0FFH时,设置失败。 4软件设计说明4.1 ASCII码转换成二进制算法实现 ASCII码转换为二进制数 ;算法为,首先将其转换成十进制数字,再用累加和乘10加X的方法变成二进制数,如将 ;358转换为二进制数,可先将累加和赋0,再计算10+5)10+8),结果为二 ;进制数,再由符号位决定是否需要求补。4.

10、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中

11、断调用前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码转化成二进制,在本程序中两次输入的数

12、的转化过程都要调用程序。算法实现已在前面分析,这里不再重述,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 中

13、断程序流程图5调试记录及结果分析5.1调试记录刚写完程序第一次调试时,程序老是出错,错误提示如图5-1所示。图5-1 调试出错提示 经过反复认真检查和修改,最后终于找到了程序出错的原因,原来是一些关于指令的格式出错了,后面修改了主程序和子程序的指令格式,程序就可以正常运行了。运行结果如图5-2所示。图5-2 正确运行的结果5.2调试结果分析 从图5-2和附录二中可以看出,程序运行结果完全满足预期要求。6 总结和心得体会 不知不觉,大三下学期已经接近了尾声,微机原理与接口技术的课程设计已经完结了,从刚开始接到课设任务书时的烦躁,完全的不知所措,一片茫然到后来渐渐的有了眉目,直到最后做出成果,这中

14、间经历了太多的纠结与挫折。刚拿到题目时,我感觉我平时课堂上所学的知识与我的课设题目没有太大的联系,因为,平时课堂上你只需要把老师上课要讲的细节记下来,这样应付考试是完全没有问题的。但是,课程设计则不一样,它立足于平日所学的基础知识,但是同时它又是一种拔高,涉及到很多课外的知识,此时的我内心十分茫然,然后,我所做的就是立足于基础建立一个基本的想法,画出流程图,将大的目标逐渐细化,分成很多子工程,然后各个击破。到这里。查阅资料的重要性就体现出来了,现在的大学主要培养的是学生们的自学能力,遇到问题,思考问题,通过查资料和请教老师同学来解决问题。也就是在这个过程中,我也知道团队合作的重要性,有的时候以

15、个人的力量太渺小,一意孤行往往不能的到最后的成功,只有和大家一起,利用团队的量才能得到成功的果实。在这次课程设计中,我真正体会到了合作的重要性,遇到很多问题时,当我看书查资料不能解决时,这是去找同学讨论一下,收获很大,可以使很多问题迎刃而解,直到问题最终解决。 不可否认,本程序存在不少缺点和不足,但通过这次课程设计的却找出了自己在学习上的不足,对以后的工作也有指导作用。我相信在以后的学习中会克服这些不足,达到熟练掌握汇编语言的目的。有困难并不怕,在学习的过程中会遇到很多的困难,真正重要的是要有面对困难百折不挠的勇气。这次课程设计受益非浅,学到了不少知识,同时也认识到自身的不足,需要加强自身训练

16、,学以致用,学会自我总结,吸取教训,积累经验,在学习和实践中来不断的提升自己。我会永远的铭记这一次的课设,它将永远启发着我,不论是学习上还是生活中。参考文献1周佩玲,彭虎,付忠谦,微机原理与接口技术(第二版).电子工业出版社,20082周佩玲,吴耿峰,万炳奎,十六位微型计算机原理接口及其应用.中国科学技术大学工业出版社,19953艾德才等.Pentium/80486实用汇编语言程序设计.清华大学出版社,19975孙德文.微型计算机技术.高等教育出版社,2001附录一 源程序和程序注释本程序能从键盘读入二个五位十进制数,并将这二个十进制数分别转换为二进制数,然后求其和,再将和以十进制形式进行显示

17、。其中sjzhxs为主模块,调用b模块。;模块sjzhxs 文件名为:sjzhxs.asmEXTRN ASC_TO_BIN:FAR , BIN_TO_ASCII:FARDATA SEGMENT COMMONINPUT_MESSAGE DB 0AH , PLEASE INPUT A NUMBER:$IN_ASC_BUF DB 6 ;十进制数的输入缓冲区,共可接收6个字符DB ? ;保留,用于10号调用时DOS填入实际输入字符个数DB 6 DUP ;一个符号位,四位数字ASCII码,加上一个回车符,共计6字符BIN_BUF1 DW ? ;将第一个数转换为二进制后,放于此处OUTPUT_MESSAG

18、E DB 0AH , THE SUM IS: , $OUT_ASC_SUM DB 6 DUP , $ ;将二个数的和转换为ASCII码后,放于此处,以供9号调用显示DATA ENDSCODE SEGMENTASSUME CS:CODE , DS:DATASTART:MOV AX , DATAMOV DS , AXMOV DX , OFFSET INPUT_MESSAGEMOV AH , 9INT 21H ;提示输入一个数MOV DX , OFFSET IN_ASC_BUFMOV AH , 10INT 21H ;读取第一个数CALL ASC_TO_BIN ;转换第一个数为二进制MOV BIN_B

19、UF1 , AX ;保存第一个数MOV DX , OFFSET INPUT_MESSAGEMOV AH , 9INT 21H ;提示输入一个数MOV DX , OFFSET IN_ASC_BUFMOV AH , 10INT 21H ;读取第二个数CALL ASC_TO_BIN ;转换第二个数为二进制ADD AX , BIN_BUF1 ;计算这二个数之和CALL BIN_TO_ASCII ;将和转换为ASCII码,以供显示用MOV DX , OFFSET OUTPUT_MESSAGEMOV AH , 9INT 21HMOV DX , OFFSET OUT_ASC_SUMMOV AH , 9INT

20、 21HMOV AH , 4CHINT 21HCODE ENDSEND START查看此模块对应的列表文件;模块b 文件名为:b.asmPUBLIC ASC_TO_BIN , BIN_TO_ASCIIDATA SEGMENT COMMONINPUT_MESSAGE DB 0AH , PLEASE INPUT A NUMBER:$IN_ASC_BUF DB 6 ;十进制数的输入缓冲区,共可接收6个字符DB ? ;保留,用于10号调用时DOS填入实际输入字符个数DB 6 DUP ;一个符号位,四位数字ASCII码,加上一个回车符,共计6字符BIN_BUF1 DW ? ;将第一个数转换为二进制后,放

21、于此处OUTPUT_MESSAGE DB 0AH , THE SUM IS: , $OUT_ASC_SUM DB 6 DUP , $ ;将二个数的和转换为ASCII码后,放于此处,以供9号调用显示DATA ENDSCSEG SEGMENTASSUME CS:CSEG , DS:DATAASC_TO_BIN PROC FAR;ASCII码转换为二进制数 ;入口:十进制数的ASCII码在IN_ASC_BUF内 ;出口:转换后的二进制数在AX内 ;算法:先将其转换成十进制数字,再用累加和乘10加X的方法变成二进制数,如将 ;358转换为二进制数,可先将累加和赋0,再计算10+5)10+8),结果为二

22、 ;进制数,再由符号位决定是否需要求补。MOV CL , IN_ASC_BUF+1 ;取字符个数MOV CH , 0DEC CL ;扣除符号位MOV BX , OFFSET IN_ASC_BUF+3 ;调整BX指向十进制数的最高位PUSH BXPUSH CXL1:MOV AL , BXAND AL , 0FHMOV BX , ALINC BXLOOP L1 ;将所有数字字符的高四位清0,使之变为数字值POP CXPOP BXMOV AX , 0 ;累加和赋初值MOV SI , 10L2:MUL SIADD AL , BXADC AH , 0INC BXLOOP L2 ;累加乘10CMP IN_ASC_BUF+2 , +JZ L3 ;符号是正号,转移NEG AX ;符号是负号,求补L3:RETASC_TO_BIN ENDPBIN_TO_ASCII PROC FAR;将二进制数转换为对应十进制数数字的ASCII码 ;入口:二进制数在AX内 ;出口:转换后的ASCII码在OUT_ASC_SUM变量内 ;算法:AX中的数范围在+32767到-32768之间,先检查AX中的符号位,以决定输出“+” ;还是“-”,若是负数,应先求补,得到原码后即可与正数作统一处理。转换方法为将被转换的 ;二进制数先除以10000,商;即为万位数,再将余数除以1000,商为千位数,以此类推,求出 ;百、十位数

温馨提示

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

评论

0/150

提交评论