您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 汇编课程设计-字符串查找与替换-何荣贤
《汇编语言程序设计》课程设计题目:字符串查找与替换专业:计算机科学与技术学号:2010810071姓名:何荣贤2011-2012学年第一学期一.设计目的汇编语言课程设计是对所学课程内容全面、系统的总结、巩固和提高的一项课程实践活动。根据汇编语言的特点,选择相应的题目,在老师的指导下,由学生独立完成。课程设计要求同学们熟悉汇编语言的编程,BIOS中断调用、系统功能调用、磁盘数据的查询、存取等相关知识。通过课程设计,一方面提高运用汇编语言编程解决实际问题的能力,另一方面使同学们更深入的了解计算机系统内部的有关知识,为以后的学习和系统开发奠定良好的基础。二.设计内容3.功能描述:1.对已有的文件(预先建立)内容进行扫描统计。(字符数,行数)2.字符串查找操作3.字符串替换操作,替换后的文件内容另存入一结果文件,原文件内容不变4.显示结果文件内容编程要点:1.目标文件及结果文件必须和程序文件在同一目录下(当前目录)2.原文件内容必须50行以上3.字符串查找、替换过程要显示当前行及前几行、后几行的内容,以便按键选择继续查找或是否替换代码4.字符串查找或者替换操作结束后,要显示查找到的字符串个数、已经替换的字符串个数。三.程序设计原理1.主程序程序开始打开原文件,将文件内容读到内存缓冲区TEXT后,关闭原文件。接着显示主菜单,接收用户输入一个字符,实现不同的功能:a.输入‘1’,则调用子程序STATISTICS,对TEXT中的文件内容进行扫面统计(字符数、行数);b.输入‘2’,则调用子程序SEARCH,进行字符串的查找操作;c.输入‘3’,则调用子程序REPLACE,进行字符串的替换操作;d.输入‘4’,则调用子程序DISPLAY,将TEXT的内容显示出来;e.输入‘5’,则退出程序;f.输入其他字符,则显示提示信息,重新输入。2.子程序STATISTICS由于显示屏为25*80,每行至多显示80个字符,所以要依次对TEXT中的每个字节进行扫描,使用CMP指令判断该字节是否为空格符、回车符、换行符:a.若为空格符则BX加1,再比较BX是否小于80,小于则继续判断下一个字节,等于则将BX清零,统计的行数LINE_COUNT加1,再继续判断下一个字节;b.若为回车符则直接判断下一个字节;c.若为换行符则将BX清零,统计的行数LINE_COUNT加1,再继续判断下一个字节;d.若为字符,则统计的字符数CHAR_COUNT加1,BX加1,再比较BX是否小于80,小于则继续判断下一个字节,等于则将BX清零,统计的行数LINE_COUNT加1,再继续判断下一个字节;统计完成后调用子程序BINIDEC用十进制显示统计结果。3.子程序SEARCH首先接收用户要查找的字符串,然后通过循环控制程序,对TEXT进行查找。用CMPSB指令进行字符串比较,若匹配的话调用子程序SHOW显示前几行、当前行、后几行,并调整剩余比较次数和下一次的比较位置,提示用户是否继续查找;若不匹配则进行下一次查找,直到查找结束。最后显示找到的字符串个数。4.子程序REPLACE首先接收用户要查找的字符串,然后通过循环控制程序,对TEXT进行查找。用CMPSB指令进行字符串比较。若匹配的话调用子程序SHOW显示前几行、当前行、后几行,并调整剩余比较次数和下一次的比较位置,提示用户输入一个字符:若为‘1’,则继续查找;若为‘2’,则调用子程序TIHUAN,进行替换操作;若为‘3’,则调用子程序REPLACE_ALL进行全部替换;若为‘4’,则退出查找;若为其他字符则重新输入。若不匹配则进行下一次查找,直到查找结束。最后显示找到的字符串个数和替换的字符串个数,并调用子程序SAVE把替换后的文件内容写入结果文件5.子程序RPLACE_ALL通过循环控制程序,对TEXT进行查找。用CMPSB指令进行字符串比较。若匹配的话调用子程序TIHUAN,进行替换操作,若不匹配则继续查找,直到查找结束6.子程序DISPLAY由于显示屏为25*80,每行至多显示80个字符,所以要依次对TEXT中的每个字节进行扫描,使用CMP指令判断该字节是否为字符、空格符、回车符、换行符,使每一屏显示20行内容,提示用户输入任意键显示下一页。7.子程序TIHUAN当两个字符串长度相等时,直接用MOVSB指令进行替换;若原字符串比替换的字符串长,则先用MOVSB指令进行替换,然后再把后面的内容前移接上,同时调整TEXT总字节个数;若原字符串比替换的字符串短,则先把字符串后面的内容后移,使替换的字符串不会覆盖原有的内容,同时调整TEXT总字节个数8.子程序SHOW在查找操作时显示找到字符串的前几行、当前行、后几行,在显示找到的字符串时改变字符串的背景颜色,使查找简单明了。9.子程序BINIDEC将BX中的二进制数以十进制的形式显示出来10.宏定义CLS清屏,并将光标定位于0行0列11宏定义PRINT输出字符串12.宏定义INPUT输入字符串四.程序流程图YNYNYNYNNY开始打开原文件读文件关闭文件显示主菜单输入一个字符是1?结束调用STATISTICS扫描统计是2?是3?是4?是5?调用SEARCH字符串查找调用REPLACE字符串替换调用DISPLAY显示文件内容YNYNYNNYNYSTATISTICS取文件的第一个字节是否为空格符?是否为回车符?是否为换行符?总字符个数加1INCBXBX等于80?BX清零总行数加1RET取下一个字节统计结束?显示总字符个数、总行数NYYNNYNSEARCH输入字符串计算外循环次数比较匹配?调用SHOW显示前几行、当前行后几行显示找到的个数显示子菜单2输入一个字符是1?是2?循环结束?调整外循环次数RET调整下次比较位置NYYNYNYNNNYYREPLACE输入查找的字符串输入替换后的字符串计算外循环次数比较匹配?调用SHOW显示前几行、当前行后几行显示找到的个数显示替换的个数显示子菜单输入一个字符是1?是2?循环结束?调整外循环次数调整下次比较位置RET调用TIHUAN是3?是4?调用REPLACE_ALL调用SAVE写入结果文件NYNNYREPLACE_ALL计算外循环次数比较匹配?调用TIHUAN循环结束?调整外循环次数RET调整下次比较位置YNYTIHUAN串1长度=串2长度?串1长度串2长度?替换调整总字节数替换调整总字节数替换调整总字节数已替换字符串个数加1被替换的字符串后的内容前移被替换的字符串后的内容后移RETYNYNYNYNNYDISPLAYCLS取文件的第一个字节BL小于80?是否为回车符?是否为换行符?BL加1BL清零BH加1BH小于20?BH清零输入一个字符CLSRET取下一个字节统计结束?CLS显示该字符SHOWSAVERETRET显示找到的字符串的前几行用不同的背景颜色显示找到的字符串显示找到的字符串的后几行新建文件写入文件关闭五.源程序DATASSEGMENTNUM1DB?FCODE1DW?FCODE2DW?LINE_COUNTDW0;行数ALL_COUNTDW0;总字节数CHAR_COUNTDW0;总字符数SEARCH_COUNTDW0;找到的字符串个数REPLACE_COUNTDW0;已替换的字符串个数FNAME1DB'D:\sorce.TXT',0;原文件路径FNAME2DB'D:\result.TXT',0;结果文件路径TEXTDB500DUP(80DUP(''))STRING1DB16,?CHUAN1DB15DUP(?)STRING2DB16,?CHUAN2DB15DUP(?)WINDOW1DB13,10,13,10,'/************|MENU|***********\',13,10DB'|1---STATISTICS|',13,10DB'|2---SEARCH|',13,10DB'|3---REPLACE|',13,10DB'|4---DISPLAY|',13,10DB'|5---QUIT|',13,10DB'\*******************************/',13,10,'SELET:','$'WINDOW2DB13,10,13,10,'|-----------|SEARCH|------------|',13,10DB'|1---SEARCHNEXTONE|',13,10DB'|2---ENDSEARCH|',13,10DB'|---------------------------------|',13,10,'SELET:','$'WINDOW3DB13,10,13,10,'|-----------|REPLACE|-----------|',13,10DB'|1---SEARCHNEXTONE|',13,10DB'|2---REPLACE|',13,10DB'|3---REPLACEALL|',13,10DB'|4---END|',13,10DB'|---------------------------------|',13,10,'SELET:','$'STR1DB'---SEARCH:','$'STR2DB'---REPLACEWITH:','$'STR3DB'---THECHAR_COUNTIS:','$'STR4DB'---THELINE_COUNTIS:','$'STR5DB'---THENUMBEROFCHARACTERSTRINGHAVEFOUNDIS:','$'STR6DB'---THENUMBEROFCHARACTERSTRINGREPLACEDIS:','$'STR7DB'---PRESSANYKEYTOLOOKNEXTPAGE:','$'STR8DB'---THATISALL!',13,10,'---PRESSANYKEYTORETURNMENU:','$'STR9DB13,10,13,10,13,10,'$'ERR_CRDB'CREATEERROR!',13,10,'$'ERR_OPDB'OPENERROR!',13,10,'$'ERR_CLDB'CLOSEERROR!',13,10,'$'ERR_RDDB'READERROR!',13,10,'$'ERR_WRDB'WRITEERROR!',13,10,'$'ERRORDB'ERROR!YOUSHOULDINPUT(1-5)!',13,10,'$'ERROR1DB'ERROR!YOUSHOULDINPUT(1-2)!',13,10,'$'ERROR2DB'ERROR!YOUSHOULDINPUT(1-4)!',13,10,'$'CRLFDB13,10,'$'DATASENDS;***********************************************************************PRINTMACROX1;宏显示字符串LEADX,X1MOVAH,9INT21HENDMINPUTMACROX1;宏输入字符串LEADX,X1MOVAH,10INT21HENDMCLSMACRO;清屏并把光标定在0行0列MOVAH,6MOVAL,0MOVBH,7MOVCH,0MOVCL,0MOVDH,24MOVDL,79INT10HMOVBH,0MOVDX,0MOVAH,2INT10HENDM;***********************************************************************CODESSEGMENTASSUMECS:CODES,DS:DATAS,ES:DATASSTART:MOVAX,DATASMOVDS,AXMOVES,AXLEADI,TEXTLEADX,FNAME1;打开文件MOVAH,3DHMOVAL,0INT21HJNCOP_WJ;打开文件成功则转OP_WJPRINTERR_OP;打开文件失败则显示出错信息,退出程序JMPL6OP_WJ:MOVFCODE1,AX;保存文件代号RD_WJ:MOVAH,3FH;读文件MOVDX,DIMOV
本文标题:汇编课程设计-字符串查找与替换-何荣贤
链接地址:https://www.777doc.com/doc-4411671 .html