字符串處理指令_第1頁(yè)
字符串處理指令_第2頁(yè)
字符串處理指令_第3頁(yè)
字符串處理指令_第4頁(yè)
字符串處理指令_第5頁(yè)
已閱讀5頁(yè),還剩1頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

字符串處理指令字符串:一系列存放在存儲(chǔ)器中的字或字節(jié)數(shù)據(jù),不管他們是不是ASCII碼。字符串長(zhǎng)度可達(dá)64K字節(jié),組成字符串的字節(jié)或字稱(chēng)為字符串元素,每種字符串指令對(duì)字符串對(duì)字符串元素只進(jìn)行同一種操作。8086提供5條1字節(jié)的字符串操作指令,專(zhuān)門(mén)對(duì)存儲(chǔ)器中的字節(jié)串和字串?dāng)?shù)據(jù)進(jìn)行傳送、比較、掃描、存儲(chǔ)及裝入等5種操作。使用字符串操作指令時(shí),可以有兩種方法告訴匯編程序是進(jìn)行字節(jié)操作還是字操作。一種方法是用指令中的源串和目的串名來(lái)表明是字節(jié)還是字,另一種方法是在指令助記符后加B說(shuō)明是字節(jié),加W說(shuō)明是字操作。這樣每種指令都有3種格式。字符串傳送,MOVS目的串,源串MOVSBMOVSW字符串比較,CMPS目的串,源串CWPSBCMPSW字符串掃描,SCAS目的串SCASBSCASW字符串裝入,LODS源串LODSBLODSW字符串存儲(chǔ),STOS目的串STOSBSTOSW字符串指令執(zhí)行時(shí),必須遵守以下隱含約定:源串位于當(dāng)前數(shù)據(jù)段,由DS尋址,源串的元素由SI作指針,即源串字符的起始地址為DS:SI。源串允許使用段超越前綴來(lái)修改段地址。目的串必須位于當(dāng)前的附加段中,由ES尋址,目的串元素由DI做指針,即目的串字符的首地址為ES:DI,但目的串不允許使用短超越前綴修改ES。如果要在同一段內(nèi)進(jìn)行串運(yùn)算,必須使DS和ES指向同一段。每執(zhí)行一次字符串指令,指針SI和DI會(huì)自動(dòng)進(jìn)行修改,以便指向下一待操作單元。DF標(biāo)志控制字符的處理方向。DF=0為遞增方向,這時(shí)DS:SI指向源串首地址,每進(jìn)行一次串操作,使SI和DI增加,字節(jié)串操作時(shí),SI和DI分別增1,字串操作時(shí),SI和DI分別增2,;DF=1為遞減方向,這時(shí),DS:SI指向源串末地址,每執(zhí)行一次串操作,使SI和DI分別減量,字節(jié)串操作時(shí)減1,字串操作時(shí)減2.可用標(biāo)志操作指令STD和CLD來(lái)改變DF的值,STD使DF置1,CLD使DF清零。要處理的字符串長(zhǎng)度(字或字節(jié)數(shù))放在CX寄存器中。為了加快串運(yùn)算指令的執(zhí)行速度,可在基本指令前加重復(fù)前綴,是數(shù)據(jù)傳指令重復(fù)執(zhí)行。每重復(fù)執(zhí)行一次,地址指針SI和DI都根據(jù)方向標(biāo)志自動(dòng)進(jìn)行修改,CX的值則將自動(dòng)減1.能與基本指令配合使用的重復(fù)前綴有:REP無(wú)條件重復(fù)REPE\REPZ相等\結(jié)果為零則重復(fù)REPNE\REPNZ不相等\結(jié)果不為零則重復(fù)無(wú)條件重復(fù)指令REP常與傳送指令(MOVS)連用,連續(xù)進(jìn)行字符串傳送操作,直到整個(gè)字符串傳送完畢,CX=0為止。重復(fù)前綴REPE和REPZ具有相同的含義,它們常與串比較指令(CMPS)連用,用于字符串比較操作。當(dāng)兩個(gè)字符串相等(ZF=1)和CX0時(shí),則進(jìn)行重復(fù)比較,直到ZF=0或CX=0為止。重復(fù)前綴REPNE和REPNZ也具有相同的意義,它們常與串掃描指令(SCAS)連用,當(dāng)結(jié)果非零時(shí)(ZF=0)和CX0時(shí),重復(fù)進(jìn)行,直到ZF=1或CX=0為止。帶有重復(fù)前綴的串運(yùn)算時(shí)間可能很長(zhǎng),在指令執(zhí)行過(guò)程中允許有中斷進(jìn)入,因此在處理每個(gè)元素之前都在查詢(xún)是否有中斷請(qǐng)求,一旦外部有中斷進(jìn)入,CPU將暫停執(zhí)行當(dāng)前的串操作指令,轉(zhuǎn)去執(zhí)行相應(yīng)得中斷服務(wù)程序,使中斷服務(wù)完成后,再去執(zhí)行被中斷的串操作指令。分別介紹:MOVS字符串操作指令指令格式:MOVS目的串,源串指令功能:把由SI指針的源串中的一個(gè)字節(jié)或一個(gè)字傳送到由DI作指針的目的串中,且自動(dòng)修改指針SI和DI在實(shí)際應(yīng)用中,人們經(jīng)常需要在存儲(chǔ)單元之間傳送數(shù)據(jù)。然而,MOVS指令不能直接在存儲(chǔ)單元之間傳送數(shù)據(jù),為了實(shí)現(xiàn)這種操作,必須以某一通用寄存器為橋梁,先把一個(gè)存儲(chǔ)單元的數(shù)據(jù)送到指定的通用寄存器中,再把寄存器中的數(shù)據(jù)傳送到另一個(gè)存儲(chǔ)單元中,每進(jìn)行一次傳送操作,還必須修改地址指針。如果改用MOVS指令,便能方便地實(shí)現(xiàn)這種功能,它不但能把數(shù)據(jù)從內(nèi)存中的某一地址傳送到另一地址,還能自動(dòng)修改源和目的地址。若使用重復(fù)前綴,還可以利用一條指令傳送一批數(shù)據(jù)。例要求把數(shù)據(jù)段中以SRC_MESS為偏移地址的一串字符“HELLO!"傳送到附加段中以NEW_LOC開(kāi)始的單元中。實(shí)現(xiàn)該操作的程序如下:DATASEGMENT;數(shù)據(jù)段SRC_MESSDB"HELLO!";源串DATAENDS;EXTRASEGMENT;附加段NEW_LOCDB6DUP(?);存放目的串EXTRAENDS;CODESEGMENT;代碼段ASSUMECS:CODE,DS:DATA,ES:EXTRASTART:MOVAX,DATAMOVDS,AN;DS=數(shù)據(jù)段段址MOVAX,EXTRAMOVES,AX;ES=附加段段址LEASI,SRC_MESS;SI指向源串偏移地址LENDI,NEW_LOC;DI指向目的串偏移地址MOVCX,6;CX作串長(zhǎng)度計(jì)數(shù)器CLD;清方向標(biāo)志,地址增量REPMOVSB;重復(fù)傳送串中的各字節(jié),直到CX=0為止CODEENDSENDSTART例中的REPMOVSB也可用指令代替:AGAIN:MOVSNEW_LOC,SRC_MESSDECCXJNZAGAIN比較這兩種方法,顯然可以發(fā)現(xiàn),使用有重復(fù)前綴REP的MOVSB指令,程序更簡(jiǎn)潔。2/CMPS字符串比較指令指令格式:CMPS目的串,源串指令功能:從S

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論