微机原理课设(信息检索设计)
- 格式:doc
- 大小:337.00 KB
- 文档页数:24
摘要建立一个信息检索系统,每个序号对应一个不同的信息。
通过键盘输入不同的指令序号,在电脑屏幕上会输出想要得到的信息。
当超出序号范围的时候,屏幕会显示错误。
程序还附加一个进一步查询的子程序。
在输出信息后,可以对该信息进行查寻,当输入信息与序号相对应的信息完全相同时,会在屏幕上显示NO 字样,然后继续进行下一次的提示输入。
关键词: 信息检索子程序信息查寻计算机1信息检索程序的设计建立一个信息检索系统,然后通过键盘输入不同的指令,输出想要得到的信息。
信息检索是为了满足用户的查询需求,比如在我们的图书馆中,想要找自己需要的资料,就可以通过信息检索系统去查询。
通常的信息检索系统拥有一个很庞大的数据库区存放这些查询信息,而汇编语言就把这些信息都放在了数据段中,然后其他的查询操作全部放在代码段中,在代码段中设置好不同的数据信息显示对于不同的按键,即可通过按键查询到放在数据段中的信息,实现信息检索基本的功能。
1.1设计要求及分析信息检索程序是能够实现相关的信息搜索并显示的程序。
该题目要求:完成一个信息检索系统。
在数据区,有9 个不同的信息,编号 0-8,每个信息包括40 个字符。
从键盘接收0-8 之间的一个编号,然后再屏幕上显示出相应编号的信息内容,再从中检索出你指定的信息,若无则显示NO,按“Q”键退出。
这个题目对设计程序有几个要求,首先,要在数据区设定九个不同的信息,给它们编号,每个信息包括40个字符。
然后,当键盘接受到编号时,程序运行,显示相应编号的信息内容。
接着,检索出指定信息,如果没有,要显示NO。
最后按下“Q”退出。
整个程序可分为两个检索,序号检索和指定内容检索。
初看题目,我觉得有些难点,比如出现信息内容后,如何检索;如何知道没有包含指定信息,并显示NO;如何对信息进行查验,搜索用户希望得到的信息等。
根据要求,问题实现的思路是根据不同的输入序号来计算出相应的物理地址,实现不同信息的输出。
对输入项进行判断,满足不同的条件,就会进行相应的计算,得出该序号下的信息的物理地址,进而输出结果。
信息显示和其中的单个字符的输出编成子程序使的程序结构更加清晰。
2微机工作原理计算机通过执行一个解题程序来完成一个具体问题的求解,而一个解题程序由若干条指令组成。
因此,要了解计算机如何执行一个程序,必须首先了解控制器为完成一条指令所采取的控制步骤。
控制器完成一条指令的全过程需要三个步骤:取指令、分析指令、执行指令。
取指令时按照程序所规定的次序,从内存储器取出当前要执行的指令,并送控制器的指令寄存器中;分析指令是对所取的指令进行分析,即根据指令中的操作码确定计算机应进行什么操作;执行指令是根据指令分析的结果,由控制器发出完成操作所需要的一系列控制信号,以便指挥计算机有关部分完成这一操作,同时还要取下一条指令做好准备。
于是就构成了执行指令序列的自动控制过程。
计算机在执行程序的过程中,先将程序中的语句翻译成计算机能够识别的机器指令,再根据指令的顺序逐条执行。
计算机分析指令要完成的动作,执行相应的操作,直到遇到结束程序运行的指令为止。
PC机在运行时往往会遇到一些异常情况或某些请求,一旦发生,微处理器应该立即对它们做出响应,这就要求控制器具有处理这类问题的功能。
通常当这些情况出现时,由相应部件或设备向微处理器发出“中断请求”信号,待执行完当前指令后,微处理器响应该请求,终止当前执行的程序,转去执行中断程序,以便处理这些请求。
当处理完毕后,再返回原程序继续执行。
3程序流程图3.1主流程图主程序流程图,如图3-1所示。
3.2子程序流程图3.2.1输入模块输入模块流程图如图3-2所示。
图3-2输入模块流程图程序中,使用DOS调用,显示一串字符串:mov ah,9int 21h3.2.2输出模块输出模块流程图如图3-3所示。
图3-3输出模块流程图从键盘输入序号,并运用DOS调用将所得结果显示在屏幕上,随后返回输入序号提示语句。
4程序设计4.1设计原理在数据段里分配10个小数据段,每个小数据段分配40个字符,0-8这9个信息存储信息内容,另外一个输出错误信息,Q退出。
取msg0的首地址作为整个信息段的首地址,根据输入的信号的不同,用序号乘40再加到首地址上找到相应序号的信息内容。
步骤为:(1)开始,等待信息输入。
(2)输入序号,判断是否为Q。
若是转(7),否则转(3)。
(3)判断是否满足要求的序号范围。
满足转(4),否则转(6)。
(4)根据输入的序号,计算出相关信息的物理地址。
(5)输出结果,跳转到(2)。
(6)输出错误信息提示,转(2)。
(7)在输出的信息内,检索用户给出的内容,如无,则显示NO。
(8)结束,退出程序。
4.2最初的设想我在最初看到课设题目时,尝试编写了一个简易的程序,为了与最终的源程序比较并且体现我的思考过程,现将此程序附下:DATA SEGMENTn0 db '1111111111111111111111111111111111111111'n1 db '2222222222222222222222222222222222222222'n2 db '3333333333333333333333333333333333333333'n3 db '4444444444444444444444444444444444444444'n4 db '5555555555555555555555555555555555555555'n5 db '6666666666666666666666666666666666666666'n6 db '7777777777777777777777777777777777777777'n7 db '8888888888888888888888888888888888888888'n8 db '9999999999999999999999999999999999999999'Errmsg DB 'No! Input 0-8! Q or q , Exit $' ;输出错误信息DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXLOP: MOV AH,01H ;输入一个数字INT 21HCMP AL,'Q' ;cmp判断是否输入字符与q相等,既跳到exit退出JZ exit ;输入是否'q'或'Q'则退出CMP AL,'q'JZ exitCMP AL,'0' ;输入不在0-8范围则退出JB ERR ;小于0跳转ermsgCMP AL,'8'JA ERR ;大于8跳转ermsgSUB AL,30H ;计算字符串的地址MOV DH,28H ;28H=40MUL DHMOV BX,AX ;数据放入bxCALL DISPJMP LOP ;分支语句,输出错误信息后继续lop0ERR: MOV DL,0DHMOV AH,02INT 21HMOV DL,0AHMOV AH,02INT 21HMOV DX,OFFSET ErrmsgINT 21HMOV DL,0DH ;回车和换行MOV AH,02INT 21HMOV DL,0AHMOV AH,02INT 21HJMP LOPexit:MOV AH,4CHINT 21DISP PROC NEARMOV DL,0DH ;回车换行MOV AH,02INT 21HMOV DL,0AHMOV AH,02INT 21HMOV CX,28H ;28H=40 控制循环次数即输出的信息字符个数LOP1:MOV DL,[BX] ;循环输出字符串MOV AH,02HINT 21HINC BX ;bx打印字符LOOP LOP1MOV DL,0DHMOV AH,02INT 21HMOV DL,0AHMOV AH,02RETDISP ENDPCODE ENDSEND START运行结果如图4-1。
图4-1运行结果4.3最终源程序的分支程序设计4.3.1序号检索程序输入一个序号,首先判断是否是Q。
如果是,则直接跳出,结束程序。
如果不是,就在已设定好的信息库中检索相应信息,并将信息显示在屏幕上,紧接着跳入下一次序号输入界面。
如果没有相应的序号所对应的信息,即超出序号范围会自动报错,并跳到下一次序号输入界面。
部分程序如下:begin:call crlflea d x,msg ;显示提示信息mov ah,09hint 21hmov ah,1int 21hcmp al,'Q' ;判断为‘Q’退出je exit0sub al,'0' ;小于0跳转errorjb errorcmp al,8 ;大于9跳转errorja errormov bx,offset msg0mul forty ;(ax)=(al)*40add bx,axcall displayjmp AA;定义errorerror:call crlflea dx,errmsgmov ah,09hint 21hcall crlfcall crlfjmp begin;显示信息display proc nearcall crlflea dx,msg9mov ah,09hint 21hmov cx,40disp1:mov dl,[bx]mov ah,2int 21hinc bxloop disp1call crlf;jmp AAretdisplay endp4.3.2指定内容检索程序从键盘输入一条信息,如与已检索出的序号对应内容不一致,则显示NO!如输入内容与序号对应内容完全一致时,将没有任何信息输出。
如不需要检索内容,直接按回车键,即可跳过。
部分程序如下:AA:lea dx,buffer ;键盘输入单词mov ah,0ahint 21hlea di,buffermov cl,[di+1] ;将输入单词的字符个数放入clinc clsub bx,40mov si,bxnext:mov al,[di+2]mov bl,[si]inc diinc sidec clcmp cl,0je begin ;控制cx,是否存在单词与输入单词相同cmp al,bl ;一个个字符的比较je nextjmp sadsad :call crlflea dx,mess1mov ah,09hint 21hcall crlfjmp begin4.4源程序源程序代码见附录。