字符查找及转换课程设计说明书.docx

上传人:b****3 文档编号:4639096 上传时间:2022-12-07 格式:DOCX 页数:21 大小:243.82KB
下载 相关 举报
字符查找及转换课程设计说明书.docx_第1页
第1页 / 共21页
字符查找及转换课程设计说明书.docx_第2页
第2页 / 共21页
字符查找及转换课程设计说明书.docx_第3页
第3页 / 共21页
字符查找及转换课程设计说明书.docx_第4页
第4页 / 共21页
字符查找及转换课程设计说明书.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

字符查找及转换课程设计说明书.docx

《字符查找及转换课程设计说明书.docx》由会员分享,可在线阅读,更多相关《字符查找及转换课程设计说明书.docx(21页珍藏版)》请在冰豆网上搜索。

字符查找及转换课程设计说明书.docx

字符查找及转换课程设计说明书

学号:

 

课程设计

 

题目

字符转换及查找汇编语言

程序设计

学院

自动化

专业

自动化

班级

姓名

指导教师

 

2012

1

13

课程设计任务书

学生姓名专业班级

指导教师工作单位

课程设计题目:

字符转换及查找汇编语言程序设计

初始条件:

Ø采用16位微处理器8086CPU以及86系列微型计算机的指令系统;

软件设计平台为多功能微型计算机实验软件MFS中的微机原理实验集成环

境MF2KP,仿真设计平台为Proteus软件。

要求完成的主要任务:

设计汇编语言程序,实现字符转换及查找的功能,具体功能要求如下:

(1)屏幕提示输入字符串;

(2)将字符进行大小写变换(全部大写或小写)并显示;

(3)屏幕提示输入待查找字符;

(4)显示查询结果:

如果查找到,则显示该字符在字符串中的位置;若没有

则显示该字符不存在。

根据功能要求绘制程序流程图、编写完整的汇编语言程序并上机调试:

撰写课程设计说明书。

课程设计说明书的撰写格式如下:

(1)设计说明书包括封面、任务书(指导老师提供)、正文、参考文献(3~

5篇)、附录(程序清单,要求有注释)、成绩评定表(指导老师提供)。

(2)说明书正文包含总体方案论证(功能分析、系统连接图设计或算法说

明);程序流程图设计及其说明、软件设计关键问题说明;程序调试说

明、结果记录及分析;课程设计收获及心得体会。

(3)同一选题若为合作完成,设计说明书中需注明本人承担的设计部分。

时间安排:

(本次课程设计时间:

2012年1月4日-13日,历时一周半)

周次具体时间设计内容

第一周

1月4日指导老师就课程设计内容、设计要求、设计进度安排、评分标准等

作具体介绍。

强调课程设计期间纪律要求。

学生确定选题,明确设计内容及要求。

1月5日根据选题查阅资料,完成方案的初步设计,包括系统原理及算法。

1月6日绘制系统硬件接线图(接口应用设计题必须)以及程序流程图。

第二周

1月9日学生根据程序流程图,编写程序代码。

1月10日仿真调试、修改。

1月11日

学生结合程序流程图解释说明设计思路与算法;指导老师检查程序

运行效果,并就结果进行评分。

1月12日学生撰写课程设计说明书。

1月13日上交课程设计说明书,以及答辩。

指导教师签名:

年月日

系主任(或责任教师)签名:

年月日

目录

引言1

1.设计意义及要求2

1.1设计意义2

1.2设计要求2

2.方案分析3

3.程序设计4

3.1数据区定义4

3.2提示语句输出、字符输入及选择部分5

3.21提示语句输出5

3.22字符及字符串的输入5

3.23选择部分5

3.3大小写转换部分6

3.4查询部分8

3.5退出部分11

4.运行结果分析12

4.1程序运行结果12

4.2调试过程15

结束语16

参考文献17

附录18

引言

计算机的诞生是人类历史上的一件大事,半个多世纪来计算机得到了巨大的发展,从小型机到巨型机,从台式到手提电脑,从每秒5000次的定点算术运算到每秒几十万亿次的浮点算术运算,计算机实现了一代接一代的跨越性飞跃,微机原理与接口技术让我们更深入了解计算机的内部结构及每一细小组成,汇编语言更让我们对C语言等高级计算机语言有了更为基础的认识,从计算机的基本知识如运算基础和进制转换等到8086的系统结构,再到其指令系统、寻址方式、数据类型以及汇编语言程序设计等等,还有存储器的原理及接口技术和可编程芯片等等,这些都让我们获益匪浅。

而微机原理与接口技术的课程设计则是让我们巩固书本所学知识的重要平台,设计中我们通过对系统方案的整体分析,进而画出流程图,编制对应的程序,在实验平台MF2KP或Emu8086上进行调试,从而得出最终程序,其中我们不仅很好的锻炼了自己的动手操作能力,更对书本所学有了进一步的升华。

设计过程中使用的Emu8086是结合了一个先进的原始编辑器、组译器、反组译器、具除错功能的软件模拟工具,还有一个循序渐进的指导工具,这对刚开始学组合语言的人是一个很有用的工具,它能在模拟器中一步一步的编译程序码并执行,视觉化的工作环境让它的使用变得更为容易,这个软件对汇编语言的学习有很大的帮助,在设计中起到重要作用。

 

字符转换及查找汇编语言程序设计

1.设计意义及要求

1.1设计意义

本次设计旨在帮助学生进一步巩固书本所学的微机接口及技术的知识,促使其学会分析设计命题,自主思考,独立设计个人方案,以达到强化知识,训练思维,激发创造力,提高实践动手能力的目的。

设计后预期实现字符串的输入,并按照要求转换成大写或者小写,并进行选择是否查询,如若需要查询,则自动查找输入的待查询字母,并显示转换与查询结果,同时能实现多次查询与输入,最后能在不需工作时按Q或q键退出程序运行界面。

1.2设计要求

1)屏幕提示输入字符串;

2)将字符进行大小写变换(全部大写或小写)并显示;

3)屏幕提示输入待查找字符;

4)显示查询结果:

如果查找到,则显示该字符在字符串中的位置;若没有

则显示该字符不存在。

 

2.方案分析

首先分析设计要求,要求需要屏幕提示输入字符串,所以首先考虑使用DOS调用中的10号调用,该调用具有多字符输入的功能;而针对第一个功能大小写变换,我们首先考虑字母A-Z的ASCII码为41H到5AH,a-z的ASCII码为61H到7AH,不难发现每个字母的大小写的ASCII码之间相差为20H,所以可以通过对ASCII的值加减20H来实现大小写的转换;对于第三个功能我们采用DOS调用的1号功能调用,该功能为单字符输入;对于最后一项要求,我们采用CX计数,并用CMP指令对存入数据区的每个字符与要求输入的字符进行比较,若相同则讲此时的CX值储存在另一数据区,不同则继续累加进行下一字符的比较,直至结束,最后输出所存的每一个CX的值,这就实现了查询功能。

针对以上的方案分析,我们可以得到整体程序的流程图如图2-1所示:

图2-1主程序流程图

3.程序设计

根据图2-1的流程图我们可进行如下的程序设计,首先为了整个程序的清晰明朗,我们考虑将程序分为五大部分:

1.数据区定义部分;2.提示语句输出、字符输入及选择部分;3.大小写转换部分;4.查询部分;5.退出部分。

3.1数据区定义

由于设计要求中需要输入字符串、输出提示语句以及转换和查询结果,所以必须事先进行数据区的定义,为程序运行需要的数据开辟存储空间。

其具体程序如下:

datasegment

message1db0ah,0dh,'pleaseinputstring',0ah,0dh,'$'

message2db0ah,0dh,'conversionforcapital?

',0ah,0dh,'$'

message3db'press''Y''or''N''tochoose',0ah,0dh,'$'

message4db0ah,0dh,'conversiontocomplete',0ah,0dh,'$'

message5db0ah,0dh,'tosearch?

',0ah,0dh,'$'

message6db0ah,0dh,'pleaseinputtheletteryouwanttosearch',0ah,0dh,'$'

message7db0ah,0dh,'theletterdoeslocatein',0ah,0dh,'$'

message8db0ah,0dh,'ifyouwanttoquit,pleasehit''q''or''Q''!

',0ah,0dh,'$'buffer1db55;缓冲区第1个字节存放预定字符个数

db?

;缓冲区第2个字节保留用于存放实际输入字符个数

db55dup('$'),;缓冲区第3个字节开始存放输入字符(预先存有$)

buffer2db55dup('$');定义用于存放转换结果的缓冲区

buffer3db10dup('$'),'$';定义用于存放查询计数结果的缓冲区

dataends

3.2提示语句输出、字符输入及选择部分

3.21提示语句输出

对于程序中用于输出提示语句我们采用DOS调用的9号调用,并使用宏调用实现,其具体程序如下:

printmacrostring;变量为字符串

movah,09h;9号DOS调用用于输出制定缓冲区的字符串

leadx,string;将输出缓冲区的首地址赋给dx

int21h

endm

3.22字符及字符串的输入

对于字符串的输入我们采用DOS调用的10号调用,用于实现对转换字符串的输入,具体程序如下:

leadx,buffer1;设定输入字符串存放位置的偏移地址

movah,0ah;10号调用用于输入多字符

int21h

对于单字符的输入我们采用DOS调用的1号调用,用于实现对待查询字母的输入,具体程序如下:

movah,01h ;1号调用用于单字符输入,输入字符的ASCII码存放于al寄存器中

int21h

3.23选择部分

对于程序中需要选择的部分,如选择大写或小写,选择是否查询,选择是否退出并用Y/N进行选择,我们采用以下程序实现:

   choosemacroopr1,opr2

movah,01h;1号调用用于输入Y或N

int21h

cmpal,59h;将输入的字母的ASCII码与Y的ASCII码比较

jzopr1;若输入为Y则跳转到opr1所指的位置

cmpal,79h;将输入的字母的ASCII码与y的ASCII码比较

jnzopr2;若输入的不是y则跳转到opr2所指的位置

endm

3.3大小写转换部分

对于大写小转换部分,存在许多共性,但在个别语句上稍有不同,转换为大写ASCII码需要减去20H,而转换为小写ASCII码需要加上20H,所以将整个转换部分分为三个小部分,分别为ready、conversion1、conversion2,其结构图如图3-1所示,其程序具体如下:

1)readymacro

movah,00h

movbx,0000h

movcx,0000h

movdx,0000h;以上四句语句用于将ah,bx,cx,dx各寄存器清零

leabx,buffer1+2;将缓冲区buffer1开始存放字符串的偏移地址赋给bx

endm

2)conversion1macroopr1,opr2,opr3

moval,[bx];将缓冲区buffer1的字符存入al寄存器中

movdl,[bx];将缓冲区buffer1的字符存入dl寄存器中

cmpal,'$';比较输入是否为空字符串

jzresult;若为空字符串则调至输出转换结果部分

cmpal,opr1

jcopr3

cmpal,opr2;以上三句用于确认是否为大写或小写字母

endm

3)conversion2macroopr1

mov37h[bx],al;将转换后的大写或小写字母的ASCII码存入另外定义的缓冲区

inccl;cl自加1,用于计数

incbl;bl自加1用于指向下一个存储单位的偏移地址

jmpopr1;调回转换大小写的语句

endm

对于大小写的转换我们通过以下语句来进行ASCII码的加减20H:

subal,20haddal,20h

图3-1大小写转换模块流程图

3.4查询部分

对于查询部分,我们采用另外定义一个缓冲区来存放查询的结果,最后则一次性全部输出,输出形式为字符出现的字符串位置,如果输入的字符不存在则查询结果显示为空,并且在每次进行下一轮查询时自动清除缓冲区里的内容,保证下次输出的正确性,其流程图如图3-2所示,其程序如下:

part3:

leasi,buffer3;将缓冲区buffer3的偏移地址赋给si

pushsi;将si的内容推入堆栈段,保护原数据

movcl,09h;设置计数cl的初值,用于清零寄存器

clear:

mov[si],''

incsi

loopclear;将缓冲区buffer3中已存的数据清零,用以继续查询

popsi;将存入堆栈段的si的原值出栈

movcl,00h;计数重新清零

printmessage5

printmessage3

choosenext2,exit1

next2:

printmessage6

movah,01h

int21h

ready

done5:

movdl,[bx];取已存的字符串的字符存入dl中

cmpdl,'$';判断是否为空字符串或者是否查询完整个字符串

jzdone6

cmpdl,al;判断是否为待查询的字符

jzdone7;若是待查询的字符则进入done7指向的相关语句

incbl

inccl

jmpdone5;若不是查询字符则进入下一个字符进行下一次查询

done6:

printmessage7

printbuffer3;输出查询结果

jmppart3

done7:

inccl

mov[si],cl;将统计出现待查询字符出现次数存入si中

add[si],30h;将对应内容转化为十进制数字形式输出

incsi

incsi

incbl

jmpdone5;返回进行下一个字符的查询

图3-2查询模块流程图

3.5退出部分

当程序执行结束或者用户选择退出程序时需要退出DOS运行环境,对此做如下编程:

exit1:

printmessage8;提示若要退出请按Q或q键

movah,01h

int21h;用户输入按键确认是否退出

cmpal,'q'

jzexit2

cmpal,'Q'

jzexit2;以上四句语句用于判断用户输入的是否为退出键

jmpstart;若输入非退出键则再次进入输入字符串阶段

exit2:

movax,4c00h

int21h;用于退出DOS运行界面

 

4.运行结果分析

4.1程序运行结果

程序运行后的界面图如以下图所示:

下图为程序刚开始运行时提示用户输入字符串的界面截图;

图4-1运行界面图1

下图为输入字符串aabbCCdd后询问用户是否转换为大写的界面截图;

图4-2运行界面图2

下图为将输入的字符串aabbCCdd转换为大写字母AABBCCDD后询问用户是否进行查询的截图;

图4-3运行界面图3

下图为进行查询字符a后显示查询结果并询问是否继续查询的界面截图;

图4-4运行界面图4

下图为在查询字符a后继续进行查询字符d并输出查询结果的界面截图;

图4-5运行界面图5

下图为输入字符串AAABBBccdd后转换为小写字符串aaabbbccdd的界面截图;

图4-6运行界面图6

下图为对字符串AAABBBccdd进行字符x的查询,结果显示查询结果为空,表示没有该字符;

图4-7运行界面图7

图为当用户选择查询结束后询问用户是否退出,若要退出请按Q或q的界面截图。

图4-8运行界面图8

通过以上截图我们可以得出结论,所设计的程序已经能正确执行,并实现以下功能:

1)提示用户输入字符串;

2)询问用户是否将字符串转换成大写;

3)根据用户选择进行相应的操作即转换成大写或小写并输出转换结果;

4)询问用户是否对字符串进行查询;

5)根据用户的选择进行查询字符,并将对应相同字符出现的位置显示出来;

6)若所要查询的字符字符串中没有则显示查询结果为空;

7)在用户需要退出时按下Q或q键进行退出。

可见,程序的设计已能很好的完成设计要求。

4.2调试过程

程序在修改调试中分别出现的情况和对应的解决方法如下:

1)现象:

在程序开始运行输出的提示语句前出现乱码。

解决方法:

由于对ds的赋值语句写在了start前,导致首地址的赋值语句没有执行,将其放在start后既不会出现乱码。

2)现象:

再进行第二次查询时显示的查询结果包含上一次查询的结果。

解决方法:

在每次查询开始前加上一段语句用于清除存放查询结果的缓冲区buffer3中的数据。

3)现象:

在输入字符串没有的字符进行查询时程序一样输出查询结果,且为错误结果。

解决方法:

修改程序的查询模块,使得在查询没有的字符时输出结果为空。

 

结束语

通过本次的课程设计我对本学期所学的知识有了进一步的巩固与理解,特别是DOS调用方面的相关指令,对其具体的使用条件和方法更为清晰明确,同时对一些基本指令的使用也更为熟练,再有是宏调用的使用也让我学会怎样让程序模块化,使得程序结构更为明朗清晰,同时由于设计的需要,对循环结构和跳转指令的使用也较为频繁,让我对其使用时的注意事项有了进一步的掌握,在程序调试过程中更是让我发现了一些程序书写的常见错误和对应的解决方法,对我以后的程序编写有很大的帮助。

在设计中对软件MF2KP和EMU8086的使用让我对程序的调试过程更为熟练,也让我了解到一些程序编写语句在软件上并不是都能实现,要结合实际编写程序,同时通过几次调试,对这两个软件的使用也更为熟练,对以后的编程与调试起到了奠定基础的作用,让我获益匪浅。

整个设计过程中让我深有体会的是看似一个简单的编程题在实际编写程序并进行调试时往往会遇到许多难题,要关注许多细节,而且对程序一个地方细小的改动对整个程序的影响有可能很大,要学会设置断点并利用软件进行单步运行检查错误,并加以修改。

而课程设计说明书的书写也让我对写说明书和WORD的运用更为巩固。

通过此次课程设计,不仅巩固加深了对书本所学知识的理解,更让我锻炼了实际动手编程调试的能力。

 

参考文献

[1]彭虎,周佩玲,傅忠谦.微机原理与接口技术(第2版).电子工业出版社,2008

[2]周佩玲,彭虎,傅忠谦.微机原理与接口技术(基于16位机).电子工业出版社,2005

[3]李伯成,侯伯亨,张毅坤.微型计算机原理及应用.西安电子科技大学出版社,2009

[4]李继灿.新编16/32位微型计算机原理及应用(第4版).清华大学出版社,2008

[5]贺建民.微型计算机系统原理及应用.机械工业出版社,2011

 

附录

程序源码:

printmacrostring

movah,09h

leadx,string

int21h

endm

readymacro

movah,00h

movbx,0000h

movcx,0000h

movdx,0000h

leabx,buffer1+2

endm

conversion1macroopr1,opr2,opr3

moval,[bx]

movdl,[bx]

cmpal,'$'

jzresult

cmpal,opr1

jcopr3

cmpal,opr2

jncopr3

endm

conversion2macroopr1

mov37h[bx],al

inccl

incbl

jmpopr1

endm

choosemacroopr1,opr2

movah,01h

int21h

cmpal,59h

jzopr1

cmpal,79h

jnzopr2

endm

datasegment

message1db0ah,0dh,'pleaseinputstring',0ah,0dh,'$'

message2db0ah,0dh,'conversionforcapital?

',0ah,0dh,'$'

message3db'press''Y''or''N''tochoose',0ah,0dh,'$'

message4db0ah,0dh,'conversiontocomplete',0ah,0dh,'$'

message5db0ah,0dh,'tosearch?

',0ah,0dh,'$'

message6db0ah,0dh,'pleaseinputtheletteryouwanttosearch',0ah,0dh,'$'

message7db0ah,0dh,'theletterdoeslocatein',0ah,0dh,'$'

message8db0ah,0dh,'ifyouwanttoquit,pleasehit''q''or''Q''!

',0ah,0dh,'$'

buffer1db55

db?

db55dup('$'),

buffer2db55dup('$')

buffer3db10dup('$'),'$'

dataends

codesegment

assumecs:

code,ds:

data

start:

movax,data

movds,ax

leasi,buffer3

printmessage1

leadx,buffer1

movah,0ah

int21h

printmessage2

printmessage3

choosepart1,part2

part1:

ready

done1:

conversion160h,7bh,done2

subal,20h

done2:

conversion2done1

part2:

ready

done3:

conversion140h,5bh,done4

addal,20h

done4:

conversion2done3

result:

printmessage4

printbuffer2

part3:

leasi,buffer3

pushsi

movcl,09h

clear:

mov[si],''

incsi

loopclear

popsi

movcl,00h

printmessage5

printmessage3

choosenext2,exit1

next2:

printmessage6

movah,01h

int21h

ready

done5:

movdl,[bx]

cmpdl,'$'

jzdone6

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

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1