微機(jī)原理與接口技術(shù):第3章3-3-43-3-5_第1頁(yè)
微機(jī)原理與接口技術(shù):第3章3-3-43-3-5_第2頁(yè)
微機(jī)原理與接口技術(shù):第3章3-3-43-3-5_第3頁(yè)
微機(jī)原理與接口技術(shù):第3章3-3-43-3-5_第4頁(yè)
微機(jī)原理與接口技術(shù):第3章3-3-43-3-5_第5頁(yè)
已閱讀5頁(yè),還剩58頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1四、串操作類指令2串操作指令說(shuō)明針對(duì)數(shù)據(jù)塊或字符串的操作;可實(shí)現(xiàn)存儲(chǔ)器到存儲(chǔ)器的數(shù)據(jù)傳送;源操作數(shù)稱為源串,目標(biāo)操作數(shù)稱為目標(biāo)串。是唯一的一類源操作數(shù)和目標(biāo)操作數(shù)都在存儲(chǔ)單元的指令。用一條指令實(shí)現(xiàn)對(duì)一串字符或數(shù)據(jù)的操作,可以處理長(zhǎng)達(dá)64KB的字符串。一條帶重復(fù)前綴的串操作指令的執(zhí)行過(guò)程往往相當(dāng)于一個(gè)循環(huán)程序的運(yùn)行。3串操作指令的特點(diǎn)源串一般存放在DS中,偏移地址由SI指定,DS:SI,允許段重設(shè);目標(biāo)串必須在ES中,偏移地址由DI指定,ES:DI;指令自動(dòng)修改地址指針,修改方向由方向標(biāo)志位DF決定。DF=0DF=1串的長(zhǎng)度值由CX指定;可增加自動(dòng)重復(fù)前綴以實(shí)現(xiàn)自動(dòng)修改CX內(nèi)容。增地址方向;字節(jié)加1,字加2減地址方向;串操作指令的關(guān)鍵點(diǎn)應(yīng)預(yù)先設(shè)置源串指針(DS、SI)、目標(biāo)串指針(ES、DI),重復(fù)次數(shù)(CX)和操作方向(DF)。方向標(biāo)志位DF=?CLD:DF=0,串操作從低地址到高地址;STD:DF=1,串操作從高地址到低地址;4重復(fù)操作前綴串操作指令前可以添加一個(gè)適當(dāng)?shù)闹貜?fù)操作前綴,即:指令在執(zhí)行后不僅能按DF所決定的方向自動(dòng)修改地址指針SI和DI的內(nèi)容,還可在每完成一次操作后自動(dòng)修改串長(zhǎng)度CX的值,重復(fù)執(zhí)行串指令,直至CX=0或滿足指定的條件為止。56重復(fù)操作前綴無(wú)條件重復(fù)前綴REP條件重復(fù)前綴REPE相等重復(fù)REPZ為零重復(fù)REPNE不相等重復(fù)REPNZ不為零重復(fù)CX≠0ZF=1CX≠0ZF=0CX≠0重復(fù)一般加在傳送類指令之前一般加在比較類串指令之前7串操作指令流程(以傳送操作為例)取源串地址送SI取目標(biāo)串地址送DI串長(zhǎng)度值送CX傳送一個(gè)字節(jié)或字修改地址指針修改串長(zhǎng)度值傳送完否?NY置方向標(biāo)志DF8串操作指令串傳送MOVS串比較CMPS串掃描SCAS串裝入LODS串存儲(chǔ)STOS91.串傳送指令格式:

MOVSdest,srcMOVSBMOVSW當(dāng)標(biāo)志位DF=0時(shí),地址遞增;DF=1時(shí),地址遞減;串傳送指令常與無(wú)條件重復(fù)前綴連用串傳送指令應(yīng)用MOVS可實(shí)現(xiàn)內(nèi)存單元到內(nèi)存單元的數(shù)據(jù)傳送,解決了MOV指令不能直接在內(nèi)存單元之間傳送數(shù)據(jù)的限制。常與REP聯(lián)合使用,提高程序的運(yùn)行速度。10串傳送指令例將2000H:1200H地址開始的100個(gè)字節(jié)傳送到6000H:0000H開始的內(nèi)存單元中去。11REPMOVSBHLTMOVAX,2000HMOVDS,AXMOVAX,6000HMOVES,AXMOVSI,1200HMOVDI,0000HCLDMOVCX,100每傳送一個(gè)字節(jié),自動(dòng)修改地址指針及CX,直至CX=0122.串比較指令格式:

CMPSdest,srcCMPSBCMPSW串比較指令常與條件重復(fù)前綴連用,指令的執(zhí)行不改變操作數(shù),僅影響標(biāo)志位。前綴的操作對(duì)標(biāo)志位不影響。每進(jìn)行一次比較后,自動(dòng)修改地址指針,指向串中的下一個(gè)元素。串比較指令應(yīng)用和條件重復(fù)前綴連用,用來(lái)檢查兩個(gè)字符串是否相等。在程序應(yīng)用中,在串比較指令的后面,需要用一條指令來(lái)判斷是何種原因結(jié)束了串的比較。判斷的條件:ZF的取值。REPE/REPZ,ZF=1重復(fù);REPNE/REPNZ,ZF=0重復(fù);JZ/JNZ;CX是否為0,不影響ZF狀態(tài)。13143.串掃描指令格式:

SCASOPRDSCASBSCASW執(zhí)行與CMPS指令相似的操作,只是這里的源操作數(shù)是AX或AL;用AX或AL的值與目標(biāo)串中的字節(jié)或字進(jìn)行比較,比較結(jié)果不改變目標(biāo)操作數(shù),只影響標(biāo)志位。目標(biāo)串15串掃描指令的應(yīng)用常用于在一個(gè)字符串中搜索特定的關(guān)鍵字。把需要找的關(guān)鍵字放在AL或AX中,再用串掃描指令與字符串中各字符逐一比較。164串裝入指令將內(nèi)存中一串?dāng)?shù)據(jù)送累加器AL或AX格式:

LODSOPRDLODSBLODSW操作:對(duì)字節(jié):對(duì)字:源操作數(shù)[DS:SI][DS:SI]ALAX17串裝入指令LODS指令不影響標(biāo)志位,一般不加重復(fù)前綴。LODS指令將DS:SI指向的源串中的字或字節(jié)取到累加器AX或AL中后,根據(jù)DF的值自動(dòng)修改指針SI,以指向下一個(gè)要裝入的字節(jié)或字。串裝入指令LODSB可以用來(lái)代替以下兩條指令

MOVAL,[SI]

INCSILODSW可以用來(lái)代替以下三條指令

MOVAX,[SI]

INCSIINCSI18串裝入指令應(yīng)用用于將內(nèi)存某個(gè)區(qū)域的數(shù)據(jù)串依次裝入累加器,以便顯示或輸出到接口。19205.串存儲(chǔ)指令格式:

STOSOPRDSTOSBSTOSW操作:對(duì)字節(jié):AL對(duì)字:AX目標(biāo)串[ES:DI][ES:DI]之后根據(jù)DF取值自動(dòng)修改指針DI,指向下一個(gè)存儲(chǔ)單元21串存儲(chǔ)指令的應(yīng)用利用重復(fù)前綴REP,常用于對(duì)連續(xù)的存儲(chǔ)單元存入相同的值;此時(shí):將待送存的數(shù)據(jù)放入AL(字節(jié)數(shù))或AX(字?jǐn)?shù)據(jù));確定操作方向(增地址/減地址)和區(qū)域大?。ùL(zhǎng)度值);使用串存儲(chǔ)指令+無(wú)條件重復(fù)前綴,實(shí)現(xiàn)數(shù)據(jù)傳送。22串存儲(chǔ)指令例1

內(nèi)存某個(gè)區(qū)域清零將內(nèi)存某單元清零設(shè)計(jì)思想:區(qū)域首地址送ES:DI串長(zhǎng)度送CX置方向標(biāo)志DF0送累加器AL執(zhí)行串存儲(chǔ)指令p132串存儲(chǔ)指令例1將內(nèi)存中以MEM單元為結(jié)束地址的100個(gè)字存儲(chǔ)單元內(nèi)容清零。23LEADI,MEMMOVCX,100STDMOVAX,0REPSTOSWHLT串存儲(chǔ)指令例2例3-122425五、控制轉(zhuǎn)移類指令轉(zhuǎn)移指令循環(huán)控制過(guò)程調(diào)用中斷控制261.轉(zhuǎn)移指令無(wú)條件轉(zhuǎn)移指令

無(wú)條件轉(zhuǎn)移到目標(biāo)地址,執(zhí)行新的指令有條件轉(zhuǎn)移指令

在具備一定條件的情況下轉(zhuǎn)移到目標(biāo)地址通過(guò)修改指令的偏移地址或段地址及偏移地址實(shí)現(xiàn)程序的轉(zhuǎn)移27(1)無(wú)條件轉(zhuǎn)移指令格式:

JMPOPRD目標(biāo)地址與JMP在同一代碼段與JMP不在同一代碼段原則上可實(shí)現(xiàn)在整個(gè)內(nèi)存空間的轉(zhuǎn)移28無(wú)條件段內(nèi)轉(zhuǎn)移轉(zhuǎn)移的目標(biāo)地址在當(dāng)前代碼段內(nèi),段地址不改變。即:目標(biāo)地址是16位偏移地址。指令中直接給出目標(biāo)地址由指令中的寄存器或存儲(chǔ)器操作數(shù)指出目標(biāo)地址段內(nèi)直接轉(zhuǎn)移段內(nèi)間接轉(zhuǎn)移29無(wú)條件段間轉(zhuǎn)移轉(zhuǎn)移的目標(biāo)地址不在當(dāng)前代碼段內(nèi)。目標(biāo)地址為32位,包括段地址和偏移地址。指令中直接給出目標(biāo)地址由指令中的32位存儲(chǔ)器操作數(shù)指出目標(biāo)地址段間直接轉(zhuǎn)移段間間接轉(zhuǎn)移30(2)條件轉(zhuǎn)移指令在滿足一定條件下,程序轉(zhuǎn)移到目標(biāo)地址繼續(xù)執(zhí)行。條件轉(zhuǎn)移指令均為段內(nèi)短轉(zhuǎn)移,即轉(zhuǎn)移范圍為:-128------+12731條件轉(zhuǎn)移指令的應(yīng)用幾種條件轉(zhuǎn)移指令的應(yīng)用JC/JNC判斷CF的狀態(tài)。常用于比大小。JZ/JNZ判斷ZF的狀態(tài)。常用于循環(huán)體的結(jié)束判斷。JO/JNO判斷OF的狀態(tài)。常用于有符號(hào)數(shù)溢出的判斷。JP/JPE判斷PF的狀態(tài)。用于判斷運(yùn)算結(jié)果低8位中1的個(gè)數(shù)是否為偶數(shù)。JA/JAE/JB/JBE判斷CF或CF+ZF的狀態(tài)。常用于無(wú)符號(hào)數(shù)的大小比較32條件轉(zhuǎn)移指令應(yīng)用的幾點(diǎn)說(shuō)明條件轉(zhuǎn)移指令應(yīng)用中應(yīng)注意的問(wèn)題:對(duì)基于標(biāo)志位狀態(tài)來(lái)決定是否轉(zhuǎn)移的條件轉(zhuǎn)移指令,其前一條指令的執(zhí)行必須對(duì)相應(yīng)標(biāo)志位產(chǎn)生影響;不能用SF的狀態(tài)來(lái)決定兩個(gè)無(wú)符號(hào)數(shù)的大??;在有符號(hào)數(shù)運(yùn)算時(shí),應(yīng)考慮OF的狀態(tài),若OF=1則運(yùn)算結(jié)果溢出。相應(yīng)的,無(wú)符號(hào)數(shù)運(yùn)算時(shí)則應(yīng)考慮CF的狀態(tài)。PF和AF的狀態(tài)變化只受低8位運(yùn)算的影響。如:INC指令后不應(yīng)緊跟JNC/JC指令33轉(zhuǎn)移指令例2統(tǒng)計(jì)內(nèi)存數(shù)據(jù)段中以TABLE為首地址的100個(gè)8位符號(hào)數(shù)中正數(shù)、負(fù)數(shù)和零元數(shù)的個(gè)數(shù)。34轉(zhuǎn)移指令例(流程圖)將存放各元素個(gè)數(shù)的單元清零取首地址設(shè)串長(zhǎng)度取一個(gè)字節(jié)數(shù)正數(shù)個(gè)數(shù)加1零元素加1為負(fù)?為零?負(fù)數(shù)個(gè)數(shù)加1NYNY35轉(zhuǎn)移指令例START:XORAL,ALMOVPLUS,ALMOVMINUS,ALMOVZERO,ALLEASI,TABLEMOVCL,100CHECK:MOVAL,[SI]INCSIORAL,ALJSX1JZX2INCPLUSJMPNEXTX1:INCMINUSJMPNEXTX2:INCZERODECCLNEXT:JNZCHECKHLT

轉(zhuǎn)移指令例1內(nèi)存以TABLE為首地址的數(shù)據(jù)段中存放了100個(gè)8位無(wú)符號(hào)數(shù),試統(tǒng)計(jì)其中零元素的個(gè)數(shù),并將個(gè)數(shù)存入ZERO單元。36372.循環(huán)控制指令循環(huán)范圍:以當(dāng)前IP為中心的-128~+127范圍內(nèi)循環(huán)。循環(huán)次數(shù)由CX寄存器指定。循環(huán)指令:LOOP*LOOPZ/E*LOOPNZ/E無(wú)條件循環(huán)指令條件循環(huán)指令38無(wú)條件循環(huán)指令格式:LOOPLABEL循環(huán)條件:CX≠0操作:

DECCXJNZ符號(hào)地址相等或?yàn)?時(shí)轉(zhuǎn)移循環(huán)格式:

LOOPZ/LOOPEOPR功能:

CX←(CX)―1

測(cè)試(CX)≠0且ZF=1,轉(zhuǎn)移到標(biāo)號(hào)處繼續(xù)循環(huán),否則退出循環(huán)。39不相等或不為0時(shí)轉(zhuǎn)移循環(huán)格式:

LOOPNZ/LOOPNEOPR功能:

CX←(CX)―1測(cè)試(CX)≠0且ZF=0,轉(zhuǎn)移到標(biāo)號(hào)處繼續(xù)循環(huán),否則退出循環(huán)。40413.

程序調(diào)用和返回用于調(diào)用一個(gè)子過(guò)程;子過(guò)程由程序員預(yù)先設(shè)計(jì)并裝入內(nèi)存子過(guò)程執(zhí)行結(jié)束后要返回原調(diào)用處斷點(diǎn):調(diào)用指令下一條指令的地址;入口地址:子程序的第一條指令在內(nèi)存中的地址;調(diào)用程序斷點(diǎn)入口地址子程序42過(guò)程調(diào)用和轉(zhuǎn)移類指令的區(qū)別相同點(diǎn):兩者均是由指令給出下一條要執(zhí)行指令的目標(biāo)地址不同點(diǎn):轉(zhuǎn)移指令轉(zhuǎn)移的目標(biāo)是同一個(gè)(一類)程序模塊;過(guò)程調(diào)用的目標(biāo)對(duì)象是另一個(gè)獨(dú)立的程序模塊。轉(zhuǎn)移指令轉(zhuǎn)移到目標(biāo)后將沿著新的起點(diǎn)繼續(xù)執(zhí)行下去;僅需尋找轉(zhuǎn)移的目標(biāo)地址過(guò)程調(diào)用在被調(diào)用程序執(zhí)行結(jié)束后須返回到原調(diào)用處繼續(xù)執(zhí)行原程序。入口地址尋找斷點(diǎn)保護(hù)43調(diào)用指令的執(zhí)行過(guò)程保護(hù)斷點(diǎn);將調(diào)用指令的下一條指令的地址(斷點(diǎn))壓入堆棧獲取子過(guò)程的入口地址;子過(guò)程第1條指令的偏移地址執(zhí)行子過(guò)程,含相應(yīng)參數(shù)的保存及恢復(fù);恢復(fù)斷點(diǎn),返回原程序。將斷點(diǎn)偏移地址由堆棧彈出44過(guò)程調(diào)用段內(nèi)調(diào)用段間調(diào)用段內(nèi)直接調(diào)用段內(nèi)間接調(diào)用段間直接調(diào)用段間間接調(diào)用45(1)段內(nèi)調(diào)用被調(diào)用程序與調(diào)用程序在同一代碼段調(diào)用前只需保護(hù)斷點(diǎn)的偏移地址格式:

CALLNEARPROC執(zhí)行過(guò)程:近過(guò)程符號(hào)地址代碼段1調(diào)用程序被調(diào)用程序代碼段1將斷點(diǎn)的偏移地址壓入堆棧根據(jù)過(guò)程名找子程序入口也是子程序入口地址46段內(nèi)調(diào)用例(1)CALLTIMRE(2)CALLWORDPTR[SI]直接調(diào)用間接調(diào)用44H33HCALL代碼段數(shù)據(jù)段┇設(shè):SI=1200HCS=6000H1200H執(zhí)行第(2)條指令后:6000HCS=3344HIP=47(2)段間調(diào)用子過(guò)程與原調(diào)用程序不在同一代碼段先將斷點(diǎn)的CS壓棧,再壓入IP。調(diào)用前需保護(hù)斷點(diǎn)的段基地址和偏移地址48段間調(diào)用例格式:

CALLFARPROC格式例:CALLFARTIMRECALLDWORDPTR[SI]XXHXXHCALL代碼段數(shù)據(jù)段┇SIXXHXXHCSIP49(3)返回指令功能:從堆棧中彈出斷點(diǎn)地址,返回原程序格式:

RETnRET指令一般位于子程序的最后。返回指令50514.中斷指令幾個(gè)概念:中斷中斷源中斷的類型中斷指令引起CPU產(chǎn)生一次中斷的指令52中斷與過(guò)程調(diào)用:中斷是隨機(jī)事件或異常事件引起,調(diào)用則是事先已在程序中安排好;響應(yīng)中斷請(qǐng)求不僅要保護(hù)斷點(diǎn)地址,還要保護(hù)FLAGS內(nèi)容;調(diào)用指令在指令中直接給出子程序入口地址,中斷指令只給出中斷向量碼,入口地址則在向量碼指向的內(nèi)存單元中;中斷服務(wù)子程序均為遠(yuǎn)過(guò)程體。中斷向量表53(1)中斷指令格式:

INTn說(shuō)明:nх4中斷類型碼n=0?255nх4

XXHXXHXXHXXH入口的段地址入口的偏移地址存放中斷服務(wù)子程序入口地址的單元的偏移地址代碼段數(shù)據(jù)段┇該單元在數(shù)據(jù)段,段地址=DS┇54中斷指令的執(zhí)行過(guò)程將FLAGS壓入堆棧;將INT指令的下一條指令的CS、IP壓棧;由n×4得到存放中斷向量的地址;將中斷向

溫馨提示

  • 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ù)覽,若沒有圖紙預(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)論