目 录
一 需求
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
……………………………………… 1
二 概要
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
……………………………………… 1
三 详细设计 ……………………………………… 2
四 调试分析 ……………………………………… 5
五 设计过程中遇到的问题及解决方法…………… 6
六 设计心得 ……………………………………… 7
七 结束语 …………………………………………7
八 参考文献 …………………………………………8
信息检索程序设计
摘 要:该信息检索程序,利用汇编模拟查找表格的方法实现。能较好的实现信息的检索和查询。该程序使用汇编程序设计的循环和分支基本结构以及子程序的调用共同实现信息的查找显示效果。能够通过对接受编号进行线性计算找到对应表格中将要显示信息字符串的起始地址,然后调用字符输出子函数执行,选择相应数据段中的字符显示在屏幕的指定位置,以达到信息检索的目的。每输入一个编号,就把该编号对应的程序指定长度的信息输出显示,即通过直接识别接收信息编号间接实现对信息的查询和检索。把所有要查询的信息编号统存储于一个有序的表格中,每个表项链接着每个信息编号的相关信息。每个子信息间具有从属性的检索作用,能一步步的实现信息的检索操作。
关键词:信息检索,编号,子程序,汇编
一、需求分析
完成一个信息检索系统。在数据区,有9 个不同的信息,编号 0-8,每个信息包括40 个
字符。从键盘接收 0-8 之间的一个编号,然后再屏幕上显示出相应编号的信息
内容
财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容
,按“q” 键退出。要求该程序能体现一般信息检索的基本功能,即给定关键字或关键词能查询找到与其相关的详细内容,使查询操作实现简单化,层次化,便于人们的查阅和咨询。最终实现信息的高效快速浏览与共享。
二、概要设计
(一)设计思想
信息检索仅指信息的查询,即从信息集合中迅速、准确地查找出所需信息的程序和方法。
程序把信息编号为0至8的九个信息分别定义在地址连续的数据段中,通过对从键盘输入的接受编号通过线性计算得到对应编号的信息内容的起始地址,然后调用输出模块实现该信息的输出。运用堆栈动态的存储显存中将要显示输出的信息字符串字符串。此外,程序把显示一个信息编成一个独立功能的子程序Disp_info,并把其中常用的显示一个字符的功能也编成一个独立的子程序Disp_char,每个子程序的功能都是明确而独立的,这样就使得程序的结构更加清晰和层次性的增强。
(二)实现原理
通过对编号的识别和处理来实现信息的输出显示,程序开始设置一个起始地址,标识首个信息内容的起始地址。每当输入一个信息编号则可以得到该编号对应具体信息的起始偏移地址,然后调用字符串输出函数将该信息输出。信息检索的过程呈现着树状的查询形式。
从下图可以看出,便于实现检索的层次性,有序性。
(三)程序流程图
Y
N
Y
N
三、详细设计
(一)源程序算法设计
1、输入输出模块
其中多次运用DOS的系统中断功能,系统把一些常用的I/O外设操作放在DOS例行程序中,使用DOS功能调用,给读者编程带来很大方便。程序员不必了解硬件操作的具体细节,直接使用指令设置参数,并中断调用DOS例行程序,所以利用DOS系统功能调用编写的程序简洁,可读性好,而且易于移植。
2、分支选择执行结构模块
程序开始先对输入信息编号进行判断,若为字符’q’,则退出程序,返回DOS。然后接着进行该输入编号是否数字0~8之间的比较判断,当该字符在0~8之间时,则顺序执行后面的程序,否则提示报错。接着判断下一次输入的是否合法。
3、循环结构模块
对程序中所以的异常输入情况做相同的处理,只要终端不输入字符’q’强制结束程序的运行,则都将提示继续输入,接着执行判断接受信息编号是否有效的判断。而不需要重新执行程序来检验程序的整体功能。可执行性较强,便于读者的调试与数据的分析。
(二)程序源代码
data segment ;定义数据段
n db 40 ;定义信息长度
msg0 db 'chenzhanao ' ;信息列表
msg1 db 'wuwendi '
msg2 db 'qinwang '
msg3 db 'linweihong '
msg4 db 'liuchanghong '
msg5 db 'wangxiangyu '
msg6 db 'taokai '
msg7 db 'xucheng '
msg8 db 'mijian ' ;定义编号为从0到8的九个信息(字符数组)
errmsg db 'error!The info not exist!input again!' ;定义报错信息及重新输入提示
data ends ;数据段结束
stack segment ;定义堆栈段
db 512 dup(0) ;内存分配512字节的堆栈空间
a label word ;Label伪操作定义变量a
stack ends ;堆栈段结束
code segment ;定义代码段
main proc far ;申明定义主程序
assume cs:code,ds:data,ss:stack ;ASSUME段定义伪操作
start: ;程序的开始执行地址
mov ax,stack
mov ss,ax ;建立堆栈段和堆栈段寄存器的联系
mov sp,offset a ;把变量a的偏移地址送给堆栈指针sp
push ds ;把原数据段段地址压栈
sub ax,ax ;把0送入AX寄存器中
push ax ;建立堆栈保存段地址和偏移地址以便程序的返回
mov ax,data
mov ds,ax ;建立数据段和数据段寄存器的联系
loop1: ;标号
mov ah,1 ;输入字符
int 21h ;DOS的21H号系统功能调用
com al,’q’ ;把该输入字符和’q比较
jz exit ;若输入为'q',则退出
sub al,'0' ;把该输入字符和’0’比较
jc error ;输入为非数字,跳转至error执行
cmp al,8 ;把输入字符和8比较
ja error ;输入编号比8大,跳转至error执行
mov bx,offset msg0 ;把信息(字符数组)0的偏移地址送给bx寄存器
mul n ;AX=AL*30
add bx,ax ;计算与接受编号对应的要显示输出的信息的起始地址送bx
mov dl,0dh
call disp_char ;回车
mov dl,0ah
call disp_char ;换行
call disp_info ;调用显示信息子程序
jmp loop1 ;跳转至标号loop1处执行
error:
mov bx,offset errmsg ;把报错信息的偏移地址送bx
mov dl,0dh
call disp_char ;回车
mov dl,0ah
call disp_char ;换行
call disp_info ;调用显示信息子程序
jmp loop1 ;跳转至loop1处执行
ret ;返回DOS
disp_info proc near ;定义显示信息子程序
mov cx,40 ;显示字符的个数
disp1:
mov dl,[bx] ;把要输出信息起始地址存储单元内容送dl
call disp_char ;调用输出字符子函数
inc bx ;当前输出地址指向下一个字符
loop disp1 ;跳转至disp1处执行
mov dl,0dh
call disp_char ;输出一个信息后回车
mov dl,0ah
call disp_char ;输出一个信息后换行
ret ;返回DOS
disp_info endp ;显示信息子程序结束
disp_char proc near ;申明定义输出字符子程序
mov ah,2
int 21h
ret ;DOS的键盘输入功能调用
disp_char endp ;显示字符子程序的结束
exit:
mov ax,4c00h
int 21h ;退出程序,返回DOS
main endp ;主程序的结束
code ends ;代码段结束
end start ;汇编结束
四、调试分析
(一)程序正确执行时的结果如下图所示
分析:
输入某个编号时,对应的信息将显示输出。若该输入编号输入无效则报错并提示重新输入新的信息编号!该程序能较好的模拟实现信息检索与查找的功能。对每种输入情况都要较直观的信息输出显示,程序执行明了。在同一个界面上能同时显示各种不同的信息咨询情况,并且对信息内容输出有着清楚的位置区分,每一行单独地显示一个具体的信息以及每一行单独地接受一个信息编号。这样就能全面,结构地对信息进行归纳,汇总。在该程序里则能客观的对该设计程序的思路和算法进行合理的分析,便于实验后对实验结果进行整体上的分析,同时直观的输出界面便于读者对原程序进行调试。最后得到改进的,更加优良的算法。
(二)使用DEBUG等反汇编命令对源程序进行调试和分析
使用DEBUG等调试命令能从整体上把握整个程序的执行过程。进一步了解该程序能正确执行的关键。熟练对汇编程序进行调试分析的基本原理和方法,养成良好的变成习惯,锻炼自己的自主分析解决问题的能力。
1.用调试命令查看内存中的数据段.
程序一开始就定义了数据段,存放0~8九个信息的具体内容。把九个信息连续集中定义在数据段便于利用地址的线性偏移来计算将要输出显示的字符串的首地址,再利用计数初值为信息长度的循环结构来实现整个信息的输出显示。用DEBUG命令查看程序执行前的内存部分数据段分配如下图所示。
分析:
该图部分显示了内存中的数据段的分配情况。源程序的开始就初始定义分配数据段,在整个程序的执行过程中都不会发生变化。表示要被检索查询的若干个信息表列。
2.用DEBUG命令查看内存中的堆栈段。
分析:
从图上可以看出系统为该程序分配了64字节的堆栈存储空间。便于实现对数据的动态存储和访问。堆栈在程序执行后能释放存储空间,能极大程度上减少内存的负荷,从而能有效地提高信息的检索效率。
五、设计过程中遇到的问题及解决方法
问题一:
1. 虽然该程序能较好的通过循环和分支程序结构执行,实现基本的信息检索和查询功能。但是程序也存在不足之处。比如当报错语句过长的时候,因为显示正确信息和显示错误信息公用一个输出字符数CX,所以当报错语句过长时,程序执行完毕后将不能正确的显示完整的错误信息。如下图所示:(假设报错语句为:errmsg db 'error!The info not exist!input again!s sfssf')
2.显然由上图可以看出errmsg报错语句的最后四个字符’fssf’并未在终端屏幕上显示输出来,而程序执行后只把errmsg语句的前40字符输出显示,是该程序设计思路上存在的不足,应该得以改进,以便实现信息检索的正确性和有效性。不产生无效的检索信息来干扰读者对若干相关信息的查找。改进的方法为把输出正确信息字符计数标号和输出出错信息的计数标号区分开来,不公用一个输出字符数循环控制标量。使得两个子模块能分别独立地完成各自的功能而互不干扰,实现该信息检索程序的整体上的正确执行。
问题二:
1.该程序能通过具体输入信息编号经过地址的线性计算得到将要输出具体信息的首字符地址,并在该处调用字符输出子函数来实现已知输入编号对应的具体信息,基本上实现了信息的检索和查询操作。但是程序在执行过程中,全局性初始化一个地址 offset msg0。每输入一个信息编号,都将对地址从预设初始址开始加上信息编码所表征的偏移量 △=AX=AL*40。这样就导致了该程序执行效率上的不足。因此,该算法有待改进。
2.改进的方法为可以设置一个标志量,记录上一次检索信息输出的相关地址。当下一次有信息需要查询时,首先查看该标志量记录的上一次查询的地址,然后该次查询的信息内容的首地址判断当前输出指针的具体工作位置。若要检索的信息在原标志量地址以前的信息则在前一部分数据空间里查询。若要检索的信息在原标志量地址以后,则可以相应的在后一部分数据信息空间里查询。显然,这样要增加判断上的开销,但程序减少了地址上的重复遍历计算,因而能一定程度上改善程序的执行效率,实现信息检索的便捷和有效。
六、心得体会
1.通过此次课程设计我了解和熟悉了课程设计的基本步骤和思路以及课程设计在我们各个专业学科中的重要作用。课程设计能较大程度上地反映我们的动手能力和实践能力,能考察我们把课本上的只是付诸实践的本领,这是我们必须具备的一种能力,也是我们以后发展所需要的基本素质。它能把一个问题具体的,实际的分析清楚。有着一个严格的设计过程 ,要求大家有整体性的认识一个问题或过程的基本能力。
2.此次课程设计我收获很多。我们要从各个方面上把握这个课题。只有这样才能设计出合理的,全面的设计思路与
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
,并且能较好反映着一个实际问题,并把该课程设计理论与现实实际联系起来,以达到该设计思路的适应性和本质性,最终达到素质化教育的要求,自己能通过实际动手和学习主动的解决自己学科内的关键问题,这有助于提高我们的思维和素质拓展综合能里,是未来社会对我们大学生的基本要求。也是我们每个大学生必须具备的一项基本素质,能够掌握透过现象看本质的基本技能和一定的创新思维能力。
3.从这次信息检索的具体课程设计中我获益很多。我深刻了解了一个课程设计的完整步骤和程序。从需求分析开始,到最后的心得,我们自己都能清楚的感觉到一个课程设计的严谨性和层次性。它要求你你能运用自己所学的全部理论知识运用起来,运用到一个具体的问题解决当中,实现了理论联系实际的基本规律。
4.虽然只是一个很小的汇编程序课程设计,但我觉得要把它最后做得很完整,很有说服力。我们每个人应该付出自己的努力,在整个设计过程中自己思考,自己查阅资料,自己动手,自觉完成设计的整个流程。这对于我们培养其科学严谨的科学和工作作风恶是很重要的。
5.一个完整的合理的课程设计包括若干个部分组成。它考察我们的客观地把整体和部分实际的相结合的能力,以及把抽象问题具体化的基本规律。因此我们学会了处理一般问题的基本程序过程,这能较好的提高我们的处理实际问题的能力和科学素养。
七、结束语
通过此次课程设计我受很多。我学会了在实际中处理一个问题的基本方法与原理。并且把理论跟实际紧密联系起来的关键要素,我们要有学以致用的好习惯,并且能把自己课堂上面所学的东西在生活实际中合理的运用起来,培养自己良好的学习探索解决问题的能力。当然一个较好的课程设计离不开专业老师的指导和评定,在次我深深的感谢组织我们此次课程设计的老师!只有在老师的指导下,我们才能得以合理的,按要求地完成了课程设计的任务!
八、参考文献
[1] 沈美明,温冬婵著.-2版.-北京:清华大学出版社.2001.
[2] 丁辉主编.汇编语言程序设计[M].第二版.北京:电子工业出版社.2005.
[3] 钱晓捷著.汇编语言程序设计.北京:电子工业出版社,2000
[4] 穆玲玲,钱晓捷著.32位汇编语言程序设计[M].北京:电子工业出版社,2007.
[5] 王爽编.《汇编语言》. 北京:清华大学出版社,2003.5
开 始
接受一个
字符编号
输出字符
对应信息
是否在0~8
范围内?
是否为’q’?
报错!提示重新输入!
结 束
PAGE
1