版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設(shè)計(jì)--查找字符串中的指定字符
- cmd批處理替換字符串、截取字符串、擴(kuò)充字符串
- 課程設(shè)計(jì)--- 字符串排序
- 課程設(shè)計(jì)--字符串類(lèi)
- 查找字符串中的指定字符-課程設(shè)計(jì)說(shuō)明書(shū)
- 查找字符串中的指定字符-課程設(shè)計(jì)說(shuō)明書(shū)
- 課程設(shè)計(jì)--字符串的操作
- 字符串處理系統(tǒng)課程設(shè)計(jì)
- c語(yǔ)言課程設(shè)計(jì)--字符串類(lèi)
- 相似字符串查找算法研究.pdf
- 課程設(shè)計(jì)--實(shí)現(xiàn)字符串的多種操作
- c++課程設(shè)計(jì)報(bào)告--字符串處理
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)——串的查找與替換
- 微機(jī)課程設(shè)計(jì)--字符串動(dòng)畫(huà)加速減速
- c語(yǔ)言課程設(shè)計(jì)(字符串函數(shù)包)
- 微機(jī)原理課程設(shè)計(jì)---字符串動(dòng)畫(huà)顯示
- c課程設(shè)計(jì)---字符串處理系統(tǒng)
- 微機(jī)原理課程設(shè)計(jì)--字符串分類(lèi)統(tǒng)計(jì)
- c++課程設(shè)計(jì)---字符串類(lèi)的設(shè)計(jì)
- c++課程設(shè)計(jì)--字符串類(lèi)的設(shè)計(jì)與實(shí)現(xiàn)
評(píng)論
0/150
提交評(píng)論