實(shí)驗(yàn)三 字符串操作_第1頁
實(shí)驗(yàn)三 字符串操作_第2頁
實(shí)驗(yàn)三 字符串操作_第3頁
實(shí)驗(yàn)三 字符串操作_第4頁
實(shí)驗(yàn)三 字符串操作_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、一、實(shí)驗(yàn)要求和目的1了解匯編語言字符串處理基本流程;2熟悉匯編語言字符串處理基本指令的使用方法;3掌握利用匯編語言實(shí)現(xiàn)字符串處理的程序設(shè)計(jì)方法。二、軟硬件環(huán)境1、硬件環(huán)境:計(jì)算機(jī)系統(tǒng) windows;2、軟件環(huán)境:裝有 MASM、DEBUG、LINK、等應(yīng)用程序。三、實(shí)驗(yàn)涉及的主要知識(shí)1、字符串處理基本操作流程 (1)利用 SI 寄存器保存源串首地址;(2)利用 DI 寄存器保存目的串首地址;(3)利用 CX 寄存器保存字符串長度; (4)利用 CLD 或 STD 指令設(shè)置字符串處理;(5)利用字符串處理指令實(shí)現(xiàn)相關(guān)處理。其中,CLD 指令使 DF=0,在執(zhí)行串處理指令時(shí)可使地址自動(dòng)增量;ST

2、D 使 DF=1,在 執(zhí)行串處理指令時(shí)可使地址自動(dòng)減量。 提示:字符串處理一般都涉及到源串和目的串,匯編語言規(guī)定源串在數(shù)據(jù)段中定義,目 的串在附加段中定義。 2、重復(fù)前綴指令,重復(fù)次數(shù)由計(jì)數(shù)寄存器 CX 中存放的值決定,指令每重復(fù)執(zhí)行一次, 計(jì)數(shù)器 CX 中值減 1,當(dāng) CX 中值減至 0 時(shí),停止重復(fù)執(zhí)行,繼續(xù)執(zhí)行下一條指令REP 無條件重復(fù)前綴,重復(fù)串操作直到計(jì)數(shù)寄存器的內(nèi)容 CX 為 0 為止。經(jīng)常與 REP 配合工作的字符串處理指令有 MOVS、STOS 和 LODS。 REPE/REPZ 判斷計(jì)數(shù)寄存器的內(nèi)容 CX 是否為 0 或 ZF=0(即比較的兩個(gè)操作數(shù)不等), 只要滿足一個(gè)則

3、重復(fù)執(zhí)行結(jié)束,否則繼續(xù)執(zhí)行??梢耘c REPE/REPZ 配合工作的串指令有CMPS 和 SCAS。 3、字符串處理基本指令 (1)MOVS 傳送指令 格式:MOVS DST,SRC 或 MOVSB(傳送字節(jié))或 MOVSW(傳送字)。后面兩種 形式需要與 REP 指令結(jié)合使用。該指令把由源變址寄存器(SRC)指向的數(shù)據(jù)段中的一個(gè)字(或字節(jié))數(shù)據(jù)傳送到由 目的變址寄存器(DST)指向的附加段中的一個(gè)字(或字節(jié))中去,同時(shí),根據(jù)方向標(biāo)志及 數(shù)據(jù)格式(字或字節(jié))對(duì)源變址寄存器和目的變址寄存器進(jìn)行修改。 (2)STOS 存入串指令格式:STOS DST 或 STOSB(存入字節(jié))或 STOSW(存入字

4、)。該指令把 AL 或 AX 的內(nèi)容存入由目的變址寄存器指向的附加段的某單元中,并根據(jù)方 向標(biāo)志(DF)和數(shù)據(jù)類型修改目的變址寄存器的內(nèi)容。(3)LODS 從串取指令 格式:LODS SRC 或 LODSB(取字節(jié))或 LODSW(取字)。該指令把由源變址寄存器指向的數(shù)據(jù)段中某單元的內(nèi)容傳送到 AL 或 AX 中,并根據(jù)方 向標(biāo)志和數(shù)據(jù)類型修改源變址寄存器的內(nèi)容。(4)CMPS 串比較指令格式:CMPS SRC,DST 或 CMPSB 或 CMPSW。該指令把由源變址寄存器指向的數(shù)據(jù)段中的一個(gè)字節(jié)或字與由目的變址寄存器所指向 的附加段中的一個(gè)字節(jié)或字相減,但不保存結(jié)果,只根據(jù)結(jié)果設(shè)置條件標(biāo)志。

5、該指令與 REPE/REPZ 或 REPNE/REPNZ 結(jié)合,可以比較兩個(gè)數(shù)據(jù)串。(5)SCAS 串掃描指令格式:SCAS DST 或 SCASB 或 SCASW。該指令把 AL 或 AX 的內(nèi)容與由目的變址寄存器所指向的附加段中的一個(gè)字節(jié)或字進(jìn)行 比較,并不保存結(jié)果,只根據(jù)結(jié)果設(shè)置條件碼。該指令與 REPE/REPZ 或 REPNE/REPNZ 結(jié)合,可以從一個(gè)字符串中查找一個(gè)指定的字符。總的來說,字符串處理可以將緩沖區(qū)中一個(gè)數(shù)據(jù)塊搬至存儲(chǔ)器的另一處,比較兩個(gè)字符 串是否相等,從緩沖區(qū)中一個(gè)數(shù)據(jù)塊尋找某一個(gè)特定的關(guān)鍵字,順次從一個(gè)緩沖區(qū)取字符或 順次向一個(gè)緩沖區(qū)存字符等。四、實(shí)驗(yàn)內(nèi)容與步驟

6、1、比較緩沖區(qū)中兩字符串是否相同,相同則 AL 返回 0,不同 AL 返回 1。為了使程序的 通用性比較好,字符串長度要求自動(dòng)獲取。(要求用字符串處理方法) 實(shí)驗(yàn)流程圖輸入str1、str2開始 分別將str1、str2首地址傳送到SI、DI寄存器計(jì)算str1、str2的字符串長度并保存到相應(yīng)寄存器不相等若相等 不相等將AL賦值為1比較字符串長度 字符進(jìn)行比較 將AL賦值0 結(jié)束代碼DATAS SEGMENT DATAS ENDSextra SEGMENT str1 db 'Hello.orld!$' leng1 dw ($-str1) str2 db 'Hello.w

7、orld!$' leng2 dw ($-str2) extra ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,es:extraSTART: MOV AX,DATAS MOV DS,AX MOV AX,EXTRA MOV ES,AX MOV AL,1 MOV BX,LENG1 MOV DX,LENG2 CMP BX,DX JNZ N JMP CON N: MOV AL,1 JMP OVER CON: LEA SI,STR1 LEA DI,STR2 MOV CX,LENG1 CLD REPE CMPSB JCXZ Y Y: MOV AL,0 JMP

8、OVER OVER: MOV AH,4CH INT 21HCODES ENDSEND START因?yàn)闆]有拍照片,所以沒有保存調(diào)試結(jié)果,但是在上機(jī)調(diào)試的過程中實(shí)驗(yàn)是正確的。2、 編寫程序,將內(nèi)存中某一區(qū)域的數(shù)據(jù)傳送到另一區(qū)域。(要求用字符串處理方法) 開始 輸入數(shù)據(jù) CX=字符串長度 Y CX等于0?N 復(fù)制字符CX=CX-1 結(jié)束DATAS SEGMENT str1 db 'Hello.orld!$' leng1 dw ($-str1)DATAS ENDSextra SEGMENT str2 db 30 dup(0) leng2 dw ($-str2)extra ENDSCOD

9、ES SEGMENT ASSUME CS:CODES,DS:DATAS,es:extraSTART: MOV AX,DATAS MOV DS,AX MOV AX,EXTRA MOV ES,AX LEA SI,STR1 LEA DI,STR2 MOV CX,LENG1 CLD REP MOVSB MOV AH,4CH INT 21HCODES ENDS END START3、 編寫程序,在已知字符串中搜索特定字符!,若找到則 AL 返回 0,找不到 AL 返回 1。 (要求用字符串處理方法) 將str1首地址傳送到ES段DI寄存器 將str1長度存到CX將待搜索字符!存到AL未找到用scasb重

10、復(fù)搜索! 若找到將AL賦值為0將AL賦值為1結(jié)束DATAS SEGMENT DATAS ENDSextra SEGMENT str1 db 'Hello.world!$' leng1 dw ($-str1)extra ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,es:extraSTART: MOV AX,DATAS MOV DS,AX MOV AX,EXTRA MOV ES,AX LEA ax,str1 mov di,ax MOV al,'!' mov cx,leng1 cld repnz scasb jcxz n jm

11、p o n: MOV bx,1 JMP OVER o: MOV bx,0 jmp over over: mov ax,bx mov ah,4ch int 21hCODES ENDSEND START4、 編寫程序,統(tǒng)計(jì)一串字符串中字符"."出現(xiàn)的次數(shù)。(要求用字符串處理方法);開始定義初始字符串str1.的數(shù)目存在BX,BX初始值為0用字符串搜索的方法搜索.未找到若找到BX值加一CX=0結(jié)束是否DATAS SEGMENT DATAS ENDSextra SEGMENT str1 db 'Hello.orld!$' leng1 dw ($-str1)extra ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,es:extraSTART: MOV AX,DATAS MOV DS,AX MOV AX,EXTRA MOV ES,AX mov bx,0 LEA ax,STR1 mov di,ax MOV al,'.' mov cx,leng1 cld l: repnz scasb jcxz over inc bx jmp l over: mov ax,bx mov a

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(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)論