微机原理课程设计键盘录入转换程序设计.doc

上传人:sccc 文档编号:4854677 上传时间:2023-05-20 格式:DOC 页数:17 大小:224.01KB
返回 下载 相关 举报
微机原理课程设计键盘录入转换程序设计.doc_第1页
第1页 / 共17页
微机原理课程设计键盘录入转换程序设计.doc_第2页
第2页 / 共17页
微机原理课程设计键盘录入转换程序设计.doc_第3页
第3页 / 共17页
微机原理课程设计键盘录入转换程序设计.doc_第4页
第4页 / 共17页
微机原理课程设计键盘录入转换程序设计.doc_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《微机原理课程设计键盘录入转换程序设计.doc》由会员分享,可在线阅读,更多相关《微机原理课程设计键盘录入转换程序设计.doc(17页珍藏版)》请在三一办公上搜索。

1、武汉理工大学微型计算机原理课程设计说明书1设计概述 此次课程设计为键盘录入转换程序设计,满足以下要求:通过键盘连续录入可显示多个字符,遇“.”时终止;字符串以空格和“.”分隔,输入完成后,空格前的字符串以正向在屏幕上显示,“.”前的字符串以反向在屏幕上显示。程序设计主要包括调用DOS系统的INT 21H功能从键盘输入字符然后显示字符,通过调用相应的字程序判断输入的字符是否为空格和“.”,当输入“.”时终止字符的输入,配合调用另一子程序来实现空格前的字符串在屏幕向以正序显示,“.”前的字符串在屏幕上以反序显示,从而完成此次课程设计。由于本程序设计大量使用调用DOS系统的INT 21H功能,本报告

2、书将首先介绍DOS系统的INT 21H功能,然后进行详细的程序设计。2 程序设计相关知识介绍2.1 DOS及其功能调用DOS操作系统从两个层次上向用户提供与操作系统的接口,普通用户可以通过键盘命令在命令处理模块层次上和操作系统互交,高级用户可以通过软件中断的方式在DOS的较低层次上合操作系统交互,包括DOS中断调用和BIOS功能调用。DOS操作系统将输入输出管理程序编制成一系列子程序,不仅系统可以使用,用户也可以像调用子程序一样方便的调用它们。这些子程序或常驻内存,或固化在系统的ROM中。目前DOS常用的9类中断(20H27H和2FH)分为两种:1 DOS专用中断:INT22H、INT23H和

3、INT24H,用户不能使用。2DOS可调用中断:INT20H、INT27H(程序退出)、INT21H(系统功能调用)、INT25H、INT26H(磁盘R/W中断)、INT 2FH(假脱机打印文件)。DOS系统功能调用的方式是通过执行软中断指令INT21H来实现的。当寄存器AX中设置不同的值时,该指令将完成不同的功能。在21H类型所对应的中断程序中包含了一系列最常用的功能子程序,这些子程序分别分别实现外部设备管理功能、文件读写和管理功能、目录管理功能等,所以21H类型中断几乎包括了整个系统的功能,系统功能调用的名称也就由此而来。DOS启动成功后,INT21H的中断向量(中断处理程序首地址)被初始

4、化在中断向量表中向量地址为84H到87H的4个字节单元内。所有系统功能调用的各自功能的介绍见表1,有些系统调用功能简单,不需要设置入口参数,或者说没有出口参数。详细的功能、入口参数、出口参数要求可见专门的手册。通常,默认标准设备为:标准输入设备(控制台输入)是键盘;输出设备(控制台输出)是显示器;标准辅助设备是第一个RS232串口异步通讯接口,打印输出为第一个并行接口等。表1 字符I/O系统功能调用功能号功能入口参数出口参数01H带回显的键盘输入AL=输入字符03H串行口输入字符AL=输入字符06H直接控制台I/ODL=FF(输入)DL=字符(输出)AL=输入字符07H直接控制台输入(无回显)

5、AL=输入字符08H无回显的键盘输入AL=输入字符0AH字符串缓冲输入DS:DX=缓冲区首址0BH取键盘输入状态AL=00无键入AL=FF有键入0CH清键盘缓冲区后,输入AL=功能号(01/06/07/08或0A)02H字符显示DL=输出字符04H串行口输出字符DL=输出字符05H字符打印DL=输出字符09H字符串显示DS:DX=缓冲区首址0DH初始化键盘1功能01H、07H和08H 功能描述:从标准输入设备(如:键盘)读入一个字符。该中断在处理过程中将一直处于等待状态直到有字符可读为止。该输入还可被重定向,如果这样做,则无法判断文件是否已到文件尾。入口参数:AH01H,过滤掉控制字符,并回显

6、。 AH07H,不过滤掉控制字符,不回显。 AH08H,过滤掉控制字符,不回显。出口参数:AL输入字符的ASCII码。例如:读键盘输入一个字符并且回显的程序。MOV AH,1INT 21H2功能02H功能描述:向标准输出设备(如:屏幕)输出一个字符。该输出还可被重定向,如果这样做,则将无法判断磁盘是否满。 入口参数:AH02H,DL待输出字符的ASCII码。出口参数:无。其基本格式如下:MOV AH,2MOV DL,要显示的字符的ASCIIINT 21H3功能03H功能描述:从辅助设备读入一个字符,该辅助设备的缺省值为COM1。入口参数:AH03H。出口参数:AL读入字符的ASCII码。4功能

7、04H功能描述:向辅助设备输出一个字符,该辅助设备的缺省值为COM1入口参数:AH04H,DL待输出字符的ASCII码。出口参数:无。5功能06H功能描述:控制台(如:键盘、屏幕)输入/输出。如果输入/输出操作被重定向,那么,将无法判断文件是否已到文件尾,或磁盘已满。入口参数:AH06H,DL输入/输出功能选择。出口参数:若DL00H-FEH,则此功能为输出,DL为待输出字符的ASCII码;若DL0FFH,则此功能为输入,此时:若ZF1,则无字符可读,否则,AL读入字符的ASCII码。6. 功能09H功能描述:输出一个字符串到标准输出设备上。如果输出操作被重定向,那么,将无法判断磁盘已满。入口

8、参数:AH09H,DS:DX待输出字符的地址,待显示的字符串以$作为其结束标志,否则会引起屏幕混乱。显示时在字符串结束前加上回车及换行的ASCII码0DH和0AH,可使光标自动换行。出口参数:无。其基本格式如下:MOV AH,9LEA DX,INT 21H7功能0AH功能描述:从标准输入设备上读入一个字节字符串,遇到“回车键”结束输入(输入的字符在标准的输出设备上有回显)。如果该输入操作被重定向,那么,将无法判断文件是否已到文件尾。入口参数:AH0AH,DS:DX存放输入字符的起始地址。第一个字节为缓冲区的最大容量,可认为是入口参数;第二个字节为实际输入的字符数(不包括回车键),可看作出口参数

9、;从第三个字节开始存放实际输入的字符串;字符串以回车键结束,回车符是接受的最后一个字符;若输入的字符数超过缓冲区的最大容量,则多出的部分被丢弃,系统并发出响铃,直到输入“回车”键才结束输入。 出口参数:无。例如:用DOS系统调用0AH从键盘输入一个字符串STR1 DB 10,? 10 DUP(?)LEA DX,STR1MOV AH,OAHINT 21H8功能0BH功能描述:检查标准输入设备上是否有字符可读,该输入操作可被重定向。入口参数:AH0BH。出口参数:AL00H无字符可读;FFH有字符可读。9功能0CH功能描述:清空当前的标准输入缓冲区,再读入字符。其输入操作可被重定向。入口参数:AH

10、0CH,AL01H、06H、07H、08H或0AH。出口参数:若入口参数AL为0AH,则DS:DX存放输入字符的起始地址,否则,出口参数AL输入字符的ASCII码。2.2 ASCII码由于计算机硬件只能识别二进制数,字母和字符也必须使用二进制编码来表示。目前用来表示字母和字符的二进制编码方式有很多种,最常用的是ASCII码。ASCII码又称美国信息交换标准码(American Standard Code for Information Interchange) ,多用于输入输出设备(如电传打字机),是7位二进制编码。它总共可表示128个符号,包括26个英文大写字母, 26个英文小写字母,09共

11、十个数字,32个通用控制字符和34个专用字符。在计算机中用一个字节存放字符编码,故在ASCII的最高位补0。因此ASCII可表示8位二进制或两位16进制数。本设计所需要的“.”的ASCII码为2EH,空格的ASCII码为20H,回车及换行的ASCII码0DH和0AH。3程序设计3.1主程序设计由于需要通过键盘连续录入可显示的字符,需要调用DOS系统的INT 21H一系列子功能从键盘输入字符然后显示出来,最开始进行初始化,首先调用09H号子功能从键盘输入“PLEASE INPUT THE STRING:”提示输入一连串字符,以回车和换行作为结束自动切入另一行从而从键盘输入字符;通过调用JUDGE

12、子程序对输入的字符进行判断,判断其是否为空格键和”.”键,当遇到空格时继续输入字符,遇到“.”时终止字符输入。同时根据JUDGE子程序的返回值作为判断调用CHANGE子程序,当输入字符没有空格时字符全部以反序输出显示在屏幕上,当输入字符有空格时对于空格前的字符以正序输出显示在屏幕上,对于“.”前的字符以反序输出显示在屏幕上。主程序的程序流程图如下。偏移地址指针SI清零INT 21H的09号子功能显示STR1字符串DH清零段寄存器、堆栈和界面初始化开 始INT 21H的01H号子功能接收键入字符调用JUDGE子程序INT 21H的01H号子功能接收键入字符CF=1?DH=1?$传送到STRING

13、+SI+1调用CHANGE子程序SI加1YNINT 21H的02H号子功能显示回车和换行INT 21H的09号子功能显示STR2和STRING字符串DI加1NY结 束 图1 主程序设计流程图3.2 JUDGE子程序设计对输入的字符首先判断其是否为空格键,若为空格键则将DH和CF置1,并且将数输入的字符送到STRING中,若不为空格键则继续判断其是否为“.”键,则将CF置0,将其值返回后终止输入字符。其程序流程图如下。将SI传送给DIAL=20H?将1传送给DHAL=2EH?NYJUDGE子程序STCAL传送到STRING YNCF=1图2 JUDGE子程序流程图返 回3.3 CHANGE子程序

14、设计由于字符串处理在堆栈中进行,首先将断点数据压入堆栈,以便调用子程序后可以正确的返回主程序中,对输入的数据的长度进行处理,计算设置SI 和DI 的初值,设置循环,将循环次数赋予CL从而控制循环,然后将STRING+SI传送到AL中,用XCHG将AL和STRING+DI数据交换,循环结束后从而使得正序输入的数据以反向输出显示在屏幕上,最后将断点数据出堆栈返回到主程序。子程序流程图如下。CHANGE子程序断点数据压入堆栈设置SI和DI初值将STRING+SI传送到AL将STRING+DI与 AL数据交换将AL传送到 STRING+SISI减1,DI加1断点数据出堆栈CF=0?返 回NY 图3 C

15、HANGE子程序流程图3.4 程序编写根据分析和程序流程图,编写以下程序。%定义数据段%DATA SEGMENT STR1 DBPLEASE INPUT THE STRING:,0AH,0DH,$ STR2 DB THE RESULT IS:,0AH,0DH,$ STRING DB 100 DUP(?) MENU1 DB WELCOME SUNLIFEI DE DESIGN $DATA ENDSSHUCHU MACRO OP1,OP2,OP3,OP4,OP5,OP6 %循环输出,用于初始化界面周边的笑脸符%MOV CX,0MOV DH,OP1 %起始行MOV DL,OP2 %起始列%OP6:

16、MOV AH,02HMOV BH,01HINT 10HPUSH CXMOV AH,0AHMOV AL,OP3 %要显示的字符MOV CX,01HMOV BH,00HINT 10HPOP CXINC CXINC OP4 %这里指的要循环输出的是行还是列%CMP CX,OP5 %循环次数%JNE OP6ENDMMENU MACRO OP1,OP2,OP3 %用于屏幕上文字的输出%MOV CX,0%1,2为起始输出的行、列,3为字符串的地址%MOV AH,02HMOV BH,00HMOV DH,OP1MOV DL,OP2INT 10HLEA DX,OP3MOV AH,9INT 21H ENDMCLS

17、 MACRO OP1,OP2,OP3,OP4 %用于清屏,分别是起止的行和列 MOV AH,6MOV BH,17HMOV AL,0MOV CH,OP1MOV CL,OP2MOV DH,OP3MOV DL,OP4INT 10HMOV AH,2 MOV BH,0MOV DH,0MOV DL,0INT 10HENDM%定义堆栈段%STACK SEGMENT DB 100 DUP(?)STACK ENDS%定义代码段%CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK%主程序设计%START:MOV AX,DATA %将数据段地址传送给DS% MOV DS,AX

18、MOV AX,STACK %将堆栈段地址传送给SS% MOV SS,AX MOV SI,0 %源字符串首地址置0% MOV AH,9 %调用DOS的09H功能号功能,将输入的字符串显示% LEA DX,STR1 %将STR1的有效地址传送给DX% INT 21H %调用DOS的21H中断% XOR DH,DH %异或将DH清零%LOOP1:MOV AH,01H %调用DOS的01H功能号功能,带回显的键盘输入% INT 21H CALL JUDGE %调用JUDGE子程序% JC DONE %进位标志CF=1时跳转% INC SI %SI加1% JMP LOOP1 %无条件跳转%DOWN: C

19、MP DH,1 %将DH与1比较% JE NEXT %DH=1时跳转% DEC DI %DI减1%NEXT: MOVSTRING+SI+1,$ %传送指令% CALL CHANGE %调用CHANGE子程序% MOV AH,02H %调用DOS的02H功能号功能,将输入的字符串显示MOV DL,0DH %将字符串结束前的回车显示回来% INT 21H %调用DOS的21H中断% MOV DL,0AH %将字符串结束前换行显示出来% INT 21H %调用DOS的21H中断% MOV AH,09H %调用DOS的09H功能号功能,将输入的字符串显示% LEA DX,STR2 %将STR2的有效地

20、址传送给DX% INT 21H %调用DOS的21H中断% MOV AH,09H %调用DOS的09H功能号功能,将输入的字符串显示% LEA DX,STRING %将STRING的有效地址传送给DX% INT 21H %调用DOS的21H中断% MOV AH,01H %调用DOS的01H功能号功能,带回显的键盘输入% INT 21H MOV AH,4CH %结束程序% INT 21H%空格和“.”判断子程序%JUDGE PROC CMP AL,20H %将输入的数据与空格键比较% JNZ NEXT1 %输入数据不为空格键时跳转到NEXT1% MOV DI,SI %输入数据为空格键时传送数据%

21、 MOV DH,01H %传送指令%NEXT1: CMP AL,2EH %将输入的数据与“.”比较% JNZ NEXT2 %输入数据不为“.”时跳转NEXT2% STC JMP NEXT3 %跳转到NEXT3%NEXT2: CLC %标志位CF清零%NECT3: MOVSTRING+SI,AL %传送指令% RET %返回指令%JUDGE ENDP%字符串反向屏幕显示子程序%CHANGE PROC PUSH AX %堆栈操作保护现场% PUSH BX PUSH CX PUSH SI PUSH DI MOV AX,SI %传送指令% SUB AX,DI %将两者相加结果送AX% DEC AX %

22、AX加1% MOV BL,02H %传送指令% DIV BL %AX除以2% MOV CL,AL %传送指令% XOR CH,CH %将CH清零% SUB SI,CX %两数相减将结果送SI% ADD DI,CX %将两者相加结果送AX% LOOP2: MOV AL,STRING+SI %传送指令% XCHG STRING+DI,AL %将两者数据交换% MOV STRING+SI,AL %传送指令% DEC DI %DI减1% INC SI %SI加1% LOOP LOOP2 %循环LOOP2过程% POP DI %恢复现场% POP SI POP CX POP BX POP AX RETC

23、HANGE ENDP %子程序结束%CODE ENDS %代码结束%END START4 程序调试4.1汇编语言源程序的汇编、连接和装入运行汇编语言源程序编写好以后,并不能直接运行,必须在汇编环境下对源程序进行汇编和连接,生成可执行的文件后才能运行程序。一般需经过4个步骤。编辑:首先通过编辑器输入、建立汇编源程序(文件名.ASM),并以ASCII码的形式存入内存缓冲区。汇编:将汇编源程序(文件名.ASM)经汇编程序翻译后生成扩展名为.OBJ的目标文件、扩展名为.LST的列表文件和扩展名为.CRF的交叉索引文件。通常目标文件时必须建立的,他包含了程序中所有机器代码。列表文件包含了源程序、目标代码

24、、注释等全部信息,列表文件可供打印。可共分调试检查用。交叉索引文件时用来了解源程序中的符号定义及引用情况的。后面两个文件不是必需的,可通过汇编时的命名加以选择,打入“回车键”就是不需要。连接:将.OBJ文件(一个或多个)与系统提供的.LIB库文件连接,形成.EXE可执行文件和.MAP内存分配文件。连接后的壳执行文件(.EXE)是可以运行的文件。调试:对.EXE文件进行调试。4.2调试过程与调试结果及分析通过以上步骤在MF2KI软件中进行调试,首先输入源程序,点击汇编后,检查是否存在错误,修改好所有出现的错误后,当输入“abcdefgh$ xyz .n”后,其结果如下,由于输入字符存在“$”,D

25、OS系统的INT 21H下的09H字功能以“$”为结束符,自动结束字符串的显示,故当输入”.”后并未终止输入字符。图4 有“$”存在时的调试结果当输入字符“abcdefg xyz xyzabcdefgh.”时,其结果如下。当输入字符有“.”时终止字符输入 ,由于存在空格键故输入字符中空格键前的字符串以正序显示,最后一个空格键后的字符串以反序显示在屏幕上。图5 有空格键时的调试结果当输入字符“abcdefgxyzxyzabcdefgh.”时,其结果如下。当输入字符有“.”时终止字符输入 ,由于不存在空格键故输入字符串以反序显示在屏幕上。图6 有空格键时的调试结果通过以上调试及分析所编写的程序正确

26、能满足程序要求。5 设计小结此次程序设计主要包括调用DOS系统的INT 21H功能从键盘输入字符然后显示字符,通过调用相应的字程序判断输入的字符是否为空格和“.”,当输入“.”时终止字符的输入,配合调用另一子程序来实现空格前的字符串在屏幕向以正序显示,“.”前的字符串在屏幕上以反序显示,通过编写相应的主程序和JUDGE、CHANGE两个子程序,经反复调试、运行及修改得出满足要求的程序,从而完成此次课程设计。6 心得体会微型计算机原理作为电子信息类本科生教学的主要基础课之一,课程紧密结合电子信息类的专业特点,围绕微型计算机原理和应用主题,系统介绍微型计算机的基本知识,基本组成,体系结构和工作模式

27、,从而使学生能较清楚地了解微机的结构与工作流程,建立起系统的概念。这次微机原理课程设计历时两个星期,在整整两星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。以前在上课的时候,老师经常强调在写一个程序的时候,一定要事先把程序原理方框图化出来,但是我开始总觉得这样做没必要,很浪费时间。但是,这次课程设计完全改变了我以前的那种错误的认识,以前我接触的那些程序都是很短、很基础的,但是在课程设计中碰到的那些需要很多代码才能完成的任务,画程序方框图是很有必要的。因为通过程序方框图,在做设计的过程中,我们每一步要做

28、什么,每一步要完成什么任务都有一个很清楚的思路,而且在程序测试的过程中也有利于查错。其次,以前对于编程工具的使用还处于一知半解的状态上,但是经过一段上机的实践,对于怎么去排错、查错,怎么去看每一步的运行结果,怎么去了解每个寄存器的内容以确保程序的正确性上都有了很大程度的提高。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足

29、之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。在这次课程设计中,我真正体会到了合作的重要性,遇到很多的问题,当我看书查看资料不能解决时,去找同学讨论收获很大,可以使很多问题迎刃而解,知道问题最终解决。不可否认,本程序存在很多不足和缺点,但通过这次课程设计找出了自己学习上的不足,对以后的学习和生活有很多指导意义,我相信在以后的学习生活工作中我会努力克服这些不足,取得不断的进步。参考文献1 陆红伟. 微机原理实验与课程设计指导书. 中国电力出版社 . 2006. 5 2 吕淑萍. 微型计算机原理及应用. 哈尔滨工程大学出版社 . 2004. 63 戴梅萼. 微型计算机技术及应用. 清华大学出版社 . 2005. 24 张小鸣. 微机原理与接口技术. 清华大学出版社 . 2009.65 姚燕南. 微型计算机原理. 西安电子科技大学出版社 . 2005.917

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号