匯編課程設(shè)計(jì)-字符串查找與替換_第1頁(yè)
已閱讀1頁(yè),還剩30頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p>  《匯編語(yǔ)言程序設(shè)計(jì)》課程設(shè)計(jì)</p><p>  題目:字符串查找與替換</p><p>  專(zhuān)業(yè):計(jì)算機(jī)科學(xué)與技術(shù) </p><p>  學(xué)號(hào):2010810071 </p><p>  姓名: </p><p>  2011-2012學(xué)年第一學(xué)期</p

2、><p><b>  一.設(shè)計(jì)目的</b></p><p>  匯編語(yǔ)言課程設(shè)計(jì)是對(duì)所學(xué)課程內(nèi)容全面、系統(tǒng)的總結(jié)、鞏固和提高的一項(xiàng)課程實(shí)踐活動(dòng)。根據(jù)匯編語(yǔ)言的特點(diǎn),選擇相應(yīng)的題目,在老師的指導(dǎo)下,由學(xué)生獨(dú)立完成。課程設(shè)計(jì)要求同學(xué)們熟悉匯編語(yǔ)言的編程,BIOS中斷調(diào)用、系統(tǒng)功能調(diào)用、磁盤(pán)數(shù)據(jù)的查詢(xún)、存取等相關(guān)知識(shí)。通過(guò)課程設(shè)計(jì),一方面提高運(yùn)用匯編語(yǔ)言編程解決實(shí)際問(wèn)題的能力,

3、另一方面使同學(xué)們更深入的了解計(jì)算機(jī)系統(tǒng)內(nèi)部的有關(guān)知識(shí),為以后的學(xué)習(xí)和系統(tǒng)開(kāi)發(fā)奠定良好的基礎(chǔ)。 </p><p><b>  二.設(shè)計(jì)內(nèi)容3.</b></p><p>  功能描述: 1. 對(duì)已有的文件(預(yù)先建立)內(nèi)容進(jìn)行掃描統(tǒng)計(jì)。(字符數(shù),行數(shù)) 2. 字符串查找操作3. 字符串替換操作,替換后的文件內(nèi)容另存入一結(jié)果文件,原文件內(nèi)容

4、不變 4. 顯示結(jié)果文件內(nèi)容 編程要點(diǎn): 1. 目標(biāo)文件及結(jié)果文件必須和程序文件在同一目錄下(當(dāng)前目錄) 2. 原文件內(nèi)容必須50行以上 3. 字符串查找、替換過(guò)程要顯示當(dāng)前行及前幾行、后幾行的內(nèi)容,以便按鍵選擇繼續(xù)查找或是否替換代碼 4. 字符串查找或者替換操作結(jié)束后,要顯示查找到的字符串個(gè)數(shù)、已經(jīng)替換的字符串個(gè)數(shù)。</p><p>&l

5、t;b>  三.程序設(shè)計(jì)原理</b></p><p><b>  1.主程序</b></p><p>  程序開(kāi)始打開(kāi)原文件,將文件內(nèi)容讀到內(nèi)存緩沖區(qū)TEXT后,關(guān)閉原文件。接著顯示主菜單,接收用戶輸入一個(gè)字符,實(shí)現(xiàn)不同的功能:</p><p>  a.輸入‘1’,則調(diào)用子程序STATISTICS,對(duì)TEXT中的文件內(nèi)容進(jìn)行掃

6、面統(tǒng)計(jì)(字符數(shù)、行數(shù));</p><p>  b.輸入‘2’,則調(diào)用子程序SEARCH,進(jìn)行字符串的查找操作;</p><p>  c.輸入‘3’,則調(diào)用子程序REPLACE,進(jìn)行字符串的替換操作;</p><p>  d.輸入‘4’,則調(diào)用子程序DISPLAY,將TEXT的內(nèi)容顯示出來(lái);</p><p>  e.輸入‘5’,則退出程序;&l

7、t;/p><p>  f.輸入其他字符,則顯示提示信息,重新輸入。</p><p>  2.子程序STATISTICS</p><p>  由于顯示屏為25*80,每行至多顯示80個(gè)字符,所以要依次對(duì)TEXT中的每個(gè)字節(jié)進(jìn)行掃描,使用CMP指令判斷該字節(jié)是否為空格符、回車(chē)符、換行符:</p><p>  a.若為空格符則BX加1,再比較BX是否小

8、于80,小于則繼續(xù)判斷下一個(gè)字節(jié),等于則將BX清零,統(tǒng)計(jì)的行數(shù)LINE_COUNT加1,再繼續(xù)判斷下一個(gè)字節(jié);</p><p>  b.若為回車(chē)符則直接判斷下一個(gè)字節(jié);</p><p>  c.若為換行符則將BX清零,統(tǒng)計(jì)的行數(shù)LINE_COUNT加1,再繼續(xù)判斷下一個(gè)字節(jié);</p><p>  d.若為字符,則統(tǒng)計(jì)的字符數(shù)CHAR_COUNT加1,BX加1,再比較

9、BX是否小于80,小于則繼續(xù)判斷下一個(gè)字節(jié),等于則將BX清零,統(tǒng)計(jì)的行數(shù)LINE_COUNT加1,再繼續(xù)判斷下一個(gè)字節(jié);</p><p>  統(tǒng)計(jì)完成后調(diào)用子程序BINIDEC用十進(jìn)制顯示統(tǒng)計(jì)結(jié)果。</p><p>  3.子程序SEARCH</p><p>  首先接收用戶要查找的字符串,然后通過(guò)循環(huán)控制程序,對(duì)TEXT進(jìn)行查找。用CMPSB指令進(jìn)行字符串比較,若

10、匹配的話調(diào)用子程序SHOW顯示前幾行、當(dāng)前行、后幾行,并調(diào)整剩余比較次數(shù)和下一次的比較位置,提示用戶是否繼續(xù)查找;若不匹配則進(jìn)行下一次查找,直到查找結(jié)束。最后顯示找到的字符串個(gè)數(shù)。</p><p>  4.子程序REPLACE</p><p>  首先接收用戶要查找的字符串,然后通過(guò)循環(huán)控制程序,對(duì)TEXT進(jìn)行查找。用CMPSB指令進(jìn)行字符串比較。</p><p>

11、  若匹配的話調(diào)用子程序SHOW顯示前幾行、當(dāng)前行、后幾行,并調(diào)整剩余比較次數(shù)和下一次的比較位置,提示用戶輸入一個(gè)字符:</p><p>  若為‘1’,則繼續(xù)查找;</p><p>  若為‘2’,則調(diào)用子程序TIHUAN,進(jìn)行替換操作;</p><p>  若為‘3’,則調(diào)用子程序REPLACE_ALL進(jìn)行全部替換;</p><p>  

12、若為‘4’,則退出查找; </p><p>  若為其他字符則重新輸入。</p><p>  若不匹配則進(jìn)行下一次查找,直到查找結(jié)束。</p><p>  最后顯示找到的字符串個(gè)數(shù)和替換的字符串個(gè)數(shù),并調(diào)用子程序SAVE把替換后的文件內(nèi)容寫(xiě)入結(jié)果文件</p><p>  5.子程序RPLACE_ALL</p><p>

13、  通過(guò)循環(huán)控制程序,對(duì)TEXT進(jìn)行查找。用CMPSB指令進(jìn)行字符串比較。若匹配的話調(diào)用子程序TIHUAN,進(jìn)行替換操作,若不匹配則繼續(xù)查找,直到查找結(jié)束</p><p>  6.子程序DISPLAY</p><p>  由于顯示屏為25*80,每行至多顯示80個(gè)字符,所以要依次對(duì)TEXT中的每個(gè)字節(jié)進(jìn)行掃描,使用CMP指令判斷該字節(jié)是否為字符、空格符、回車(chē)符、換行符,使每一屏顯示20行內(nèi)

14、容,提示用戶輸入任意鍵顯示下一頁(yè)。</p><p>  7.子程序TIHUAN</p><p>  當(dāng)兩個(gè)字符串長(zhǎng)度相等時(shí),直接用MOVSB指令進(jìn)行替換;若原字符串比替換的字符串長(zhǎng),則先用MOVSB指令進(jìn)行替換,然后再把后面的內(nèi)容前移接上,同時(shí)調(diào)整TEXT總字節(jié)個(gè)數(shù);若原字符串比替換的字符串短,則先把字符串后面的內(nèi)容后移,使替換的字符串不會(huì)覆蓋原有的內(nèi)容,同時(shí)調(diào)整TEXT總字節(jié)個(gè)數(shù)<

15、/p><p><b>  8.子程序SHOW</b></p><p>  在查找操作時(shí)顯示找到字符串的前幾行、當(dāng)前行、后幾行,在顯示找到的字符串時(shí)改變字符串的背景顏色,使查找簡(jiǎn)單明了。</p><p>  9.子程序BINIDEC</p><p>  將BX中的二進(jìn)制數(shù)以十進(jìn)制的形式顯示出來(lái)</p><p

16、><b>  10.宏定義CLS</b></p><p>  清屏,并將光標(biāo)定位于0行0列</p><p>  11宏定義PRINT</p><p><b>  輸出字符串</b></p><p>  12.宏定義INPUT</p><p><b>  輸入字

17、符串</b></p><p><b>  四.程序流程圖</b></p><p><b>  Y</b></p><p><b>  N</b></p><p><b>  Y</b></p><p><b>

18、  N</b></p><p><b>  Y</b></p><p><b>  N</b></p><p><b>  Y</b></p><p><b>  N</b></p><p><b>  N&l

19、t;/b></p><p><b>  Y</b></p><p><b>  Y</b></p><p><b>  N</b></p><p><b>  Y</b></p><p><b>  N</b&

20、gt;</p><p><b>  Y</b></p><p><b>  N</b></p><p><b>  N</b></p><p><b>  Y</b></p><p><b>  N</b>&l

21、t;/p><p><b>  Y</b></p><p><b>  N</b></p><p><b>  Y</b></p><p><b>  Y</b></p><p><b>  N</b></p&

22、gt;<p><b>  N</b></p><p>  Y N</p><p><b>  N</b></p><p><b>  Y</b></p><p><b>  Y</b>&l

23、t;/p><p><b>  N</b></p><p><b>  Y</b></p><p>  N </p><p><b>  Y</b></

24、p><p><b>  N</b></p><p>  N N</p><p>  Y Y</p><p>  N

25、 </p><p><b>  Y</b></p><p>  N N</p><p><b>  Y</b></p><p><b>  Y</b></p><p><b>  N<

26、;/b></p><p><b>  Y</b></p><p><b>  Y</b></p><p><b>  N</b></p><p><b>  Y</b></p><p>  N &

27、lt;/p><p><b>  Y</b></p><p><b>  N</b></p><p><b>  Y</b></p><p><b>  N</b></p><p><b>  N</b></p

28、><p><b>  Y</b></p><p><b>  五.源程序</b></p><p>  DATAS SEGMENT</p><p>  NUM1 DB ?</p><p>  FCODE1 DW ?</p><p>  FCODE2 DW

29、 ?</p><p>  LINE_COUNT DW 0 ;行數(shù)</p><p>  ALL_COUNT DW 0 ;總字節(jié)數(shù)</p><p>  CHAR_COUNT DW 0 ;總字符數(shù)</p><p>  SEARCH_COUNT DW 0 ;找到的字符串個(gè)數(shù)</p><p>

30、;  REPLACE_COUNT DW 0 ;已替換的字符串個(gè)數(shù)</p><p>  FNAME1 DB 'D:\sorce.TXT',0 ;原文件路徑</p><p>  FNAME2 DB 'D:\result.TXT',0 ;結(jié)果文件路徑</p><p>  TEXT DB 500 DUP(80 DUP(

31、' ')) </p><p>  STRING1 DB 16,?</p><p>  CHUAN1 DB 15 DUP(?)</p><p>  STRING2 DB 16,?</p><p>  CHUAN2 DB 15 DUP(?)</p><p>  WINDOW1 DB 13,10,13,10

32、,' /************| MENU |***********\',13,10</p><p>  DB '| 1---STATISTICS |',13,10</p><p>  DB '| 2---SEARCH |',13,10</p><

33、;p>  DB '| 3---REPLACE |',13,10</p><p>  DB '| 4---DISPLAY |',13,10</p><p>  DB '| 5---QUIT |',13,10<

34、/p><p>  DB ' \*******************************/',13,10,' SELET:','$'</p><p>  WINDOW2 DB 13,10,13,10,'|-----------| SEARCH |------------|',13,10</p><p>

35、;  DB '| 1---SEARCH NEXT ONE |',13,10</p><p>  DB '| 2---END SEARCH |',13,10 </p><p>  DB '|---------------------------------|',13,10,'

36、 SELET:','$'</p><p>  WINDOW3 DB 13,10,13,10,'|-----------| REPLACE |-----------|',13,10</p><p>  DB '| 1---SEARCH NEXT ONE |',13,10</p><p>

37、  DB '| 2---REPLACE |',13,10</p><p>  DB '| 3---REPLACE ALL |',13,10</p><p>  DB '| 4---END |',13,10 </p&

38、gt;<p>  DB '|---------------------------------|',13,10,' SELET:','$'</p><p>  STR1 DB '---SEARCH:','$'</p><p>  STR2 DB '---REPLACE WITH:'

39、;,'$'</p><p>  STR3 DB '---THE CHAR_COUNT IS:','$'</p><p>  STR4 DB '---THE LINE_COUNT IS:','$'</p><p>  STR5 DB '---THE NUMBER OF CHARAC

40、TER STRING HAVE FOUND IS:','$' </p><p>  STR6 DB '---THE NUMBER OF CHARACTER STRING REPLACED IS:','$' </p><p>  STR7 DB '---PRESS ANY KEY TO LOOK NEXT PAGE:',

41、'$'</p><p>  STR8 DB '---THAT IS ALL !',13,10,'---PRESS ANY KEY TO RETURN MENU:','$'</p><p>  STR9 DB 13,10,13,10,13,10,'$' </p><p>  ERR_

42、CR DB 'CREATE ERROR!',13,10,'$' </p><p>  ERR_OP DB 'OPEN ERROR!',13,10,'$'</p><p>  ERR_CL DB 'CLOSE ERROR!',13,10,'$'</p><p>  ERR_

43、RD DB 'READ ERROR!',13,10,'$'</p><p>  ERR_WR DB 'WRITE ERROR!',13,10,'$' </p><p>  ERROR DB 'ERROR!YOU SHOULD INPUT (1-5) !',13,10,'$' <

44、/p><p>  ERROR1 DB 'ERROR!YOU SHOULD INPUT (1-2) !',13,10,'$'</p><p>  ERROR2 DB 'ERROR!YOU SHOULD INPUT (1-4) !',13,10,'$'</p><p>  CRLF DB 13,10,

45、9;$' </p><p>  DATAS ENDS </p><p>  ;*********************************************************************** </p><p>  PRINT MACRO X1 ;宏顯示字符串</p>&

46、lt;p><b>  LEA DX,X1</b></p><p><b>  MOV AH,9</b></p><p><b>  INT 21H</b></p><p><b>  ENDM </b></p><p>  INPUT MACRO

47、X1 ;宏輸入字符串</p><p><b>  LEA DX,X1</b></p><p><b>  MOV AH,10</b></p><p><b>  INT 21H</b></p><p><b>  ENDM </b>&

48、lt;/p><p>  CLS MACRO ;清屏并把光標(biāo)定在0行0列</p><p><b>  MOV AH,6</b></p><p><b>  MOV AL,0</b></p><p><b>  MOV BH,7</b></p>

49、;<p><b>  MOV CH,0</b></p><p><b>  MOV CL,0</b></p><p><b>  MOV DH,24</b></p><p><b>  MOV DL,79</b></p><p><b&

50、gt;  INT 10H</b></p><p><b>  MOV BH,0</b></p><p><b>  MOV DX,0</b></p><p><b>  MOV AH,2</b></p><p><b>  INT 10H</b>

51、;</p><p><b>  ENDM</b></p><p>  ;*********************************************************************** </p><p>  CODES SEGMENT</p><p>  ASSUME CS:CODES,DS

52、:DATAS,ES:DATAS </p><p><b>  START:</b></p><p>  MOV AX,DATAS</p><p><b>  MOV DS,AX</b></p><p><b>  MOV ES,AX</b></p><p&g

53、t;  LEA DI,TEXT </p><p>  LEA DX,FNAME1 ;打開(kāi)文件 </p><p>  MOV AH,3DH </p><p><b>  MOV AL,0</b></p><p>  INT 21H

54、</p><p>  JNC OP_WJ ;打開(kāi)文件成功則轉(zhuǎn)OP_WJ</p><p>  PRINT ERR_OP ;打開(kāi)文件失敗則顯示出錯(cuò)信息,退出程序 </p><p>  JMP L6 </p><p>  OP_WJ:MOV FCODE1,AX ;保存文件代號(hào) </p

55、><p>  RD_WJ:MOV AH,3FH ;讀文件</p><p><b>  MOV DX,DI</b></p><p>  MOV BX,FCODE1</p><p>  MOV CX,80 </p><p>  INT 21H </p>&l

56、t;p>  JNC PDUAN ;讀文件成功轉(zhuǎn)PDUAN</p><p>  PRINT ERR_RD</p><p><b>  JMP L6</b></p><p>  PDUAN:MOV CX,AX ;判斷是否讀完</p><p>  ADD DI,AX </p&g

57、t;<p>  JCXZ CLOSE ;讀完轉(zhuǎn)CLOSE </p><p>  JMP RD_WJ ;未讀完轉(zhuǎn)RD_WJ繼續(xù)讀取</p><p>  CLOSE:LEA SI,TEXT</p><p>  SUB DI,SI </p><p>  MOV ALL_C

58、OUNT,DI ;文件總字節(jié)數(shù)</p><p>  MOV AH,3EH ;讀完關(guān)閉文件 </p><p>  MOV BX,FCODE1 </p><p>  INT 21H </p><p><b>  JNC L1</b></p><p>  P

59、RINT ERR_CL</p><p>  JMP L6 ;關(guān)閉失敗顯示出錯(cuò)信息,退出程序 </p><p>  L1:PRINT WINDOW1 </p><p><b>  MOV AH,1</b></p><p><b>  INT 21H</b></p&

60、gt;<p>  CMP AL,'1'</p><p><b>  JNE L2</b></p><p>  CALL STATISTICS ;掃描統(tǒng)計(jì)</p><p><b>  JMP L1</b></p><p>  L2:CMP AL,'2'

61、;</p><p><b>  JNE L3</b></p><p>  CALL SEARCH ;查找</p><p><b>  JMP L1</b></p><p>  L3:CMP AL,'3'</p><p><b>  JN

62、E L4</b></p><p>  CALL REPLACE ;替換</p><p><b>  JMP L1</b></p><p>  L4:CMP AL,'4'</p><p>  JNE L5 </p><p>  CALL DISP

63、LAY ;顯示結(jié)果文件內(nèi)容</p><p><b>  JMP L1</b></p><p>  L5:CMP AL,'5'</p><p><b>  JE L6 </b></p><p>  PRINT ERROR </p><

64、;p>  JMP L1 ;輸入錯(cuò)誤顯示提示信息,重新輸入</p><p>  L6:MOV AH,4CH</p><p><b>  INT 21H</b></p><p>  ;**************************掃描統(tǒng)計(jì) STATISTICS**************************

65、</p><p>  STATISTICS PROC; </p><p>  MOV CHAR_COUNT,0</p><p>  MOV LINE_COUNT,0</p><p>  MOV CX,ALL_COUNT</p><p><b>  XOR BX,BX</b></p>

66、<p>  LEA SI,TEXT</p><p>  S0:CMP BYTE PTR [SI],20H ;若為空格符轉(zhuǎn)S1</p><p><b>  JE S1</b></p><p>  CMP BYTE PTR [SI],13 ;若為回車(chē)符轉(zhuǎn)T2</p><p><b&g

67、t;  JE T2</b></p><p>  CMP BYTE PTR [SI],10 ;若為換行符轉(zhuǎn)S2</p><p><b>  JE S2</b></p><p>  INC CHAR_COUNT</p><p><b>  S1:INC SI</b></p&

68、gt;<p><b>  INC BX</b></p><p>  CMP BX,80 </p><p><b>  JB T1</b></p><p><b>  XOR BX,BX</b></p><p>  INC LINE

69、_COUNT</p><p>  T1:LOOP S0</p><p>  INC LINE_COUNT</p><p><b>  JMP S3</b></p><p>  S2:INC LINE_COUNT</p><p><b>  T2:INC SI</b></

70、p><p><b>  XOR BX,BX</b></p><p><b>  LOOP S0</b></p><p>  S3:PRINT CRLF ;顯示字符數(shù)和行數(shù)</p><p>  PRINT STR3</p><p>  MOV BX,

71、CHAR_COUNT</p><p>  CALL BINIDEC</p><p>  PRINT CRLF </p><p>  PRINT STR4</p><p>  MOV BX,LINE_COUNT</p><p>  CALL BINIDEC</p><p><b>  R

72、ET</b></p><p>  STATISTICS ENDP </p><p>  ;***************************二進(jìn)制轉(zhuǎn)十進(jìn)制并顯示************************* </p><p>  BINIDEC PROC ;入口參數(shù)為BX</p><p&g

73、t;  MOV CX,10000</p><p>  CALL DEC_DIV</p><p>  MOV CX,1000</p><p>  CALL DEC_DIV</p><p>  MOV CX,100</p><p>  CALL DEC_DIV</p><p><b>  

74、MOV CX,10</b></p><p>  CALL DEC_DIV</p><p><b>  MOV CX,1</b></p><p>  CALL DEC_DIV</p><p><b>  RET</b></p><p>  BINIDEC ENDP&

75、lt;/p><p>  DEC_DIV PROC</p><p><b>  MOV AX,BX</b></p><p><b>  MOV DX,0</b></p><p><b>  DIV CX</b></p><p><b>  MOV B

76、X,DX</b></p><p><b>  MOV DL,AL</b></p><p>  ADD DL,30H</p><p><b>  MOV AH,2</b></p><p><b>  INT 21H</b></p><p>&l

77、t;b>  RET</b></p><p>  DEC_DIV ENDP</p><p>  ;***************************查找字符串******************************** </p><p>  SEARCH PROC </p><p>  MOV SEARCH_COUN

78、T,0</p><p>  PRINT CRLF</p><p>  PRINT STR1</p><p>  INPUT STRING1</p><p>  PRINT CRLF ;輸入要查找的字符串</p><p><b>  XOR CX,CX</b><

79、;/p><p><b>  XOR BX,BX</b></p><p>  MOV CX,ALL_COUNT</p><p>  MOV BL,STRING1+1</p><p><b>  SUB CX,BX</b></p><p>  INC CX

80、 ;計(jì)算外循環(huán)次數(shù)</p><p>  XOR BX,BX </p><p>  K1:PUSH CX ;外循環(huán)次數(shù)入棧</p><p>  LEA SI,TEXT</p><p>  LEA DI,CHUAN1 </p><p>  ADD SI,BX

81、 ;調(diào)整串比較起始位置</p><p>  INC BX ;用于調(diào)整下次比較的起始位置 </p><p><b>  XOR CH,CH</b></p><p>  MOV CL,STRING1+1 ;內(nèi)循環(huán)次數(shù)</p><p><b&g

82、t;  CLD</b></p><p>  REPZ CMPSB</p><p>  JNZ K7 ;不匹配轉(zhuǎn)K7繼續(xù)查找 </p><p>  INC SEARCH_COUNT ;找到的字符串個(gè)數(shù)加1</p><p>  CALL SHOW

83、 ;調(diào)用SHOW顯示前幾行、當(dāng)前行、后幾行</p><p>  K2:PRINT WINDOW2 ;是否繼續(xù)查找</p><p><b>  MOV AH,1</b></p><p><b>  INT 21H</b></p><p>  CMP AL,'

84、1'</p><p>  JE K3 ;繼續(xù)查找轉(zhuǎn)K3</p><p>  CMP AL,'2' </p><p>  JE K5 ;結(jié)束查找轉(zhuǎn)K5</p><p>  PRINT CRLF</p><p&g

85、t;  PRINT ERROR1 </p><p>  JMP K2 ;輸入錯(cuò)誤顯示提示信息,重新輸入</p><p><b>  K5:POP CX</b></p><p>  MOV CX,1 ;CX置1,退出循環(huán)結(jié)束查找</p><p> 

86、 JMP K6 </p><p><b>  K3:POP CX</b></p><p>  XOR DX,DX ;調(diào)整剩余比較次數(shù)CX</p><p>  MOV DL,STRING1+1</p><p>  SUB CX,DX </

87、p><p><b>  INC CX</b></p><p>  ADD BX,DX ;調(diào)整下次比較的相對(duì)位移BX</p><p><b>  DEC BX</b></p><p><b>  JMP K6</b></p><p

88、><b>  K7:POP CX</b></p><p>  K6:LOOP K1</p><p>  K4:PRINT CRLF ;顯示找到的字符串個(gè)數(shù)</p><p>  PRINT STR5</p><p>  MOV BX,SEARCH_COUNT</p>&l

89、t;p>  CALL BINIDEC </p><p><b>  RET</b></p><p>  SEARCH ENDP</p><p>  ;******************顯示找到的字符串、前幾行、后幾行******************** </p><p>  SHOW PROC <

90、/p><p><b>  PUSH BX</b></p><p><b>  PUSH SI</b></p><p>  CLS ;清屏,置光標(biāo)位置為0行0列 </p><p>  MOV BX,OFFSET TEXT</p><p&g

91、t;  XOR DX,DX </p><p><b>  XOR CH,CH</b></p><p>  MOV CL,STRING1+1</p><p>  SUB SI,CX ;SI指向找到的字符串的第一個(gè)字符</p><p><b>  MOV DI,S

92、I</b></p><p><b>  CMP DI,BX</b></p><p>  JE H4 ;若DI指向文件的第一個(gè)字符則轉(zhuǎn)H4</p><p>  H0:CMP DI,BX ;判斷是否到文件頭</p><p><b>

93、  JB H3</b></p><p>  CMP BYTE PTR [DI],10</p><p><b>  JNE H1</b></p><p><b>  INC DL</b></p><p><b>  CMP DL,6</b></p>&l

94、t;p><b>  JE H3 </b></p><p><b>  H1:DEC DI</b></p><p>  JMP H0 </p><p>  H3:INC DI </p><p><b>  CMP DI,SI</b></p><

95、;p>  JE H4 ;要顯示找到的字符串時(shí)轉(zhuǎn)H4</p><p>  MOV DL,[DI] ;顯示字符串前幾行的內(nèi)容</p><p><b>  MOV AH,2</b></p><p><b>  INT 21H</b></p>&l

96、t;p>  JMP H3 </p><p>  H4:MOV BH,0</p><p><b>  MOV AH,3</b></p><p>  INT 10H ;讀當(dāng)前的光標(biāo)位置 </p><p><b>  MOV BH,0</b></

97、p><p>  MOV BL,9FH</p><p><b>  XOR CH,CH</b></p><p>  MOV CL,STRING1+1</p><p><b>  MOV BP,DI</b></p><p><b>  MOV AL,1</b>&

98、lt;/p><p>  MOV AH,13H</p><p>  INT 10H ;將找到的字符串以不同的底色顯示</p><p><b>  XOR CH,CH</b></p><p>  MOV CL,STRING1+1</p><p><b>  AD

99、D SI,CX</b></p><p>  XOR BX,BX </p><p>  MOV CX,OFFSET TEXT</p><p>  ADD CX,ALL_COUNT ;CX為文件最后一個(gè)字符的偏移地址</p><p>  F0:CMP SI,CX ;判斷是否到文

100、件尾</p><p><b>  JA F4</b></p><p>  MOV DL,[SI]</p><p><b>  MOV AH,2</b></p><p>  INT 21H ;顯示字符串后幾行的內(nèi)容 </p><p>  CMP

101、 BYTE PTR [SI],10</p><p><b>  JNE F1 </b></p><p><b>  INC BL</b></p><p><b>  F1:INC SI</b></p><p><b>  CMP BL,6</b></

102、p><p>  JB F0 </p><p><b>  F4:POP SI</b></p><p><b>  POP BX</b></p><p><b>  RET</b></p><p>  SHOW ENDP </p

103、><p>  ;********************************替換字符串**************************</p><p>  REPLACE PROC </p><p>  MOV SEARCH_COUNT,0</p><p>  MOV REPLACE_COUNT,0</p><p>

104、;  PRINT CRLF</p><p>  PRINT STR1 </p><p>  INPUT STRING1 ;輸入要查找的字符串</p><p>  PRINT CRLF</p><p>  PRINT STR2</p><p>  

105、INPUT STRING2 ;輸入替換后的字符串 </p><p>  PRINT CRLF </p><p><b>  XOR CX,CX</b></p><p><b>  XOR BX,BX</b></p><p> 

106、 MOV CX,ALL_COUNT</p><p>  MOV BL,STRING1+1</p><p><b>  SUB CX,BX</b></p><p>  INC CX ;計(jì)算外循環(huán)次數(shù)</p><p>  XOR BX,BX </p><p&

107、gt;  X1:PUSH CX ;外循環(huán)次數(shù)入棧</p><p>  LEA SI,TEXT</p><p>  LEA DI,CHUAN1 </p><p>  ADD SI,BX ;調(diào)整串比較的起始位置</p><p>  INC BX

108、 ;用于調(diào)整下次比較的起始位置</p><p><b>  XOR CH,CH</b></p><p>  MOV CL,STRING1+1 ;內(nèi)循環(huán)次數(shù)</p><p><b>  CLD</b></p><p>  REPZ CMPSB

109、</p><p>  JNZ X7 ;不匹配轉(zhuǎn)X7繼續(xù)查找 </p><p>  INC SEARCH_COUNT ;找到的字符串個(gè)數(shù)加1</p><p>  CALL SHOW ;調(diào)用顯示前幾行、當(dāng)前行、后幾行</p><

110、p>  X2:PRINT WINDOW3 </p><p><b>  MOV AH,1</b></p><p><b>  INT 21H</b></p><p>  CMP AL,'1' </p><p>  JE X3

111、 ;查找下一個(gè)轉(zhuǎn)X3</p><p>  CMP AL,'2'</p><p><b>  JNE R1</b></p><p>  CALL TIHUAN ;調(diào)用TIHUAN,進(jìn)行替換操作</p><p><b

112、>  POP CX</b></p><p>  XOR DX,DX ;調(diào)整外循環(huán)次數(shù)</p><p>  MOV DL,STRING1+1</p><p>  SUB CX,DX </p><p><b>  INC CX</b></p><

113、p>  MOV DL,STRING2+1 ;調(diào)整下次比較的相對(duì)位置</p><p>  ADD BX,DX </p><p>  DEC BX </p><p><b>  JMP X6</b></p><p>  R1:CMP AL,'3'</p>

114、<p><b>  JNE R2</b></p><p>  CALL REPLACE_ALL ;調(diào)用REPLACE_ALL進(jìn)行全部替換</p><p><b>  JMP X5 </b></p><p>  R2:CMP AL,'4' </p>

115、<p>  JE X5 </p><p>  PRINT CRLF</p><p>  PRINT ERROR1 </p><p>  JMP X2 ;輸入錯(cuò)誤顯示提示信息,重新輸入</p><p><b>  X5:POP

116、 CX</b></p><p>  MOV CX,1 ;CX置1,退出循環(huán)結(jié)束查找</p><p>  JMP X6 </p><p><b>  X3:POP CX</b></p><p>  XOR DX,DX

117、 ;調(diào)整外循環(huán)次數(shù)</p><p>  MOV DL,STRING1+1</p><p><b>  SUB CX,DX</b></p><p><b>  INC CX</b></p><p>  ADD BX,DX ;調(diào)整下次比較的相對(duì)位置</p&

118、gt;<p><b>  DEC BX</b></p><p><b>  JMP X6</b></p><p><b>  X7:POP CX</b></p><p>  X6:LOOP X1</p><p><b>  X4:CLS</b>

119、;</p><p>  PRINT CRLF</p><p>  PRINT STR5 </p><p>  MOV BX,SEARCH_COUNT ;顯示找到的字符串個(gè)數(shù)</p><p>  CALL BINIDEC</p><p>  PRINT CRLF

120、</p><p>  PRINT STR6</p><p>  MOV BX,REPLACE_COUNT ;顯示已替換的字符串個(gè)數(shù)</p><p>  CALL BINIDEC</p><p>  CALL SAVE ;存入結(jié)果文件</p><p><

121、b>  RET</b></p><p>  REPLACE ENDP</p><p>  ;***********************替換操作*****************************</p><p>  TIHUAN PROC </p><p><b>  PUSH BX</b>

122、;</p><p>  MOV AH,STRING1+1 ;查找的字符串的長(zhǎng)度</p><p>  MOV AL,STRING2+1 ;替換的字符串的長(zhǎng)度</p><p><b>  CMP AH,AL</b></p><p>  JNE B1

123、 ;若長(zhǎng)度不等轉(zhuǎn)B1</p><p>  LEA DI,TEXT </p><p><b>  ADD DI,BX</b></p><p><b>  DEC DI</b></p><p>  LEA SI,CHUAN2</p><p&

124、gt;<b>  XOR CH,CH</b></p><p>  MOV CL,AL </p><p><b>  CLD</b></p><p>  REP MOVSB ;直接替換</p><p><b>  JMP B3</b><

125、/p><p>  B1:JB B2 ;若原字符串長(zhǎng)度比替換后的字符串短轉(zhuǎn)B2</p><p>  LEA DI,TEXT</p><p><b>  ADD DI,BX</b></p><p><b>  DEC DI</b></p><p

126、>  LEA SI,CHUAN2</p><p><b>  XOR CH,CH</b></p><p>  MOV CL,AL </p><p><b>  CLD</b></p><p>  REP MOVSB ;替換</p><p>

127、<b>  SUB AH,AL</b></p><p><b>  MOV AL,AH</b></p><p><b>  XOR AH,AH</b></p><p><b>  MOV SI,DI</b></p><p><b>  ADD S

128、I,AX</b></p><p>  LEA CX,TEXT</p><p>  ADD CX,ALL_COUNT</p><p><b>  SUB CX,SI</b></p><p><b>  CLD</b></p><p>  REP MOVSB

129、 ;后面的內(nèi)容前移</p><p>  SUB ALL_COUNT,AX</p><p><b>  JMP B3</b></p><p>  B2:LEA CX,TEXT</p><p>  ADD CX,ALL_COUNT</p><p><b>  SUB

130、CX,SI</b></p><p>  SUB AL,AH </p><p><b>  XOR AH,AH</b></p><p>  LEA SI,TEXT</p><p>  ADD SI,ALL_COUNT</p><p><b>  DEC SI</b&g

131、t;</p><p><b>  MOV DI,SI</b></p><p><b>  ADD DI,AX</b></p><p><b>  STD</b></p><p>  REP MOVSB ;后面的內(nèi)容后移</p>&l

132、t;p>  MOV CL,STRING2+1</p><p><b>  XOR CH,CH</b></p><p>  LEA SI,CHUAN2</p><p><b>  ADD SI,CX</b></p><p><b>  DEC SI</b></p>

133、;<p><b>  STD</b></p><p>  REP MOVSB ;替換</p><p>  ADD ALL_COUNT,AX</p><p><b>  B3:POP BX</b></p><p>  INC REPLACE_COUNT&

134、lt;/p><p><b>  RET</b></p><p>  TIHUAN ENDP </p><p>  ;***************************寫(xiě)入結(jié)果文件*****************************</p><p>  SAVE PROC </p><p>

135、  LEA DX,FNAME2</p><p>  MOV AH,3CH</p><p><b>  XOR CX,CX</b></p><p>  INT 21H ;新建文件</p><p>  JNC CR_WJ </p><p>  PRINT ERR_CR

136、</p><p><b>  JMP L6</b></p><p>  CR_WJ:MOV FCODE2,AX</p><p>  MOV AH,40H</p><p>  LEA DX,TEXT</p><p>  MOV BX,FCODE2</p><p>  MOV

137、CX,ALL_COUNT</p><p>  INT 21H ;寫(xiě)文件</p><p>  JNC CLOSE2</p><p>  PRINT ERR_WR</p><p>  CLOSE2:MOV AH,3EH</p><p>  MOV BX,FCODE2</p><

138、;p>  INT 21H ;關(guān)閉文件</p><p><b>  JNC Q1 </b></p><p>  PRINT ERR_CL</p><p><b>  Q1:RET</b></p><p><b>  SAVE ENDP</b><

139、;/p><p>  ;*****************************全部替換操作**************************</p><p>  REPLACE_ALL PROC </p><p>  PRINT CRLF </p><p><b>  XOR CX,CX

140、</b></p><p><b>  XOR BX,BX</b></p><p>  MOV CX,ALL_COUNT</p><p>  MOV BL,STRING1+1</p><p><b>  SUB CX,BX</b></p><p>  INC CX

141、 ;計(jì)算外循環(huán)次數(shù)</p><p>  XOR BX,BX </p><p>  A1:PUSH CX ;外循環(huán)次數(shù)入棧</p><p>  LEA SI,TEXT</p><p>  LEA DI,CHUAN1 </p><p>  ADD S

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論