




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
2.5串操作類指令串操作指令是8086指令系統(tǒng)中比較獨(dú)特的一類指令,采用比較特殊的數(shù)據(jù)串尋址方式,在操作主存連續(xù)區(qū)域的數(shù)據(jù)時(shí),特別好用、因而常用重點(diǎn)掌握: MOVSSTOSLODS CMPSSCASREP一般了解: REPZ/REPEREPNZ/REPNE2.5串操作類指令串操作指令是8086指令系統(tǒng)中比較獨(dú)特串?dāng)?shù)據(jù)類型串操作指令的操作數(shù)是主存中連續(xù)存放的數(shù)據(jù)串(String)——即在連續(xù)的主存區(qū)域中,字節(jié)或字的序列串操作指令的操作對(duì)象是以字(W)為單位的字串,或是以字節(jié)(B)為單位的字節(jié)串串?dāng)?shù)據(jù)類型串操作指令的操作數(shù)是主存中連續(xù)存放的數(shù)據(jù)串(Str串尋址方式源操作數(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串尋址方式源操作數(shù)用寄存器SI尋址,默認(rèn)在數(shù)據(jù)段DS中,但允串傳送MOVS(movestring)把字節(jié)或字操作數(shù)從主存的源地址傳送至目的地址MOVSB
;字節(jié)串傳送:ES:[DI]←DS:[SI] ;SI←SI±1,DI←DI±1演示MOVSW
;字串傳送:ES:[DI]←DS:[SI] ;SI←SI±2,DI←DI±2演示串傳送MOVS(movestring)把字節(jié)或字操作數(shù)從主例2.52:字節(jié)串傳送
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é)束offset是匯編操作符,求出變量的偏移地址例2.52:字節(jié)串傳送 movsi,offsetsour例2.52:字串傳送
movsi,offsetsource movdi,offsetdestination movcx,50 ;cx←傳送次數(shù)
cld ;置DF=0,地址增加again: movsb ;傳送一個(gè)字
deccx ;傳送次數(shù)減1 jnzagain
;判斷傳送次數(shù)cx是否為0 ;不為0,則到again位置執(zhí)行指令 ;否則,結(jié)束例2.52:字串傳送 movsi,offsetsourc串存儲(chǔ)STOS(storestring)把AL或AX數(shù)據(jù)傳送至目的地址STOSB
;字節(jié)串存儲(chǔ):ES:[DI]←AL ;DI←DI±1STOSW
;字串存儲(chǔ):ES:[DI]←AX ;DI←DI±2演示串存儲(chǔ)STOS(storestring)把AL或AX數(shù)據(jù)傳例2.53:串存儲(chǔ)
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?可不用給DI賦值嗎?DI為偶數(shù)即可例2.53:串存儲(chǔ) movax,0可將CLD改為STD嗎串讀取LODS(loadstring)把指定主存單元的數(shù)據(jù)傳送給AL或AXLODSB
;字節(jié)串讀?。篈L←DS:[SI] ;SI←SI±1LODSW
;字串讀?。篈X←DS:[SI] ;SI←SI±2演示串讀取LODS(loadstring)把指定主存單元的數(shù)據(jù)例2.54:串讀?。?
movsi,offsetblock movdi,offsetdplus movbx,offsetdminus
movax,ds moves,ax;數(shù)據(jù)都在一個(gè)段中,所以設(shè)置es=ds movcx,count ;cx←字節(jié)數(shù) cld例2.54:串讀?。? movsi,offsetbloc例2.54:串讀?。?go_on: lodsb
;從block取出一個(gè)數(shù)據(jù) testal,80h ;檢測(cè)符號(hào)位,判斷是正是負(fù) jnzminus ;符號(hào)位為1,是負(fù)數(shù),轉(zhuǎn)向minus
stosb ;符號(hào)位為0,是正數(shù),存入dplus jmpagain ;程序轉(zhuǎn)移到again處繼續(xù)執(zhí)行 jnzgo_on ;完成正負(fù)數(shù)據(jù)分離例2.54:串讀取-2go_on: lodsb ;從blo例2.54:串讀?。?minus: xchgbx,di
stosb
;把負(fù)數(shù)存入dminus xchgbx,diagain: deccx ;字節(jié)數(shù)減1 jnzgo_on ;完成正負(fù)數(shù)據(jù)分離例2.54:串讀?。?minus: xchgbx,di串比較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串比較CMPS(comparestring)將主存中的源操例2.55:比較字符串 movsi,offsetstring1 movdi,offsetstring2 movcx,count cldagain: 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)記例2.55:比較字符串 movsi,offsetstri串掃描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串掃描SCAS(scanstring)將AL/AX減去至目例2.56:查找字符串
movdi,offsetstring moval,20h movcx,count cldagain: scasb
;搜索 jzfound ;為0(ZF=1),發(fā)現(xiàn)空格 deccx ;不是空格 jnzagain ;搜索下一個(gè)字符 ... ;不含空格,則繼續(xù)執(zhí)行found: ...例2.56:查找字符串 movdi,offsetstri重復(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前綴重復(fù)前綴指令(repeat)串操作指令執(zhí)行一次,僅對(duì)數(shù)據(jù)串中REP重復(fù)前綴指令REP前綴可以理解為:當(dāng)數(shù)據(jù)串沒(méi)有結(jié)束(CX≠0),則繼續(xù)傳送例2.52和例2.53中,程序段的最后3條指令,可以分別替換為: REPMOVSB和REPSTOSWREP ;每執(zhí)行一次串指令,CX減1 ;直到CX=0,重復(fù)執(zhí)行結(jié)束REP重復(fù)前綴指令REP前綴可以理解為:當(dāng)數(shù)據(jù)串沒(méi)有結(jié)束(C重復(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é)束第2章演示重復(fù)串傳送(例2.52) movsi,offsetsou重復(fù)串存儲(chǔ)(例2.53)movax,0movdi,0movcx,8000hcldrepstoswagain: stosw ;傳送一個(gè)字 deccx ;傳送次數(shù)減1 jnzagain ;判斷傳送次數(shù)cx是否為0第2章演示重復(fù)串存儲(chǔ)(例2.53)movax,0again: stoREPZ重復(fù)前綴指令REPZ/REPE前綴可以理解為:當(dāng)數(shù)據(jù)串沒(méi)有結(jié)束(CX≠0),并且串相等(ZF=1),則繼續(xù)比較REPZ ;每執(zhí)行一次串指令,CX減1 ;并判斷ZF是否為0, ;只要CX=0或ZF=0,重復(fù)執(zhí)行結(jié)束REPZ重復(fù)前綴指令REPZ/REPE前綴可以理解為:當(dāng)數(shù)據(jù)REPNZ重復(fù)前綴指令REPNZ/REPNE前綴可以理解為:當(dāng)數(shù)據(jù)串沒(méi)有結(jié)束(CX≠0),并且串不相等(ZF=0),則繼續(xù)比較REPZ ;每執(zhí)行一次串指令,CX減1 ;并判斷ZF是否為1, ;只要CX=0或ZF=1,重復(fù)執(zhí)行結(jié)束REPNZ重復(fù)前綴指令REPNZ/REPNE前綴可以理解為:例2.57:比較字符串 movsi,offsetstring1 movdi,offsetstring2 movcx,count cld
repzcmpsb ;重復(fù)比較兩個(gè)字符 jnzunmat ;字符串不等,轉(zhuǎn)移 moval,0 ;字符串相等,設(shè)置00h jmpoutput ;轉(zhuǎn)向outputunmat: moval,0ffh ;設(shè)置ffhoutput: movresult,al ;輸出結(jié)果標(biāo)記解釋例2.57:比較字符串 movsi,offsetstri重復(fù)比較的解釋指令repzcmpsb結(jié)束重復(fù)執(zhí)行的情況①ZF=0,即出現(xiàn)不相等的字符②CX=0,即比較完所有字符:這種情況下,如果ZF=0,說(shuō)明最后一個(gè)字符不等;而ZF=1表示所有字符比較后都相等,也就是兩個(gè)字符串相同所以,重復(fù)比較結(jié)束后,jnzunmat指令的條件成立ZF=0,字符串不相等重復(fù)比較的解釋指令repzcmpsb結(jié)束重復(fù)執(zhí)行的情況例2.58:查找字符串
movdi,offsetstring moval,20h movcx,count cld
repnzscasb
;搜索 jzfound ;為0(ZF=1),發(fā)現(xiàn)空格 ... ;不含空格,則繼續(xù)執(zhí)行found: ...例2.58:查找字符串 movdi,offsetstri2.6處理機(jī)控制類指令對(duì)CPU狀態(tài)進(jìn)行控制的指令NOPCS:SS:DS:ES:LOCKHLTESCWAIT2.6處理機(jī)控制類指令對(duì)CPU狀態(tài)進(jìn)行控制的指令空操作指令NOP不執(zhí)行任何操作,但占用一個(gè)字節(jié)存儲(chǔ)單元,空耗一個(gè)指令執(zhí)行周期NOP常用于程序調(diào)試在需要預(yù)留指令空間時(shí)用NOP填充代碼空間多余時(shí)也可以用NOP填充還可以用NOP實(shí)現(xiàn)軟件延時(shí)事實(shí)上,NOP和XCHGAX,AX的指令代碼一樣,都是90HNOP空操作指令NOPNOP段超越前綴指令在允許段超越的存儲(chǔ)器操作數(shù)之前,使用段超越前綴指令,將采用指定的段寄存器尋址操作數(shù)CS:
;使用代碼段的數(shù)據(jù)SS:
;使用堆棧段的數(shù)據(jù)DS:
;使用數(shù)據(jù)段的數(shù)據(jù)ES:
;使用附加段的數(shù)據(jù)段超越前綴指令在允許段超越的存儲(chǔ)器操作數(shù)之前,使用段超越前綴封鎖前綴指令 LOCK
;封鎖總線這是一個(gè)指令前綴,可放在任何指令前這個(gè)前綴使得在這個(gè)指令執(zhí)行時(shí)間內(nèi),8086處理器的封鎖輸出引腳有效,即把總線封鎖,使別的控制器不能控制總線;直到該指令執(zhí)行完后,總線封鎖解除封鎖前綴指令 LOCK ;封鎖總線暫停指令
HLT
;進(jìn)入暫停狀態(tài)暫停指令使CPU進(jìn)入暫停狀態(tài),這時(shí)CPU不進(jìn)行任何操作。當(dāng)CPU發(fā)生復(fù)位或來(lái)自外部的中斷時(shí),CPU脫離暫停狀態(tài)HLT指令可用于程序中等待中斷。當(dāng)程序中必須等待中斷時(shí),可用HLT,而不必用軟件死循環(huán)。然后,中斷使CPU脫離暫停狀態(tài),返回執(zhí)行HLT的下一條指令暫停指令 HLT ;進(jìn)入暫停狀態(tài)交權(quán)指令
ESC
6位立即數(shù),reg/mem;把浮點(diǎn)指令交給浮點(diǎn)處理器執(zhí)行浮點(diǎn)協(xié)處理器8087指令是與8086的整數(shù)指令組合在一起的,當(dāng)8086發(fā)現(xiàn)是一條浮點(diǎn)指令時(shí),就利用ESC指令將浮點(diǎn)指令交給8087執(zhí)行實(shí)際編寫(xiě)程序時(shí),一般采用易于理解的浮點(diǎn)指令助記符格式ESC6,[SI] ;實(shí)數(shù)除法指令:FDIVdwordptr[SI]ESC20H,AL ;整數(shù)加法指令:FADDST(0),ST第2章交權(quán)指令 ESC6位立即數(shù),reg/mem第2章等待指令 WAIT
;進(jìn)入等待狀態(tài)8086利用WAIT指令和測(cè)試引腳實(shí)現(xiàn)與8087同步運(yùn)行浮點(diǎn)指令經(jīng)由8086處理發(fā)往8087,并與8086本身的整數(shù)指令在同一個(gè)指令序列;而8087執(zhí)行浮點(diǎn)指令較慢,所以8086必須與8087保持同步等待指令 WAIT ;進(jìn)入等待狀態(tài)第2章總結(jié)本章詳細(xì)而完整地介紹了8086的16位指令系統(tǒng)的每條指令希望大家進(jìn)行一下整理(總結(jié)):尋址方式指令支持的操作數(shù)形式指令對(duì)標(biāo)志的影響常見(jiàn)編程問(wèn)題通過(guò)復(fù)習(xí)整理,形成指令系統(tǒng)的整體概念,進(jìn)而掌握常用指令第2章總結(jié)本章詳細(xì)而完整地介紹了8086的16位指令系統(tǒng)第2章教學(xué)要求(4)熟悉串操作尋址特點(diǎn)掌握基本指令:MOVS/LODS/STOS、REP熟悉特色指令:CMPS/SCAS、NOP了解不常使用的指令:REPZ/REPNZ、LOCK/HLT/ESC/WAIT習(xí)題4(p70)2.152.162.26⑶⑹⑺第2章教學(xué)要求(4)熟悉串操作尋址特點(diǎn)串傳送MOVSB(正向DF=0)串傳送MOVSB(正向DF=0)串傳送MOVSW(反向DF=1)串傳送MOVSW(反向DF=1)LODS
(正向DF=0)LODS(正向DF=0)STOS(正向DF=0)STOS(正向DF=0)REPSTOSB(正向DF=0)REPSTOSB(正向DF=0)REPMOVSB(正向DF=0)REPMOVSB(正向DF=0)課間休息課間休息2.5串操作類指令串操作指令是8086指令系統(tǒng)中比較獨(dú)特的一類指令,采用比較特殊的數(shù)據(jù)串尋址方式,在操作主存連續(xù)區(qū)域的數(shù)據(jù)時(shí),特別好用、因而常用重點(diǎn)掌握: MOVSSTOSLODS CMPSSCASREP一般了解: REPZ/REPEREPNZ/REPNE2.5串操作類指令串操作指令是8086指令系統(tǒng)中比較獨(dú)特串?dāng)?shù)據(jù)類型串操作指令的操作數(shù)是主存中連續(xù)存放的數(shù)據(jù)串(String)——即在連續(xù)的主存區(qū)域中,字節(jié)或字的序列串操作指令的操作對(duì)象是以字(W)為單位的字串,或是以字節(jié)(B)為單位的字節(jié)串串?dāng)?shù)據(jù)類型串操作指令的操作數(shù)是主存中連續(xù)存放的數(shù)據(jù)串(Str串尋址方式源操作數(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串尋址方式源操作數(shù)用寄存器SI尋址,默認(rèn)在數(shù)據(jù)段DS中,但允串傳送MOVS(movestring)把字節(jié)或字操作數(shù)從主存的源地址傳送至目的地址MOVSB
;字節(jié)串傳送:ES:[DI]←DS:[SI] ;SI←SI±1,DI←DI±1演示MOVSW
;字串傳送:ES:[DI]←DS:[SI] ;SI←SI±2,DI←DI±2演示串傳送MOVS(movestring)把字節(jié)或字操作數(shù)從主例2.52:字節(jié)串傳送
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é)束offset是匯編操作符,求出變量的偏移地址例2.52:字節(jié)串傳送 movsi,offsetsour例2.52:字串傳送
movsi,offsetsource movdi,offsetdestination movcx,50 ;cx←傳送次數(shù)
cld ;置DF=0,地址增加again: movsb ;傳送一個(gè)字
deccx ;傳送次數(shù)減1 jnzagain
;判斷傳送次數(shù)cx是否為0 ;不為0,則到again位置執(zhí)行指令 ;否則,結(jié)束例2.52:字串傳送 movsi,offsetsourc串存儲(chǔ)STOS(storestring)把AL或AX數(shù)據(jù)傳送至目的地址STOSB
;字節(jié)串存儲(chǔ):ES:[DI]←AL ;DI←DI±1STOSW
;字串存儲(chǔ):ES:[DI]←AX ;DI←DI±2演示串存儲(chǔ)STOS(storestring)把AL或AX數(shù)據(jù)傳例2.53:串存儲(chǔ)
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?可不用給DI賦值嗎?DI為偶數(shù)即可例2.53:串存儲(chǔ) movax,0可將CLD改為STD嗎串讀取LODS(loadstring)把指定主存單元的數(shù)據(jù)傳送給AL或AXLODSB
;字節(jié)串讀?。篈L←DS:[SI] ;SI←SI±1LODSW
;字串讀?。篈X←DS:[SI] ;SI←SI±2演示串讀取LODS(loadstring)把指定主存單元的數(shù)據(jù)例2.54:串讀取-1
movsi,offsetblock movdi,offsetdplus movbx,offsetdminus
movax,ds moves,ax;數(shù)據(jù)都在一個(gè)段中,所以設(shè)置es=ds movcx,count ;cx←字節(jié)數(shù) cld例2.54:串讀取-1 movsi,offsetbloc例2.54:串讀?。?go_on: lodsb
;從block取出一個(gè)數(shù)據(jù) testal,80h ;檢測(cè)符號(hào)位,判斷是正是負(fù) jnzminus ;符號(hào)位為1,是負(fù)數(shù),轉(zhuǎn)向minus
stosb ;符號(hào)位為0,是正數(shù),存入dplus jmpagain ;程序轉(zhuǎn)移到again處繼續(xù)執(zhí)行 jnzgo_on ;完成正負(fù)數(shù)據(jù)分離例2.54:串讀取-2go_on: lodsb ;從blo例2.54:串讀?。?minus: xchgbx,di
stosb
;把負(fù)數(shù)存入dminus xchgbx,diagain: deccx ;字節(jié)數(shù)減1 jnzgo_on ;完成正負(fù)數(shù)據(jù)分離例2.54:串讀?。?minus: xchgbx,di串比較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串比較CMPS(comparestring)將主存中的源操例2.55:比較字符串 movsi,offsetstring1 movdi,offsetstring2 movcx,count cldagain: 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)記例2.55:比較字符串 movsi,offsetstri串掃描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串掃描SCAS(scanstring)將AL/AX減去至目例2.56:查找字符串
movdi,offsetstring moval,20h movcx,count cldagain: scasb
;搜索 jzfound ;為0(ZF=1),發(fā)現(xiàn)空格 deccx ;不是空格 jnzagain ;搜索下一個(gè)字符 ... ;不含空格,則繼續(xù)執(zhí)行found: ...例2.56:查找字符串 movdi,offsetstri重復(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前綴重復(fù)前綴指令(repeat)串操作指令執(zhí)行一次,僅對(duì)數(shù)據(jù)串中REP重復(fù)前綴指令REP前綴可以理解為:當(dāng)數(shù)據(jù)串沒(méi)有結(jié)束(CX≠0),則繼續(xù)傳送例2.52和例2.53中,程序段的最后3條指令,可以分別替換為: REPMOVSB和REPSTOSWREP ;每執(zhí)行一次串指令,CX減1 ;直到CX=0,重復(fù)執(zhí)行結(jié)束REP重復(fù)前綴指令REP前綴可以理解為:當(dāng)數(shù)據(jù)串沒(méi)有結(jié)束(C重復(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é)束第2章演示重復(fù)串傳送(例2.52) movsi,offsetsou重復(fù)串存儲(chǔ)(例2.53)movax,0movdi,0movcx,8000hcldrepstoswagain: stosw ;傳送一個(gè)字 deccx ;傳送次數(shù)減1 jnzagain ;判斷傳送次數(shù)cx是否為0第2章演示重復(fù)串存儲(chǔ)(例2.53)movax,0again: stoREPZ重復(fù)前綴指令REPZ/REPE前綴可以理解為:當(dāng)數(shù)據(jù)串沒(méi)有結(jié)束(CX≠0),并且串相等(ZF=1),則繼續(xù)比較REPZ ;每執(zhí)行一次串指令,CX減1 ;并判斷ZF是否為0, ;只要CX=0或ZF=0,重復(fù)執(zhí)行結(jié)束REPZ重復(fù)前綴指令REPZ/REPE前綴可以理解為:當(dāng)數(shù)據(jù)REPNZ重復(fù)前綴指令REPNZ/REPNE前綴可以理解為:當(dāng)數(shù)據(jù)串沒(méi)有結(jié)束(CX≠0),并且串不相等(ZF=0),則繼續(xù)比較REPZ ;每執(zhí)行一次串指令,CX減1 ;并判斷ZF是否為1, ;只要CX=0或ZF=1,重復(fù)執(zhí)行結(jié)束REPNZ重復(fù)前綴指令REPNZ/REPNE前綴可以理解為:例2.57:比較字符串 movsi,offsetstring1 movdi,offsetstring2 movcx,count cld
repzcmpsb ;重復(fù)比較兩個(gè)字符 jnzunmat ;字符串不等,轉(zhuǎn)移 moval,0 ;字符串相等,設(shè)置00h jmpoutput ;轉(zhuǎn)向outputunmat: moval,0ffh ;設(shè)置ffhoutput: movresult,al ;輸出結(jié)果標(biāo)記解釋例2.57:比較字符串 movsi,offsetstri重復(fù)比較的解釋指令repzcmpsb結(jié)束重復(fù)執(zhí)行的情況①ZF=0,即出現(xiàn)不相等的字符②CX=0,即比較完所有字符:這種情況下,如果ZF=0,說(shuō)明最后一個(gè)字符不等;而ZF=1表示所有字符比較后都相等,也就是兩個(gè)字符串相同所以,重復(fù)比較結(jié)束后,jnzunmat指令的條件成立ZF=0,字符串不相等重復(fù)比較的解釋指令repzcmpsb結(jié)束重復(fù)執(zhí)行的情況例2.58:查找字符串
movdi,offsetstring moval,20h movcx,count cld
repnzscasb
;搜索 jzfound ;為0(ZF=1),發(fā)現(xiàn)空格 ... ;不含空格,則繼續(xù)執(zhí)行found: ...例2.58:查找字符串 movdi,offsetstri2.6處理機(jī)控制類指令對(duì)CPU狀態(tài)進(jìn)行控制的指令NOPCS:SS:DS:ES:LOCKHLTESCWAIT2.6處理機(jī)控制類指令對(duì)CPU狀態(tài)進(jìn)行控制的指令空操作指令NOP不執(zhí)行任何操作,但占用一個(gè)字節(jié)存儲(chǔ)單元,空耗一個(gè)指令執(zhí)行周期NOP常用于程序調(diào)試在需要預(yù)留指令空間時(shí)用NOP填充代碼空間多余時(shí)也可以用NOP填充還可以用NOP實(shí)現(xiàn)軟件延時(shí)事實(shí)上,NOP和XCHGAX,AX的指令代碼一樣,都是90HNOP空操作指令NOPNOP段超越前綴指令在允許段超越的存儲(chǔ)器操作數(shù)之前,使用段超越前綴指令,將采用指定的段寄存器尋址操作數(shù)CS:
;使用代碼段的數(shù)據(jù)SS:
;使用堆棧段的數(shù)據(jù)DS:
;使用數(shù)據(jù)段的數(shù)據(jù)ES:
;使用附加段的
溫馨提示
- 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ù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年化學(xué)考試技能試題及答案
- 以思維導(dǎo)圖助力樂(lè)理考試?yán)斫庠囶}及答案
- 中國(guó)香料煙市場(chǎng)深度調(diào)查研究報(bào)告2025-2028版
- 中國(guó)食品廣告行業(yè)市場(chǎng)發(fā)展前景及發(fā)展趨勢(shì)與投資戰(zhàn)略研究報(bào)告2025-2028版
- 保險(xiǎn)學(xué)課后試題及答案
- 中國(guó)車載監(jiān)控行業(yè)市場(chǎng)發(fā)展現(xiàn)狀及前景趨勢(shì)與投資分析研究報(bào)告2025-2028版
- 中國(guó)象棋工藝品行業(yè)市場(chǎng)發(fā)展前景及發(fā)展趨勢(shì)與投資戰(zhàn)略研究報(bào)告2025-2028版
- 中國(guó)臘肉行業(yè)市場(chǎng)深度調(diào)研及發(fā)展趨勢(shì)與投資前景研究報(bào)告2025-2028版
- 中國(guó)羽毛工藝行業(yè)市場(chǎng)發(fā)展前景及發(fā)展趨勢(shì)與投資戰(zhàn)略研究報(bào)告2025-2028版
- 2025年樂(lè)理考試的備考計(jì)劃與節(jié)奏控制試題及答案
- 2024華能四川能源開(kāi)發(fā)有限公司下屬單位招聘筆試參考題庫(kù)附帶答案詳解
- 歷年貴州特崗試題及答案
- 2025怎樣正確理解全過(guò)程人民民主的歷史邏輯、實(shí)踐邏輯與理論邏輯?(答案3份)
- 完整版高中古詩(shī)文必背72篇【原文+注音+翻譯】
- 財(cái)務(wù)英文詞匯大全
- 實(shí)際控制人股東會(huì)決議
- 《給教師的100條建議》電子書(shū)
- 老視的機(jī)制及治療的研究進(jìn)展
- VDA6.3的P2-7條款
- 混凝土攪拌機(jī)設(shè)計(jì)論文
- 《Clean,Not Clean》RAZ分級(jí)閱讀繪本pdf資源
評(píng)論
0/150
提交評(píng)論