新版匯編語言程序設(shè)計(jì) 串操作類指令_第1頁
新版匯編語言程序設(shè)計(jì) 串操作類指令_第2頁
新版匯編語言程序設(shè)計(jì) 串操作類指令_第3頁
新版匯編語言程序設(shè)計(jì) 串操作類指令_第4頁
新版匯編語言程序設(shè)計(jì) 串操作類指令_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

將數(shù)據(jù)段source指示的100個(gè)字節(jié)數(shù)傳送到附加段destination指示的主存區(qū) movsi,offsetsource movdi,offsetdestination movcx,100 again: moval,[si]mov[di],alincsiincdi deccx jnzagain ;判斷傳送次數(shù)cx是否為0 ;不為0,那么到again位置執(zhí)行指令 ;否那么,結(jié)束第8講串操作類指令串操作指令是8086指令系統(tǒng)中比較獨(dú)特的一類指令,采用比較特殊的數(shù)據(jù)串尋址方式,常用在操作主存連續(xù)區(qū)域的數(shù)據(jù)時(shí)主要熟悉: MOVSSTOSLODS CMPSSCASREP一般了解: REPZ/REPEREPNZ/REPNE串?dāng)?shù)據(jù)類型串操作指令的操作數(shù)是主存中連續(xù)存放的數(shù)據(jù)串〔String〕——即在連續(xù)的主存區(qū)域中,字節(jié)或字的序列串操作指令的操作對(duì)象是以字〔W〕為單位的字串,或是以字節(jié)〔B〕為單位的字節(jié)串串尋址方式源操作數(shù)用存放器SI尋址,默認(rèn)在數(shù)據(jù)段DS中,但允許段超越:DS:[SI]目的操作數(shù)用存放器DI尋址,默認(rèn)在附加段ES中,不允許段超越:ES:[DI]每執(zhí)行一次串操作指令,SI和DI將自動(dòng)修改:±1〔對(duì)于字節(jié)串〕或±2〔對(duì)于字串〕執(zhí)行指令CLD后,DF=0,地址指針增1或2執(zhí)行指令STD后,DF=1,地址指針減1或2串傳送MOVS〔movestring〕把字節(jié)或字操作數(shù)從主存的源地址傳送至目的地址MOVSB

;字節(jié)串傳送:ES:[DI]←DS:[SI]

;SI←SI±1,DI←DI±1MOVSW

;字串傳送:ES:[DI]←DS:[SI]

;SI←SI±2,DI←DI±2將數(shù)據(jù)段source指示的100個(gè)字節(jié)數(shù)傳送到附加段destination指示的主存區(qū) movsi,offsetsource movdi,offsetdestination movcx,100 ;cx←傳送次數(shù) cld ;置DF=0,地址增加again: movsb ;傳送一個(gè)字節(jié) deccx ;傳送次數(shù)減1 jnzagain ;判斷傳送次數(shù)cx是否為0 ;不為0,那么到again位置執(zhí)行指令 ;否那么,結(jié)束例2.52:字串傳送 movsi,offsetsource movdi,offsetdestination movcx,50 ;cx←傳送次數(shù) cld ;置DF=0,地址增加again: movsw ;傳送一個(gè)字 deccx ;傳送次數(shù)減1 jnzagain ;判斷傳送次數(shù)cx是否為0 ;不為0,那么到again位置執(zhí)行指令 ;否那么,結(jié)束串存儲(chǔ)STOS〔storestring〕把AL或AX數(shù)據(jù)傳送至目的地址STOSB

;字節(jié)串存儲(chǔ):ES:[DI]←AL

;DI←DI±1STOSW

;字串存儲(chǔ):ES:[DI]←AX

;DI←DI±2將附加段64KB主存區(qū)全部設(shè)置為0 movax,0 movdi,0 movcx,8000h ;cx←傳送次數(shù)〔32×1024〕 cld ;DF=0,地址增加again: stosw ;傳送一個(gè)字 deccx ;傳送次數(shù)減1 jnzagain ;傳送次數(shù)cx是否為0

可將CLD改為STD嗎?如何改用STOSB?串讀取LODS〔loadstring〕把指定主存單元的數(shù)據(jù)傳送給AL或AXLODSB

;字節(jié)串讀?。篈L←DS:[SI]

;SI←SI±1LODSW

;字串讀取:AX←DS:[SI]

;SI←SI±2MOVS、STOS、LODS均不影響標(biāo)志位例如數(shù)據(jù)段DS中有一個(gè)數(shù)據(jù)塊,具有count字節(jié),起始地址為block,現(xiàn)在要把其中的正數(shù)、負(fù)數(shù)分開,分別存入同一個(gè)段的兩個(gè)緩沖區(qū),存放正數(shù)的起始地址為dplus,存放負(fù)數(shù)的起始地址為dminus.

movsi,offsetblock movdi,offsetdplus movbx,offsetdminus

movax,ds moves,ax

movcx,count

cldlodsb

testal,80h

jnzminus

stosb

jmpagain xchgbx,di

stosb

xchgbx,di deccx

jnzgo_on

go_on:minus:again:串比較CMPS〔comparestring〕將主存中的源操作數(shù)減去至目的操作數(shù),以便設(shè)置標(biāo)志,進(jìn)而比較兩操作數(shù)之間的關(guān)系CMPSB ;字節(jié)串比較:DS:[SI]-ES:[DI] ;SI←SI±1,DI←DI±1CMPSW ;字串比較:DS:[SI]-ES:[DI] ;SI←SI±2,DI←DI±2例2.55:比較數(shù)據(jù)段中string1字符串和附加段中string2字符串是否相同,相同的將字節(jié)變量result置為ffH,不同的話置為0. movsi,offsetstring1 movdi,offsetstring2 movcx,count cld cmpsb ;比較兩個(gè)字符 jnzunmat ;有不同字符,轉(zhuǎn)移 deccx jnzagain ;進(jìn)行下一個(gè)字符比較 moval,0 ;字符串相等,設(shè)置00h jmpoutput ;轉(zhuǎn)向outputunmat: moval,0ffh ;設(shè)置ffhoutput: movresult,al ;輸出結(jié)果標(biāo)記again:串掃描SCAS〔scanstring〕將AL/AX減去至目的操作數(shù),以便設(shè)置標(biāo)志,進(jìn)而比較AL/AX與操作數(shù)之間的關(guān)系SCASB

;字節(jié)串掃描:AL-ES:[DI]

;DI←DI±1SCASW

;字串掃描:AX-ES:[DI]

;DI←DI±2例2.56:在字符串中查找“空格〞 movdi,offsetstring moval,20h movcx,count cldagain: scasb ;搜索 jzfound ;為0〔ZF=1〕,發(fā)現(xiàn)空格 deccx ;不是空格 jnzagain ;搜索下一個(gè)字符 ... ;不含空格,那么繼續(xù)執(zhí)行found: ...重復(fù)前綴指令〔repeat〕串操作指令執(zhí)行一次,僅對(duì)數(shù)據(jù)串中的一個(gè)字節(jié)或字量進(jìn)行操作。但是串操作指令前,都可以加一個(gè)重復(fù)前綴,實(shí)現(xiàn)串操作的重復(fù)執(zhí)行。重復(fù)次數(shù)隱含在CX存放器中重復(fù)前綴分2類,3條指令:配合不影響標(biāo)志的MOVS、STOS〔和LODS〕指令的REP前綴配合影響標(biāo)志的CMPS和SCAS指令的REPZ和REPNZ前綴REP重復(fù)前綴指令REP前綴可以理解為:當(dāng)數(shù)據(jù)串沒有結(jié)束〔CX≠0〕,那么繼續(xù)傳送例2.52和例2.53中,程序段的最后3條指令,可以分別替換為: REPMOVSB和REPSTOSWREP

;每執(zhí)行一次串指令,CX減1

;直到CX=0,重復(fù)執(zhí)行結(jié)束重復(fù)串傳送〔例2.52〕

movsi,offsetsource movdi,offsetdestination

movcx,100

;cx←傳送次數(shù)

cld

repmovsbagain: movsb ;傳送一個(gè)字節(jié) deccx ;傳送次數(shù)減1 jnzagain ;判斷傳送次數(shù)cx是否為0 ;不為0〔ZF=0〕,那么轉(zhuǎn)移again位置執(zhí)行 ;否那么,結(jié)束將數(shù)據(jù)段source指示的100個(gè)字節(jié)數(shù)傳送到附加段destination指示的主存區(qū)重復(fù)串存儲(chǔ)〔例2.53〕movax,0movdi,0movcx,8000hcldrepstoswagain: stosw

;傳送一個(gè)字

deccx

;傳送次數(shù)減1

jnzagain

;判斷傳送次數(shù)cx是否為0將附加段64KB主存區(qū)全部設(shè)置為0REPZ重復(fù)前綴指令REPZ/REPE前綴可以理解為:當(dāng)數(shù)據(jù)串沒有結(jié)束〔CX≠0〕,并且串相等〔ZF=1〕,那么繼續(xù)比較REPZ

;每執(zhí)行一次串指令,CX減1

;并判斷ZF是否為0, ;只要CX=0或ZF=0,重復(fù)執(zhí)行結(jié)束REPNZ重復(fù)前綴指令REPNZ/REPNE前綴可以理解為:當(dāng)數(shù)據(jù)串沒有結(jié)束〔CX≠0〕,并且串不相等〔ZF=0〕,那么繼續(xù)比較REPNZ

;每執(zhí)行一次串指令,CX減1

;并判斷ZF是否為1, ;只要CX=0或ZF=1,重復(fù)執(zhí)行結(jié)束例2.57:比較字符串是否相等 movsi,offsetstring1 movdi,offsetstring2 movcx,count cld cmpsb ;比較兩個(gè)字符 jnzunmat ;有不同字符,轉(zhuǎn)移 deccx jnzagain ;進(jìn)行下一個(gè)字符比較 moval,0 ;字符串相等,設(shè)置00h jmpoutput ;轉(zhuǎn)向outputunmat: moval,0ffh ;設(shè)置ffhoutput: movresult,al ;輸出結(jié)果標(biāo)記解釋again:repzcmpsb

重復(fù)比較的解釋指令repzcmpsb結(jié)束重復(fù)執(zhí)行的情況①ZF=0,即出現(xiàn)不相等的字符②CX=0,即比較完所有字符:這種情況下,如果ZF=0,說明最后一個(gè)字符不等;而ZF=1表示所有字符比較后都相等,也就是兩個(gè)字符串相同所以,重復(fù)比較結(jié)束后

溫馨提示

  • 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. 人人文庫(kù)網(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)論