颜昊昀键盘录入转换程序设计.docx

上传人:b****2 文档编号:2713738 上传时间:2023-05-04 格式:DOCX 页数:23 大小:184.36KB
下载 相关 举报
颜昊昀键盘录入转换程序设计.docx_第1页
第1页 / 共23页
颜昊昀键盘录入转换程序设计.docx_第2页
第2页 / 共23页
颜昊昀键盘录入转换程序设计.docx_第3页
第3页 / 共23页
颜昊昀键盘录入转换程序设计.docx_第4页
第4页 / 共23页
颜昊昀键盘录入转换程序设计.docx_第5页
第5页 / 共23页
颜昊昀键盘录入转换程序设计.docx_第6页
第6页 / 共23页
颜昊昀键盘录入转换程序设计.docx_第7页
第7页 / 共23页
颜昊昀键盘录入转换程序设计.docx_第8页
第8页 / 共23页
颜昊昀键盘录入转换程序设计.docx_第9页
第9页 / 共23页
颜昊昀键盘录入转换程序设计.docx_第10页
第10页 / 共23页
颜昊昀键盘录入转换程序设计.docx_第11页
第11页 / 共23页
颜昊昀键盘录入转换程序设计.docx_第12页
第12页 / 共23页
颜昊昀键盘录入转换程序设计.docx_第13页
第13页 / 共23页
颜昊昀键盘录入转换程序设计.docx_第14页
第14页 / 共23页
颜昊昀键盘录入转换程序设计.docx_第15页
第15页 / 共23页
颜昊昀键盘录入转换程序设计.docx_第16页
第16页 / 共23页
颜昊昀键盘录入转换程序设计.docx_第17页
第17页 / 共23页
颜昊昀键盘录入转换程序设计.docx_第18页
第18页 / 共23页
颜昊昀键盘录入转换程序设计.docx_第19页
第19页 / 共23页
颜昊昀键盘录入转换程序设计.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

颜昊昀键盘录入转换程序设计.docx

《颜昊昀键盘录入转换程序设计.docx》由会员分享,可在线阅读,更多相关《颜昊昀键盘录入转换程序设计.docx(23页珍藏版)》请在冰点文库上搜索。

颜昊昀键盘录入转换程序设计.docx

颜昊昀键盘录入转换程序设计

目录

摘要Ⅰ

1设计概述1

2程序设计相关知识介绍2

2.1DOS及其功能调用2

2.2ASCII码6

3程序设计7

3.1主程序设计7

3.2JUDGE子程序设计9

3.3CHANGE子程序设计9

3.4程序编写10

4程序调试16

4.1汇编语言源程序的汇编、连接和装入运行16

4.2调试过程与调试结果及分析16

5设计小结17

心得体会18

参考文献19

 

1设计概述

此次课程设计为键盘录入转换程序设计,满足以下要求:

通过键盘连续录入可显示多个字符,遇“.”时终止;字符串以空格和“.”分隔,输入完成后,空格前的字符串以正向在屏幕上显示,“.”前的字符串以反向在屏幕上显示。

程序设计主要包括调用DOS系统的INT21H功能从键盘输入字符然后显示字符,通过调用相应的字程序判断输入的字符是否为空格和“.”,当输入“.”时终止字符的输入,配合调用另一子程序来实现空格前的字符串在屏幕向以正序显示,“.”前的字符串在屏幕上以反序显示,从而完成此次课程设计。

由于本程序设计大量使用调用DOS系统的INT21H功能,本报告书将首先介绍DOS系统的INT21H功能,然后进行详细的程序设计。

 

2程序设计相关知识介绍

2.1DOS及其功能调用

DOS操作系统从两个层次上向用户提供与操作系统的接口,普通用户可以通过键盘命令在命令处理模块层次上和操作系统互交,高级用户可以通过软件中断的方式在DOS的较低层次上合操作系统交互,包括DOS中断调用和BIOS功能调用。

DOS操作系统将输入输出管理程序编制成一系列子程序,不仅系统可以使用,用户也可以像调用子程序一样方便的调用它们。

这些子程序或常驻内存,或固化在系统的ROM中。

目前DOS常用的9类中断(20H~27H和2FH)分为两种:

1.DOS专用中断:

INT22H、INT23H和INT24H,用户不能使用。

2.DOS可调用中断:

INT20H、INT27H(程序退出)、INT21H(系统功能调用)、INT25H、INT26H(磁盘R/W中断)、INT2FH(假脱机打印文件)。

DOS系统功能调用的方式是通过执行软中断指令INT21H来实现的。

当寄存器AX中设置不同的值时,该指令将完成不同的功能。

在21H类型所对应的中断程序中包含了一系列最常用的功能子程序,这些子程序分别分别实现外部设备管理功能、文件读写和管理功能、目录管理功能等,所以21H类型中断几乎包括了整个系统的功能,系统功能调用的名称也就由此而来。

DOS启动成功后,INT21H的中断向量(中断处理程序首地址)被初始化在中断向量表中向量地址为84H到87H的4个字节单元内。

所有系统功能调用的各自功能的介绍见表1,有些系统调用功能简单,不需要设置入口参数,或者说没有出口参数。

详细的功能、入口参数、出口参数要求可见专门的手册。

通常,默认标准设备为:

标准输入设备(控制台输入)是键盘;输出设备(控制台输出)是显示器;标准辅助设备是第一个RS232串口异步通讯接口,打印输出为第一个并行接口等。

 

表1字符I/O系统功能调用

功能号

功能

入口参数

出口参数

01H

带回显的键盘输入

AL=输入字符

03H

串行口输入字符

AL=输入字符

06H

直接控制台I/O

DL=FF(输入)

DL=字符(输出)

AL=输入字符

07H

直接控制台输入(无回显)

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

功能描述:

从标准输入设备(如:

键盘)读入一个字符。

该中断在处理过程中将一直处于等待状态直到有字符可读为止。

该输入还可被重定向,如果这样做,则无法判断文件是否已到文件尾。

入口参数:

AH=01H,过滤掉控制字符,并回显。

 AH=07H,不过滤掉控制字符,不回显。

 AH=08H,过滤掉控制字符,不回显。

出口参数:

AL=输入字符的ASCII码。

例如:

读键盘输入一个字符并且回显的程序。

MOVAH,1

INT21H

2.功能02H

功能描述:

向标准输出设备(如:

屏幕)输出一个字符。

该输出还可被重定向,如果这样做,则将无法判断磁盘是否满。

入口参数:

AH=02H,DL=待输出字符的ASCII码。

出口参数:

无。

其基本格式如下:

MOVAH,2

MOVDL,要显示的字符的ASCII

INT21H

3.功能03H

功能描述:

从辅助设备读入一个字符,该辅助设备的缺省值为COM1。

入口参数:

AH=03H。

出口参数:

AL=读入字符的ASCII码。

4.功能04H

功能描述:

向辅助设备输出一个字符,该辅助设备的缺省值为COM1

入口参数:

AH=04H,DL=待输出字符的ASCII码。

出口参数:

无。

5.功能06H

功能描述:

控制台(如:

键盘、屏幕)输入/输出。

如果输入/输出操作被重定向,那么,将无法判断文件是否已到文件尾,或磁盘已满。

入口参数:

AH=06H,DL=输入/输出功能选择。

出口参数:

若DL=00H-FEH,则此功能为输出,DL为待输出字符的ASCII码;若DL=0FFH,则此功能为输入,此时:

若ZF=1,则无字符可读,否则,AL=读入字符的ASCII码。

6.功能09H

功能描述:

输出一个字符串到标准输出设备上。

如果输出操作被重定向,那么,将无法判断磁盘已满。

入口参数:

AH=09H,DS:

DX=待输出字符的地址,待显示的字符串以’$’作为其结束标志,否则会引起屏幕混乱。

显示时在字符串结束前加上回车及换行的ASCII码0DH和0AH,可使光标自动换行。

出口参数:

无。

其基本格式如下:

MOVAH,9

LEADX,<字符串>

INT21H

7.功能0AH

功能描述:

从标准输入设备上读入一个字节字符串,遇到“回车键”结束输入(输入的字符在标准的输出设备上有回显)。

如果该输入操作被重定向,那么,将无法判断文件是否已到文件尾。

入口参数:

AH=0AH,DS:

DX=存放输入字符的起始地址。

第一个字节为缓冲区的最大容量,可认为是入口参数;第二个字节为实际输入的字符数(不包括回车键),可看作出口参数;从第三个字节开始存放实际输入的字符串;字符串以回车键结束,回车符是接受的最后一个字符;若输入的字符数超过缓冲区的最大容量,则多出的部分被丢弃,系统并发出响铃,直到输入“回车”键才结束输入。

出口参数:

无。

例如:

用DOS系统调用0AH从键盘输入一个字符串

STR1DB10,?

10DUP(?

……

LEADX,STR1

MOVAH,OAH

INT21H

8.功能0BH

功能描述:

检查标准输入设备上是否有字符可读,该输入操作可被重定向。

入口参数:

AH=0BH。

出口参数:

AL=00H——无字符可读;FFH——有字符可读。

9.功能0CH

功能描述:

清空当前的标准输入缓冲区,再读入字符。

其输入操作可被重定向。

入口参数:

AH=0CH,AL=01H、06H、07H、08H或0AH。

出口参数:

若入口参数AL为0AH,则DS:

DX=存放输入字符的起始地址,否则,出口参数AL=输入字符的ASCII码。

2.2ASCII码

由于计算机硬件只能识别二进制数,字母和字符也必须使用二进制编码来表示。

目前用来表示字母和字符的二进制编码方式有很多种,最常用的是ASCII码。

ASCII码又称美国信息交换标准码(AmericanStandardCodeforInformationInterchange),多用于输入输出设备(如电传打字机),是7位二进制编码。

它总共可表示128个符号,包括26个英文大写字母,26个英文小写字母,0~9共十个数字,32个通用控制字符和34个专用字符。

在计算机中用一个字节存放字符编码,故在ASCII的最高位补0。

因此ASCII可表示8位二进制或两位16进制数。

本设计所需要的“.”的ASCII码为2EH,空格的ASCII码为20H,回车及换行的ASCII码0DH和0AH。

 

3程序设计

3.1主程序设计

程序设计主要包括调用DOS系统的INT21H功能从键盘输入字符然后显示字符,通过调用相应的字程序判断输入的字符是否为空格和“.”,当输入“.”时终止字符的输入,配合调用另一子程序来实现空格前的字符串在屏幕向以正序显示,“.”前的字符串在屏幕上以反序显示。

由于需要通过键盘连续录入可显示的字符,需要调用DOS系统的INT21H一系列子功能从键盘输入字符然后显示出来,最开始进行初始化,首先调用09H号子功能从键盘输入“PLEASEINPUTTHESTRING:

”提示输入一连串字符,以回车和换行作为结束自动切入另一行从而从键盘输入字符;通过调用JUDGE子程序对输入的字符进行判断,判断其是否为空格键和”.”键,当遇到空格时继续输入字符,遇到“.”时终止字符输入。

同时根据JUDGE子程序的返回值作为判断调用CHANGE子程序,当输入字符没有空格时字符全部以反序输出显示在屏幕上,当输入字符有空格时对于空格前的字符以正序输出显示在屏幕上,对于“.”前的字符以反序输出显示在屏幕上。

另外,考虑到若输入字符存在“$”,DOS系统的INT21H下的09H字功能以“$”为结束符,自动结束字符串的显示,故当输入”.”后很可能并未终止输入字符,这将在程序调试时得出结论。

主程序的程序流程图如下。

 

偏移地址指针SI清零

INT21H的09号子功能显示STR1字符串

DH清零

 

DH=1?

‘$’传送到[STRING+SI+1]

调用CHANGE子程序

 

图1主程序设计流程图

3.2JUDGE子程序设计

对输入的字符首先判断其是否为空格键,若为空格键则将DH和CF置1,并且将数输入的字符送到STRING中,若不为空格键则继续判断其是否为“.”键,则将CF置0,将其值返回后终止输入字符。

其程序流程图如下。

 

 

3.3CHANGE子程序设计

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

子程序流程图如下。

断点数据压入堆栈

设置SI和DI初值

将[STRING+SI]传送到AL

将[STRING+DI]与AL数据交换

将AL传送到[STRING+SI]

SI减1,DI加1

 

断点数据出堆栈

图3CHANGE子程序流程图

3.4程序编写

根据分析和程序流程图,编写以下程序。

%定义数据段%

DATASEGMENT

STR1DB‘PLEASEINPUTTHESTRING:

’,0AH,0DH,’$’

STR2DB‘THERESULTIS:

’,0AH,0DH,’$’

STRINGDB100DUP(?

MENU1DB'WELCOMESUNLIFEIDEDESIGN$'

DATAENDS

SHUCHUMACROOP1,OP2,OP3,OP4,OP5,OP6%循环输出,用于初始化界面周边的笑脸符%

MOVCX,0

MOVDH,OP1%起始行

MOVDL,OP2%起始列%

OP6:

MOVAH,02H

MOVBH,01H

INT10H

PUSHCX

MOVAH,0AH

MOVAL,OP3%要显示的字符

MOVCX,01H

MOVBH,00H

INT10H

POPCX

INCCX

INCOP4%这里指的要循环输出的是行还是列%

CMPCX,OP5%循环次数%

JNEOP6

ENDM

MENUMACROOP1,OP2,OP3%用于屏幕上文字的输出%

MOVCX,0%1,2为起始输出的行、列,3为字符串的地址%

MOVAH,02H

MOVBH,00H

MOVDH,OP1

MOVDL,OP2

INT10H

LEADX,OP3

MOVAH,9

INT21H

ENDM

CLSMACROOP1,OP2,OP3,OP4%用于清屏,分别是起止的行和列

MOVAH,6

MOVBH,17H

MOVAL,0

MOVCH,OP1

MOVCL,OP2

MOVDH,OP3

MOVDL,OP4

INT10H

MOVAH,2

MOVBH,0

MOVDH,0

MOVDL,0

INT10H

ENDM

%定义堆栈段%

STACKSEGMENT

DB100DUP(?

STACKENDS

%定义代码段%

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

%主程序设计%

START:

MOVAX,DATA%将数据段地址传送给DS%

MOVDS,AX

MOVAX,STACK%将堆栈段地址传送给SS%

MOVSS,AX

MOVSI,0%源字符串首地址置0%

MOVAH,9%调用DOS的09H功能号功能,将输入的字符串显示%

LEADX,STR1%将STR1的有效地址传送给DX%

INT21H%调用DOS的21H中断%

XORDH,DH%异或将DH清零%

LOOP1:

MOVAH,01H%调用DOS的01H功能号功能,带回显的键盘输入%

INT21H

CALLJUDGE%调用JUDGE子程序%

JCDONE%进位标志CF=1时跳转%

INCSI%SI加1%

JMPLOOP1%无条件跳转%

DOWN:

CMPDH,1%将DH与1比较%

JENEXT%DH=1时跳转%

DECDI%DI减1%

NEXT:

MOV[STRING+SI+1],‘$’%传送指令%

CALLCHANGE%调用CHANGE子程序%

MOVAH,02H%调用DOS的02H功能号功能,将输入的字符串显示

MOVDL,0DH%将字符串结束前的回车显示回来%

INT21H%调用DOS的21H中断%

MOVDL,0AH%将字符串结束前换行显示出来%

INT21H%调用DOS的21H中断%

MOVAH,09H%调用DOS的09H功能号功能,将输入的字符串显示%

LEADX,STR2%将STR2的有效地址传送给DX%

INT21H%调用DOS的21H中断%

MOVAH,09H%调用DOS的09H功能号功能,将输入的字符串显示%

LEADX,STRING%将STRING的有效地址传送给DX%

INT21H%调用DOS的21H中断%

MOVAH,01H%调用DOS的01H功能号功能,带回显的键盘输入%

INT21H

MOVAH,4CH%结束程序%

INT21H

%空格和“.”判断子程序%

JUDGEPROC

CMPAL,20H%将输入的数据与空格键比较%

JNZNEXT1%输入数据不为空格键时跳转到NEXT1%

MOVDI,SI%输入数据为空格键时传送数据%

MOVDH,01H%传送指令%

NEXT1:

CMPAL,2EH%将输入的数据与“.”比较%

JNZNEXT2%输入数据不为“.”时跳转NEXT2%

STC

JMPNEXT3%跳转到NEXT3%

NEXT2:

CLC%标志位CF清零%

NECT3:

MOV[STRING+SI],AL%传送指令%

RET%返回指令%

JUDGEENDP

%字符串反向屏幕显示子程序%

CHANGEPROC

PUSHAX%堆栈操作保护现场%

PUSHBX

PUSHCX

PUSHSI

PUSHDI

MOVAX,SI%传送指令%

SUBAX,DI%将两者相加结果送AX%

DECAX%AX加1%

MOVBL,02H%传送指令%

DIVBL%AX除以2%

MOVCL,AL%传送指令%

XORCH,CH%将CH清零%

SUBSI,CX%两数相减将结果送SI%

ADDDI,CX%将两者相加结果送AX%

LOOP2:

MOVAL,[STRING+SI]%传送指令%

XCHG[STRING+DI],AL%将两者数据交换%

MOV[STRING+SI],AL%传送指令%

DECDI%DI减1%

INCSI%SI加1%

LOOPLOOP2%循环LOOP2过程%

POPDI%恢复现场%

POPSI

POPCX

POPBX

POPAX

RET

CHANGEENDP%子程序结束%

CODEENDS%代码结束%

ENDSTART

 

4程序调试

4.1汇编语言源程序的汇编、连接和装入运行

汇编语言源程序编写好以后,并不能直接运行,必须在汇编环境下对源程序进行汇编和连接,生成可执行的文件后才能运行程序。

一般需经过4个步骤。

编辑:

首先通过编辑器输入、建立汇编源程序(文件名.ASM),并以ASCII码的形式存入内存缓冲区。

汇编:

将汇编源程序(文件名.ASM)经汇编程序翻译后生成扩展名为.OBJ的目标文件、扩展名为.LST的列表文件和扩展名为.CRF的交叉索引文件。

通常目标文件时必须建立的,他包含了程序中所有机器代码。

列表文件包含了源程序、目标代码、注释等全部信息,列表文件可供打印。

可共分调试检查用。

交叉索引文件时用来了解源程序中的符号定义及引用情况的。

后面两个文件不是必需的,可通过汇编时的命名加以选择,打入“回车键”就是不需要。

连接:

将.OBJ文件(一个或多个)与系统提供的.LIB库文件连接,形成.EXE可执行文件和.MAP内存分配文件。

连接后的壳执行文件(.EXE)是可以运行的文件。

调试:

对.EXE文件进行调试。

4.2调试过程与调试结果及分析

通过以上步骤在MF2KI软件中进行调试,首先输入源程序,点击汇编后,检查是否存在错误,修改好所有出现的错误后,当输入“abcdefgh$xyz.n”后,其结果如下,由于输入字符存在“$”,DOS系统的INT21H下的09H字功能以“$”为结束符,自动结束字符串的显示,故当输入”.”后并未终止输入字符。

图4有“$”存在时的调试结果

当输入字符“abcdefgxyzxyzabcdefgh.”时,其结果如下。

当输入字符有“.”时终止字符输入,由于存在空格键故输入字符中空格键前的字符串以正序显示,最后一个空格键后的字符串以反序显示在屏幕上。

图5有空格键时的调试结果

当输入字符“abcdefgxyzxyzabcdefgh.”时,其结果如下。

当输入字符有“.”时终止字符输入,由于不存在空格键故输入字符串以反序显示在屏幕上。

图6有空格键时的调试结果

通过以上调试及分析所编写的程序正确能满足程序要求。

5设计小结

此次程序设计主要包括调用DOS系统的INT21H功能从键盘输入字符然后显示字符,通过调用相应的字程序判断输入的字符是否为空格和“.”,当输入“.”时终止字符的输入,配合调用另一子程序来实现空格前的字符串在屏幕向以正序显示,“.”前的字符串在屏幕上以反序显示,通过编写相应的主程序和JUDGE、CHANGE两个子程序,经反复调试、运行及修改得出满足要求的程序,从而完成此次课程设计。

心得体会

在画家眼里,设计是一幅清明上河图或是一幅向日葵;在建筑师眼中,设计是昔日鎏金般的圆明园或是今日一塑自由女神像;在电子工程师心中,设计是贝尔实验室的电话机或是华为的程控交换机。

凡此种种,但凡涉及设计都是一件美好的事情,因为她能给人以美的幻想,因为她能给人以金般财富,因为她能给人以成就之感,更为现实的是她能给人以成长以及成长所需的营养,而这种营养更是一种福祉,一辈子消受不竭享用不尽。

我就是以此心态对待此次《微机原理》课程设计的,所谓“态度决定一切”,于是偶然又必然地收获了诸多,概而言之,大约以下几点:

温故而知新。

课程设计发端之始,思绪全无,举步维艰,对于理论知识学习不够扎实的我深感“书到用时方恨少”,于是想起圣人之言“温故而知新”,便重拾教材与实验手册,对知识系统而全面进行了梳理,遇到难处先是苦思冥想再向同学请教,终于熟练掌握了基本理论知识,学会了如何思考的思维方式,找到了设计的灵感。

思路即出路。

当初没有思路,诚如举步维艰,茫茫大地,不见道路。

在对理论知识梳理掌握之后,茅塞顿开,柳暗花明,思路如泉涌,高歌“条条大路通罗马”。

顿悟,没有思路便无出路,原来思路即出路。

实践出真知。

文革之后,关于真理的大讨论最终结果是“实践是检验真理的唯一标准”,自从耳闻以来,便一直以为马克思主义中国化生成的教条。

时至今日,课程设计基本告成,才切身领悟“实践是检验真理的唯一标准”,才明晓实践出真知。

创新求发展。

“创新”目前在我国已经提升到国家发展战略地位,足见“创新”的举足轻重。

而在DVD产品上市之初及以后相当长时间内,原本前景看好的国内市场却使国内DVD生产商无利可图,只因核心技术受制于人,每台售出总要交付高额专利技术使用费。

因此,我们在课程设计中不忘在小处创新,未必是创新技术,但凡创新思维亦可,未必成功,只要实现创新思维培育和锻炼即可。

过而能改,善莫大焉。

至善至美,是人类永恒的追求。

但是,不从忘却“金无足赤,人无完人”,我们换种思维方式,去恶亦是至善,改错亦为至美。

在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获取。

最终的仿真环节,本身就是在践行“过而能改,善莫大焉”的知行观。

最后,我想我必须对我的指导老师说一声——谢谢!

参考文献

[1]陆红伟.微机原理实验与课程设计指导书.中国电力出版社.2006.5

[2]吕淑萍.微型计算机原理及应用.哈尔滨工程大学出版社.2004.6

[3]戴梅萼.微型计算机技术及应用.清华大学出版社.2005.2

[4]张小鸣.微机原理与接口技术.清华大学出版社.2009.6

[5]姚燕南.微型计算机原理.西安电子科技大学出版社.2005.9

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

当前位置:首页 > 考试认证 > 司法考试

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2