汇编语言课程设计报告_第1页
汇编语言课程设计报告_第2页
汇编语言课程设计报告_第3页
汇编语言课程设计报告_第4页
汇编语言课程设计报告_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

设计题目1、输入0~100之间的n值,计算Fibonacci数,以十进制数输出。2、从键盘输入一行字符,以‘$’结束,查找输入的字符是否包含‘computer’字符串,如果包含,计算包含‘computer’字符串的个数,并以十进制数输出个数。3、建立歌曲文档,按演唱者排序,程序可接收查找的演唱者,并输出其所有的歌曲4、建立图书资料文档,要求具有插入,更新,删除,查询等功能,使用菜单提示。

问题分析及程序实现问题一、输入0~100之间的n值,计算Fibonacci数,以十进制数输出问题分析经过分析可知,程序可由三部分组成:在输入部分程序接收用户键入的n值,化为二进制数后保存;在递归自程序部分求出n的Fibonacci数的值并存入result单元当中;在输出部分将result中的结果用十进制数的形式在屏幕上显示出来。通过以上分析,建立如下的模块:1模块名:main总控模块输入:从键盘获得一个0到100间的数n,如果输入的形式不满足要求则提示错误输出:在终端屏幕上显示n的Fibonacci数功能:计算一个0到100间的数n的Fibonacci数,并在终端上显示出来2模块名:input输入:从键盘获得一个0到100间的数n输出:将n存入bx当中,如果输入格式错误,将输出错误提示信息,并要求重新输入功能:从键盘输入一个0到100间的数n并存入bx当中;输入格式错误时输出错误提示信息,要求重新输入3模块名:output功能:在终端屏幕上以十进制形式显示bx的数值4模块名:binidec输入:从BX取得一个二进制数输出:在终端屏幕上显示此数的十进制形式功能:把BX寄存器中的二进制数转换为十进制数,并在终端屏幕上显示出来调用子模块dec_div用来做除法运算并显示字符5模块名:dec_div输入:从BX取得需转换为十进制的数输出:在屏幕上显示一位十进制数功能:把BX寄存器中的二进制数除以相应的十的幂,并在屏幕上显示一位商。余数保存在BX寄存器当中6模块名:decibin输入:从键盘取得一个十进制数输出:把该数转换为二进制数并存入BX寄存器当中功能:把从键盘取得一个十进制数转换为二进制数,并将结果存入BX寄存器当中7模块名:crlf输出:向终端发出一次回车、换行符功能:完成一次回车、换行操作8模块名:fib输出:将ax的Fibonacci数存到result内存单元功能:通过递归调用方式计算一个数的Fibonacci数,并将结果保存到result内存单元当中各模块按如下层级进行组织:程序各模块的层次图在程序编写时要注意的问题是一定要明确各个数据及结果在堆栈当中的位置,因为每次计算都要利用上次计算的结果,如果对栈指针计算错误,将直接导致不能读取正确的数据进而导致不能得到正确的结果。当n=4时,经过推断我们可以得到当堆栈最满时存储的信息如下:16位字长堆栈状态示意图为了节约内存空间,我们可以直接用原来保存n的内存单元保存最后结果。由于在递归调用时,结果只由上一步的计算结果决定,那么在知道当前的n之后,n的值就不再重要了,一次用他所占用的单元来保存结果是可行的。从堆栈状态图可以看出,在递归调用时要使[bp-2]和[bp-8]相加,结果保存至[bp+4]当中即可。在编制子程序时,特别是在编制嵌套或递归子程序时,堆栈的使用是十分频繁的。在这里顺便说明一下,在堆栈使用过程中,应该注意有关堆栈溢出的问题。由于堆栈区域是在堆栈定义时就确定了的,因而堆栈工作过程中有可能产生溢出。堆栈溢出有两种情况可能发生:如堆栈已满,但还想再存入信息,这种情况称为堆栈上溢;另一种情况是,如堆栈已空,但还想再取出信息,这种情况称为堆栈下溢。不论上溢或下溢,都是不允许的。因此在编制程序时,如果可能发生堆栈溢出,则应在程序中采取保护措施。这可以通过给SP规定上、下限,在进栈或出栈操作前先做SP和边界值的比较,如溢出则作溢出处理,以避免破坏其他存储区或使程序出错的情况发生。在分配堆栈段时,要保证其足够大,否则随着要计算Fibonacci数的n值增大,可能超过堆栈的区域,导致不能得到最后结果。从本程序的实现方式来看,要计算n=100时的Fibonacci数,就要压栈100次,而每次压栈要压入3字节,所以堆栈至少要有300字节的空间。为了便于扩展,在程序编写时将堆栈大小设为1024字节。程序流程图主程序的流程图堆栈状态跟踪我们可以通过运行debug程序来跟踪堆栈的运行状态。具体过程如下:F:\1>debugfibonaci.exe-u1882:0000B80218MOVAX,18021882:00038ED0MOVSS,AX1882:0005BC0008MOVSP,08001882:00081EPUSHDS1882:00092BC0SUBAX,AX1882:000B50PUSHAX1882:000CB8FD17MOVAX,17FD1882:000F8ED8MOVDS,AX1882:0011E81C00CALL00301882:001453PUSHBX1882:0015E89900CALL00B11882:00188F060200POP[0002]1882:001CE80100CALL00201882:001FCBRETF-g15Pleaseinputanintegern(0<=n<=100):4AX=020DBX=0004CX=000ADX=000DSP=07FABP=0000SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=0015NVUPEIPLNZNAPONC1882:0015E89900CALL00B1-tAX=020DBX=0004CX=000ADX=000DSP=07F8BP=0000SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00B1NVUPEIPLNZNAPONC1882:00B155PUSHBP-tAX=020DBX=0004CX=000ADX=000DSP=07F6BP=0000SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00B2NVUPEIPLNZNAPONC1882:00B28BECMOVBP,SP-tAX=020DBX=0004CX=000ADX=000DSP=07F6BP=07F6SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00B4NVUPEIPLNZNAPONC1882:00B48B4604MOVAX,[BP+04]SS:07FA=0004-tAX=0004BX=0004CX=000ADX=000DSP=07F6BP=07F6SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00B7NVUPEIPLNZNAPONC1882:00B73D0200CMPAX,0002-tAX=0004BX=0004CX=000ADX=000DSP=07F6BP=07F6SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00BANVUPEIPLNZNAPONC1882:00BA7416JZ00D2-tAX=0004BX=0004CX=000ADX=000DSP=07F6BP=07F6SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00BCNVUPEIPLNZNAPONC1882:00BC3D0100CMPAX,0001-tAX=0004BX=0004CX=000ADX=000DSP=07F6BP=07F6SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00BFNVUPEIPLNZNAPENC1882:00BF7411JZ00D2-tAX=0004BX=0004CX=000ADX=000DSP=07F6BP=07F6SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00C1NVUPEIPLNZNAPENC1882:00C148DECAX-tAX=0003BX=0004CX=000ADX=000DSP=07F6BP=07F6SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00C2NVUPEIPLNZNAPENC1882:00C250PUSHAX-tAX=0003BX=0004CX=000ADX=000DSP=07F4BP=07F6SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00C3NVUPEIPLNZNAPENC1882:00C3E8EBFFCALL00B1-tAX=0003BX=0004CX=000ADX=000DSP=07F2BP=07F6SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00B1NVUPEIPLNZNAPENC1882:00B155PUSHBP-tAX=0003BX=0004CX=000ADX=000DSP=07F0BP=07F6SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00B2NVUPEIPLNZNAPENC1882:00B28BECMOVBP,SP-tAX=0003BX=0004CX=000ADX=000DSP=07F0BP=07F0SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00B4NVUPEIPLNZNAPENC1882:00B48B4604MOVAX,[BP+04]SS:07F4=0003-tAX=0003BX=0004CX=000ADX=000DSP=07F0BP=07F0SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00B7NVUPEIPLNZNAPENC1882:00B73D0200CMPAX,0002-tAX=0003BX=0004CX=000ADX=000DSP=07F0BP=07F0SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00BANVUPEIPLNZNAPONC1882:00BA7416JZ00D2-tAX=0003BX=0004CX=000ADX=000DSP=07F0BP=07F0SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00BCNVUPEIPLNZNAPONC1882:00BC3D0100CMPAX,0001-tAX=0003BX=0004CX=000ADX=000DSP=07F0BP=07F0SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00BFNVUPEIPLNZNAPONC1882:00BF7411JZ00D2-tAX=0003BX=0004CX=000ADX=000DSP=07F0BP=07F0SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00C1NVUPEIPLNZNAPONC1882:00C148DECAX-tAX=0002BX=0004CX=000ADX=000DSP=07F0BP=07F0SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00C2NVUPEIPLNZNAPONC1882:00C250PUSHAX-tAX=0002BX=0004CX=000ADX=000DSP=07EEBP=07F0SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00C3NVUPEIPLNZNAPONC1882:00C3E8EBFFCALL00B1-tAX=0002BX=0004CX=000ADX=000DSP=07ECBP=07F0SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00B1NVUPEIPLNZNAPONC1882:00B155PUSHBP-tAX=0002BX=0004CX=000ADX=000DSP=07EABP=07F0SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00B2NVUPEIPLNZNAPONC1882:00B28BECMOVBP,SP-tAX=0002BX=0004CX=000ADX=000DSP=07EABP=07EASI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00B4NVUPEIPLNZNAPONC1882:00B48B4604MOVAX,[BP+04]SS:07EE=0002-tAX=0002BX=0004CX=000ADX=000DSP=07EABP=07EASI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00B7NVUPEIPLNZNAPONC1882:00B73D0200CMPAX,0002-tAX=0002BX=0004CX=000ADX=000DSP=07EABP=07EASI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00BANVUPEIPLZRNAPENC1882:00BA7416JZ00D2-tAX=0002BX=0004CX=000ADX=000DSP=07EABP=07EASI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00D2NVUPEIPLZRNAPENC1882:00D2B80100MOVAX,0001-tAX=0001BX=0004CX=000ADX=000DSP=07EABP=07EASI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00D5NVUPEIPLZRNAPENC1882:00D5C746FE0100MOVWORDPTR[BP-02],0001SS:07E8=11EC-tAX=0001BX=0004CX=000ADX=000DSP=07EABP=07EASI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00DANVUPEIPLZRNAPENC1882:00DA894604MOV[BP+04],AXSS:07EE=0002-tAX=0001BX=0004CX=000ADX=000DSP=07EABP=07EASI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00DDNVUPEIPLZRNAPENC1882:00DD5DPOPBP-tAX=0001BX=0004CX=000ADX=000DSP=07ECBP=07F0SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00DENVUPEIPLZRNAPENC1882:00DEC3RET-tAX=0001BX=0004CX=000ADX=000DSP=07EEBP=07F0SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00C6NVUPEIPLZRNAPENC1882:00C658POPAX-tAX=0001BX=0004CX=000ADX=000DSP=07F0BP=07F0SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00C7NVUPEIPLZRNAPENC1882:00C72BC0SUBAX,AX-tAX=0000BX=0004CX=000ADX=000DSP=07F0BP=07F0SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00C9NVUPEIPLZRNAPENC1882:00C90346FEADDAX,[BP-02]SS:07EE=11EC-tAX=3346BX=0004CX=000ADX=000DSP=07F0BP=07F0SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00CCNVUPEIPLNZNAPONC1882:00CC0346F8ADDAX,[BP-08]SS:07E8=07F0-tAX=3B36BX=0004CX=000ADX=000DSP=07F0BP=07F0SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00CFNVUPEIPLNZNAPENC1882:00CFEB09JMP00DA-tAX=3B36BX=0004CX=000ADX=000DSP=07F0BP=07F0SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00DANVUPEIPLNZNAPENC1882:00DA894604MOV[BP+04],AXSS:07F4=0003-tAX=3B36BX=0004CX=000ADX=000DSP=07F0BP=07F0SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00DDNVUPEIPLNZNAPENC1882:00DD5DPOPBP-tAX=3B36BX=0004CX=000ADX=000DSP=07F2BP=07F6SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00DENVUPEIPLNZNAPENC1882:00DEC3RET-tAX=3B36BX=0004CX=000ADX=000DSP=07F4BP=07F6SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00C6NVUPEIPLNZNAPENC1882:00C658POPAX-tAX=3B36BX=0004CX=000ADX=000DSP=07F6BP=07F6SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00C7NVUPEIPLNZNAPENC1882:00C72BC0SUBAX,AX-tAX=0000BX=0004CX=000ADX=000DSP=07F6BP=07F6SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00C9NVUPEIPLZRNAPENC1882:00C90346FEADDAX,[BP-02]SS:07F4=11EC-tAX=3346BX=0004CX=000ADX=000DSP=07F6BP=07F6SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00CCNVUPEIPLNZNAPONC1882:00CC0346F8ADDAX,[BP-08]SS:07EE=07F6-tAX=3B3CBX=0004CX=000ADX=000DSP=07F6BP=07F6SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00CFNVUPEIPLNZNAPENC1882:00CFEB09JMP00DA-tAX=3B3CBX=0004CX=000ADX=000DSP=07F6BP=07F6SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00DANVUPEIPLNZNAPENC1882:00DA894604MOV[BP+04],AXSS:07FA=0004-tAX=3B3CBX=0004CX=000ADX=000DSP=07F6BP=07F6SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00DDNVUPEIPLNZNAPENC1882:00DD5DPOPBP-tAX=3B3CBX=0004CX=000ADX=000DSP=07F8BP=0000SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=00DENVUPEIPLNZNAPENC1882:00DEC3RET-tAX=3B3CBX=0004CX=000ADX=000DSP=07FABP=0000SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=0018NVUPEIPLNZNAPENC1882:00188F060200POP[0002]DS:0002=0000-tAX=3B3CBX=0004CX=000ADX=000DSP=07FCBP=0000SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=001CNVUPEIPLNZNAPENC1882:001CE80100CALL0020-tAX=3B3CBX=0004CX=000ADX=000DSP=07FABP=0000SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=0020NVUPEIPLNZNAPENC1882:00208D162C00LEADX,[002C]DS:002C=6854-tAX=3B3CBX=0004CX=000ADX=002CSP=07FABP=0000SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=0024NVUPEIPLNZNAPENC1882:0024B409MOVAH,09-tAX=093CBX=0004CX=000ADX=002CSP=07FABP=0000SI=0000DI=0000DS=17FDES=17EDSS=1802CS=1882IP=0026NVUPEIPLNZNAPENC1882:0026CD21INT21-tAX=093CBX=0004CX=000ADX=002CSP=07F4BP=0000SI=0000DI=0000DS=17FDES=17EDSS=1802CS=00A7IP=107CNVUPDIPLNZNAPENC00A7:107C90NOP-tAX=093CBX=0004CX=000ADX=002CSP=07F4BP=0000SI=0000DI=0000DS=17FDES=17EDSS=1802CS=00A7IP=107DNVUPDIPLNZNAPENC00A7:107D90NOP-tAX=093CBX=0004CX=000ADX=002CSP=07F4BP=0000SI=0000DI=0000DS=17FDES=17EDSS=1802CS=00A7IP=107ENVUPDIPLNZNAPENC00A7:107EE8E000CALL1161-tAX=093CBX=0004CX=000ADX=002CSP=07F2BP=0000SI=0000DI=0000DS=17FDES=17EDSS=1802CS=00A7IP=1161NVUPDIPLNZNAPENC00A7:11611EPUSHDS-tAX=093CBX=0004CX=000ADX=002CSP=07F0BP=0000SI=0000DI=0000DS=17FDES=17EDSS=1802CS=00A7IP=1162NVUPDIPLNZNAPENC00A7:116206PUSHES-tAX=093CBX=0004CX=000ADX=002CSP=07EEBP=0000SI=0000DI=0000DS=17FDES=17EDSS=1802CS=00A7IP=1163NVUPDIPLNZNAPENC00A7:116351PUSHCX-tAX=093CBX=0004CX=000ADX=002CSP=07ECBP=0000SI=0000DI=0000DS=17FDES=17EDSS=1802CS=00A7IP=1164NVUPDIPLNZNAPENC00A7:116456PUSHSI-tAX=093CBX=0004CX=000ADX=002CSP=07EABP=0000SI=0000DI=0000DS=17FDES=17EDSS=1802CS=00A7IP=1165NVUPDIPLNZNAPENC00A7:116557PUSHDI为了更加容易理解反汇编后各指令的含义,下面给出fib子程序的LST清单:00B1 fib proc near00B155 push bp00B28BEC mov bp,sp00B48B4604 mov ax,[bp+4]00B73D0002 cmp ax,200BA7416 je l100BC3D0001 cmp ax,100BF7411 je l1 00C148 dec ax;ax存放要计算F(n)的n值00C250 push ax00C3E800B1R call fib00C658 pop ax00C72BC0 sub ax,ax00C90346FE add ax,[bp-2];将F(n-1)和F(n-2)相加00CC0346F8 add ax,[bp-8]00CFEB0990 jmp exit00D2B80001 l1: mov ax,100D5C746FE0001 mov wordptr[bp-2],100DA exit:00DA894604 mov [bp+4],ax00DD5D pop bp ; popax00DEC3 ret00DF fib endp从跟踪执行的结果中我们可以很明显地看出堆栈的变化与之前分析的是完全一致的。运行结果演示经过汇编、连接生成可执行文件后,键入文件名fibonaci直接运行程序。程序运行时要求输入0~100之间的整数。如果输入的不是数字或者数字超出规定范围,则程序会要求重新输入。具体运行结果如下:F:\1>fibonaciPleaseinputanintegern(0<=n<=100):1TheresultofF(n):1Pleaseinputanintegern(0<=n<=100):2TheresultofF(n):1Pleaseinputanintegern(0<=n<=100):3TheresultofF(n):2Pleaseinputanintegern(0<=n<=100):5TheresultofF(n):5Pleaseinputanintegern(0<=n<=100):20TheresultofF(n):6765Pleaseinputanintegern(0<=n<=100):25TheresultofF(n):75025Pleaseinputanintegern(0<=n<=100):30TheresultofF(n):832040Pleaseinputanintegern(0<=n<=100):35TheresultofF(n):9227465Pleaseinputanintegern(0<=n<=100):40TheresultofF(n):102334155Pleaseinputanintegern(0<=n<=100):44TheresultofF(n):701408733operableprogramorbatchfile.Pleaseinputanintegern(0<=n<=100):1111Pleaseinputanintegern(0<=n<=100):5555Pleaseinputanintegern(0<=n<=100):F:\1>程序的改进程序有很多细节的地方值得注意。比如将二进制数显示时数字前面为零的问题。这个问题实际上解决起来很简单,只要判断一下要显示的数是几位数,然后进行分支操作即可。一个问题比较大的地方就是有关溢出的问题。Fibonacci数列的增长相当快,基本上n值每增加5相应的Fibonacci数就会增大10倍。在运算过程中可以发现,16位无符号数所能表示的最大的数为6553532,32位无符号数所能表示的最大的数为,64位无符号数所能表示的最大的数为,而100的Fibonacci数值为,99的Fibonacci数值为。显然,要想真正地完成题目所要求的功能,利用64位二进制来表示都会捉襟见肘。因此本程序只能相对满足问题的要求。对于利用16位无符号数运算,当算到24时就会出现溢出而得不到正确结果。为此,我对程序进行了相应的修改,利用32位无符号数运算,这样就能一定程度上扩大运算范围。当采用32位无符号二进制数运算时,相应的堆栈变化如下图所示:32位字长堆栈状态示意图实际上,要完成程序功能,也不一定非要利用递归调用,单纯的运用循环就可以解决。当然,两种方式各有利弊,在不同的情况下可以选用不同的方式来完成问题功能。本程序虽然不大,但是有很多问题值得我们去思考,存在很多方面需要我们去改进、完善,也存在很多实现方式。总的来说,这个题目还是值得深入思考的。

问题二、从键盘输入一行字符,以’$’结束,查找输入的字符串是否包含’computer’字符串,如果包含,计算字符串个数,并以十进制形式输出问题分析本题目实际上属于相当基本的字符串查找问题。经过分析可以确定,程序同样主要由输入部分、字符串搜索部分和输出部分三部分组成。为了达到题目要求,在程序编写时将程序分为以下几个模块:1模块名:main总控模块输入:从键盘输入字符串,回车作为输入结束输出:在终端屏幕上显示字符串当中含子串’computer’的个数功能:从键盘输入一行字符,以’$’或回车结束,查找输入的字符串是否包含’computer’字符串,如果包含,计算字符串个数,并以十进制形式输出2模块名:input输入:从键盘获得一个字符串输出:将字符串保存到内存单元strin开始的地址当中功能:保存从键盘获得的字符串到内存单元3模块名:srch输入:将内存单元保存的字符串的内容依次读出输出:将字符串中含’computer’的个数存入count内存单元功能:将内存单元保存的字符串的内容依次读出,通过字符串比较,求出字符串中含’computer’的个数,并将结果存入count内存单元4模块名:output功能:将内存单元count中保存的数以十进制方式输出5模块名:binidec输入:从BX取得一个二进制数输出:在终端屏幕上显示此数的十进制形式功能:把BX寄存器中的二进制数转换为十进制数,并在终端屏幕上显示出来调用子模块dec_div用来做除法运算并显示字符6模块名:dec_div输入:从BX取得需转换为十进制的数输出:在屏幕上显示一位十进制数功能:把BX寄存器中的二进制数除以相应的十的幂,并在屏幕上显示一位商。余数保存在BX寄存器当中7模块名:crlf输出:向终端发出一次回车、换行符功能:完成一次回车、换行操作各模块按如下关系进行组织:程序各模块的层次图主要子程序流程图主程序的流程图子过程srch的流程图问题三、建立歌曲文档,按演唱者排序,程序可接收查找的演唱者,并输出所有的歌曲问题分析按照题目要求,可以实现建立好一个歌曲数据文件,文件中以一个歌手的名字及其所有歌曲组成的信息块作为一个数据项;在程序运行时,每次从文件当中读取一个数据项进行相应的操作。由此可知,本程序主要由输入部分、文件处理部分、内存数据处理部分、输出部分四个部分组成。当然,为了完成相应的功能,这几个部分是不能割裂开的。比如在信息查询时,就要将文件处理和内存数据处理有机的结合起来。为了使程序的编写更加清晰,在实现程序时建立了如下几个模块分别进行编写:1模块名:main总控模块输入:从键盘获得歌手名称,如果输入的形式不满足要求则提示错误输出:在终端屏幕上显示该歌手的相关的所有歌曲,若歌手不存在则显示相应提示功能:从键盘获得歌手名称,从建立歌曲文档中查找该演唱者相关的所有歌曲,并从屏幕上显示出来2模块名:query输入:从键盘获得歌手名称,如果输入的形式不满足要求则提示错误输出:在终端屏幕上显示该歌手的相关的所有歌曲,若歌手不存在则显示相应提示功能:显示歌手相应的所有歌曲3模块名:openf功能:打开文件程序当中将要涉及文件操作,兼顾信息的完整性和读写效率,在读文件和写文件时都将一条信息一条信息的进行读写,每条信息包括歌手的名称及其歌曲的名称。每一个歌手预留5个歌曲的位置,歌手姓名和每首歌名用15个字符来表示。为此定义下面的结构结构定义scorestrucsdb15dup('')m1db15dup('')m2db15dup('')m3db15dup('')m4db15dup('')m5db15dup('')scoreends在查找时已歌手姓名为关键字,当查找到姓名一致的歌手时,将他所有的歌曲名称显示出来。宏定义程序当中有到的宏定义及相应的功能如下:showmacroaddrs;显示字符串leadx,addrsmovah,9int21hendmclearmacro;全屏幕清除moval,0movcl,0movch,0movdh,24movdl,79movbh,7movah,6int10hendmnewlinemacro;回车换行pushaxpushdxmovdl,0dhmovah,2int21hmovdl,0ahmovah,2int21hpopdxpopaxendm;-----------------------------------------------------------show_itemmacroaddrslocaliloop,w10,again,exitspushbxpushcxmovbx,0iloop:movdl,addrs[bx];displaychar输出addrs开始的15个字符movah,2int21hincbxcmpbx,15jliloopmovdl,0dhmovah,2int21hmovdl,0ahmovah,2int21hmovcx,1w10:movsi,15cmpaddrs[bx],''jeexitsmovdl,''movah,2int21hmovdl,cladddl,30hmovah,2int21hmovdl,''movah,2int21hagain:movdl,addrs[bx];输出addrs开始的15个字符movah,2int21hincbxdecsijnzagainnewlineinccxcmpcx,5jlew10exits:popcxpopbxendm;---------------------------------------------------------getinmacroaddrs,count2localzeroit,lp,input_end,exitm;将count2个字符输入到addrs为首的内存单元当中,以回车换行作为终止,多余15个字符的忽略pushbxpushaxmovbx,0;addrs为首的15个字符置为空格zeroit:movaddrs[bx],''incbxcmpbx,15jlzeroitmovbx,0;将count2个字符输入到addrs为首的内存单元当中lp:movah,1int21hcmpal,0ah;输入字符若为回车或换行,则输入结束jzinput_endcmpal,0dhjzinput_endmovaddrs[bx],alincbxcmpbx,count2jllpinput_end:;多输入的字符忽略,直到输入为回车换行时输入停止cmpal,0dhjzexitmcmpal,0ahjzexitmmovah,7int21h;无回显的键盘输入jmpinput_endexitm:popaxpopbxendm模块图及流程图各模块及宏按如下层级进行组织:程序的模块层次图主程序的流程图运行结果演示程序的数据文件保存在程序同目录下的文本文件list.txt当中。对源程序进行汇编连结后,直接键入可执行文件的文件名book.exe即可运行程序。程序运行的界面和执行结果如下:MusicListManagementSystemPleaseinputthenameofthesinger:xietingfengThefollowingsongsbelongtothesingerxietingfeng1xiexienideai2bielaiwuyang3huozhe4yuhudie5feizoubukeContinuetosearch?(y/n)yPleaseinputthenameofthesinger:liudehuaThefollowingsongsbelongtothesingerliudehua1wangqingshui2shanghaitan3benxiaohai4zhongguoren5duziqutouhuanContinuetosearch?(y/n)yPleaseinputthenameofthesinger:zhangxueyouThefollowingsongsbelongtothesingerzhangxueyou1wenbie2nihaodu3ainiduoyixieContinuetosearch?(y/n)yPleaseinputthenameofthesinger:zhangxueyouThefollowingsongsbelongtothesingerzhangxueyou1wenbie2nihaodu3ainiduoyixieContinuetosearch?(y/n)yPleaseinputthenameofthesinger:zhangThesingeryouwantdoesnotexistinthedatabase!Continuetosearch?(y/n)nF:\>数据文件的内容程序数据文件的读写是按照严格的方式与数据文件对应的。如果数据文件由于某种原因遭到破坏,哪怕是有一个字符被删除,那么程序就不能得到正确的结果。本程序所用到的数据文件的内容如下:liudehuawangqingshuishanghaitanbenxiaohaizhongguorenduziqutouhuanrenxianqiwoshiyizhiyuxintairuanhenshoushangjuzixiangshuiduimiandenvhaixietingfengxiexienideaibielaiwuyanghuozheyuhudiefeizoubukezhangxueyouwenbienihaoduainiduoyixiezhouhuajianpengyouqinqinbaobeiwangyoucaoguzhennanmian

问题四、建立图书资料文档,要求具有插入、更新、删除、查询等功能,使用菜单提示问题分析按照题目所要求的功能,编写程序时将程序主要分为如下几个模块:1模块名:main输入:从键盘输入代表相应功能选项的字母代号输出:按照选择执行相应的功能,并进行相应的提示、输出相应的信息功能:使用菜单提示,按照用户选择的相应的功能对存有图书资料的文件进行操作,实现图书资料的插入、更新、删除、查询等功能2模块名:list功能:按各式列出文件当中存有的所有图书信息3模块名:query输入:从键盘输入想要查询的图书名输出:从屏幕上显示该图书的相关信息,若不存在则给出相应提示功能:实现图书资料的查询功能4模块名:modify输入:从键盘输入想要修改资料信息的图书名,并根据提示输入新的图书资料信息输出:从屏幕上显示该图书的原有信息,若相关的记录不存在则给出相应提示功能:实现图书资料的修改更新功能5模块名:delete输入:从键盘输入想要修改资料信息的图书名,并根据提示输入新的图书资料信息输出:从屏幕上显示该图书的原有信息,若相关的记录不存在则给出相应提示,用户确认进行删除操作后若操作成功则给出相应的提示信息功能:实现图书资料的删除功能6模块名:insert输入:根据提示从键盘输入想要添加的图书资料信息输出:操作完成后给出相应的提示信息功能:实现图书资料的插入功能7模块名:get_rec功能:提示用户按格式输入新的图书信息8模块名:openf功能:打开程序目录下的图书资料文件list.txt程序当中将要涉及文件操作,兼顾信息的完整性和读写效率,在读文件和写文件时都将一条信息一条信息的进行读写,每条信息代表一条书目的所有信息,这样的每条信息包括书名、作者、出版社、价格等。由此定义如下的结构:scorestrucnamesdbnnodup('')authordbanodup('')publishdbpnodup('')isbndbinodup('')pricedbprcnodup('')scoreends其中nno、ano、pno、ino、prcno是为了便于程序的扩展而定义的常量。本程序中相关的常量定义及含义如下itemnoEQU68;读写文件操作时处理的每条信息的长度nnoEQU15;信息当中书名所占的长度anoEQU15;信息当中作者所占的长度pnoEQU15;信息当中出版社所占的长度inoEQU15;信息当中ISBN所占的长度prcnoEQU8;信息当中价格所占的长度宏定义值得一提的是程序中删除功能的实现。本程序在实现删除功能时,先建立了一个临时文件,将当前文件当中的信息一项一项的存入到临时文件,而要删除的信息不保存。这样,当删除部分完成时,只需将临时文件替换现有数据文件即可。宏定义为了使程序看起来比较简洁,同时也为了使程序便与扩展,程序设计当中设计并使用了宏。宏的使用将为程序编写带来很大方便,尤其是传递参数的功能是子程序所不可比拟的。本程序编写当中用到的宏定义其相应功能如下:showmacroaddrs;显示字符串leadx,addrsmovah,9int21hendmset_pmacromovah,2;置光标位置movdh,0;行movdl,0;列movbh,0;页号int10hendmset_p0macro;光标置于第11行,第2列movah,2movdh,6movdl,0movbh,0int10hendmclearmacro;全屏幕清除moval,0movcl,0movch,0movdh,24movdl,79movbh,7movah,6int10hmovah,2;置光标位置movdh,0;行movdl,0;列movbh,0;页号int10hendmnewlinemacro;回车换行pushaxpushdxmovdl,0dhmovah,2int21hmovdl,0ahmovah,2int21hpopdxpopaxendm;-----------------------------------------------------------showmenumacroclearshowm1showm2showm3showm4showm5showm6showm7showm8showm9showm10endm;-----------------------------------------------------------show_itemmacroaddrslocaliloop,w10,againsipushbxpushcxmovdl,'';输出1个空格movah,2int21hmovbx,0iloop:movdl,addrs[bx];displaychar输出addrs开始的nno个字符movah,2int21hincbxcmpbx,nnojliloopmovcx,4;输出格式:01234567w10:movdl,'';输出水平制表符movah,2int21hmovsi,ano;输出addrs开始的ano个字符againsi:movdl,addrs[bx]movah,2int21hincbxdecsicmpsi,0jneagainsiloopw10popcxpopbxendm;---------------------------------------------------------getinmacroaddrs,count2localzeroit,lp,input_end,exitg;将count2个字符输入到addrs为首的内存单元当中,以回车换行作为终止,多余15个字符的忽略pushbxpushaxmovbx,0;addrs为首的15个字符置为空格zeroit:movaddrs[bx],''incbxcmpbx,nnojlzeroitmovbx,0;将count2个字符输入到addrs为首的内存单元当中lp:movah,1int21hcmpal,0ah;输入字符若为回车或换行,则输入结束jzinput_endcmpal,0dhjzinput_endmovaddrs[bx],alincbxcmpbx,count2jllpinput_end:;多输入的字符忽略,直到输入为回车换行时输入停止cmpal,0dhjzexitgcmpal,0ahjzexitgmovah,7int21h;无回显的键盘输入jmpinput_endexitg:popaxpopbxendm模块图及程序流程图程序当中使用的模块及宏的相应关系可用下面的层次图来表示,从中我们可以很明显地看出程序各个部分的关系。程序各模块的层次图主程序的流程图运行结果演示程序的数据文件保存在程序同目录下的文本文件list.txt当中。对源程序进行汇编连结后,直接键入可执行文件的文件名book.exe即可运行程序。程序运行的界面和执行结果如下:WelcometotheBookInformationManagementSystem!DesignedandproducedbyZhangHuanrenFromInformationScience&EngineeringCollegeofCSU(c)Allrightsreserved2005-2006**************************************************************BookInformationManagementSystem ** **Insert (i) List(l) **Modify (m)Help(h) **Delete (d) Query(q) **Exit (e) ** **Pleasechoosecorrespondingfunction... **************************************************************Thebookinformationyouwantislistedasfollow:BookNameAuthorPublisherISBNpricewodedaxuegaorejishangwuyinshua987984611grexindongfangshijie167987933shuxuejianmojingqiyuanqinghua+989789448.6IBM_PCshenmeimingqinghuadaxue98974646934.8shubaosdfwang1549781414.5Pressanykeytoreturn...Pleaseinputtheinformationofthebookyouwanttoinsert:BookName:hongyuheiAuthor:tiantangPublisher:x

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论