控制轉(zhuǎn)移指令課件_第1頁
控制轉(zhuǎn)移指令課件_第2頁
控制轉(zhuǎn)移指令課件_第3頁
控制轉(zhuǎn)移指令課件_第4頁
控制轉(zhuǎn)移指令課件_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

復(fù)習(xí)1、邏輯運(yùn)算指令:ANDORXORNOTTEST2、移位指令:7/10/20231移位指令小結(jié)帶進(jìn)位位循環(huán)左移指令RCL帶進(jìn)位位循環(huán)右移指令RCR將操作數(shù)的高低4位或8位(字節(jié))數(shù)據(jù)相交換。循環(huán)左移指令ROL循環(huán)右移指令ROR將操作數(shù)乘以2的CL次。將補(bǔ)碼數(shù)除以2的CL次。算術(shù)左移指令SAL算術(shù)右移指令SAR將操作數(shù)乘以2的CL次。將操作數(shù)除以2的CL次。邏輯左移指令SHL邏輯右移指令SHR主要作用指令保存其它指令移入CF的值2試分析下面的程序段完成什么功能? MOVCL,04H SHLDX,CL

MOVBL,AH SHLAX,CL

SHRBL,CL ORDL,BL;04H→CL;DX邏輯左移4位,相當(dāng)于DX;低4位清零,DX=×××0H;AH→BL;AX邏輯左移4位,相當(dāng)于AX低4位;清零,AX=×××0H;BL邏輯右移4位,相當(dāng)于AH=0×H;現(xiàn)DL的高4位是原來DL的低4位,;現(xiàn)DL的低4位是原AH的高4位所以,完成將DX,AX組成的雙字邏輯左移4位。33.8控制轉(zhuǎn)移類指令1、無條件轉(zhuǎn)移指令2、條件轉(zhuǎn)移指令3、循環(huán)控制指令4、中斷指令4控制轉(zhuǎn)移類指令通過改變IP(和CS)值,實(shí)現(xiàn)程序執(zhí)行順序的改變用于實(shí)現(xiàn)分支、循環(huán)、過程等程序結(jié)構(gòu)常用指令重點(diǎn)掌握:JMP/Jcc/LOOPCALL/RET一般了解:INTn/IRETINTO LOOPZ/LOOPNZ51無條件轉(zhuǎn)移指令指令格式:

JMPlabel ;程序轉(zhuǎn)向label標(biāo)號指定的地址指令功能:使程序轉(zhuǎn)到指定的目標(biāo)地址處,并從該處開始繼續(xù)執(zhí)行,操作數(shù)label是要轉(zhuǎn)移到的目標(biāo)地址(目的地址、轉(zhuǎn)移地址)執(zhí)行JMP⑴段內(nèi)轉(zhuǎn)移、直接尋址;⑵段內(nèi)轉(zhuǎn)移、間接尋址⑶段間轉(zhuǎn)移、直接尋址;⑷段間轉(zhuǎn)移、間接尋址①JMPSHORTHELLO;轉(zhuǎn)移到目標(biāo)地址是;HELLO,IP被修改了②JMP[NEARPTR]ABC;轉(zhuǎn)移到目標(biāo)地址ABC,;IP被修改了6(1)段內(nèi)直接短程轉(zhuǎn)移格式及操作:JMPSHORTLabel;IP←IP+D8其中,SHORT為屬性操作符,表明指令代碼中的操作數(shù)是一個以字節(jié)二進(jìn)制補(bǔ)碼形式表示的偏移量,它只能在-128~+127范圍內(nèi)取值。SHORT在指令中可以省略。指令執(zhí)行時,轉(zhuǎn)移的目標(biāo)地址由當(dāng)前的IP值與指令代碼中8位偏移量之和決定。9(2)段內(nèi)直接近程轉(zhuǎn)移

格式及操作:JMPNEARPTRLabel ;IP←IP+D16其中,NEARPTR為近程轉(zhuǎn)移的屬性操作符。段內(nèi)直接近程轉(zhuǎn)移指令控制轉(zhuǎn)移的目標(biāo)地址由當(dāng)前IP值與指令代碼中16位偏移量之和決定,偏移量的取值范圍為-32768~+32767。轉(zhuǎn)移的過程和短程轉(zhuǎn)移過程基本相同(同理,屬性運(yùn)算符NEARPTR在指令中可以省略)。10(3)段內(nèi)間接轉(zhuǎn)移格式及操作:JMPWORDPTROPD ;IP←(EA)該指令將轉(zhuǎn)移的目標(biāo)地址預(yù)先存放在某寄存器或存儲器的兩個連續(xù)單元中,指令中只需給出該寄存器號或存儲單元地址,OPD可為存儲器或寄存器操作數(shù)。OPD為寄存器時,不加WORDPTR。以上3種轉(zhuǎn)移方式均為段內(nèi)轉(zhuǎn)移,指令執(zhí)行時,用指令提供的信息修改指令指針I(yè)P的內(nèi)容,CS的值不變。11(4)段間直接轉(zhuǎn)移格式及操作:JMPFARPTRLabel;IP←目標(biāo)標(biāo)號的偏移地址,;CS←目標(biāo)標(biāo)號所在段的段基址FARPTR為屬性運(yùn)算符,表示轉(zhuǎn)移是在段間進(jìn)行。目標(biāo)標(biāo)號在其他代碼段中,指令中直接給出目標(biāo)標(biāo)號的段基址和偏移地址,分別取代當(dāng)前IP及CS的值,從而轉(zhuǎn)移到另一代碼段中相應(yīng)的位置去執(zhí)行(同理,F(xiàn)ARPTR在指令中也可不寫出來)。12(5)段間間接轉(zhuǎn)移

格式及操作:JMPDWORDPTROPD;IP←(EA),CS←(EA+2)該轉(zhuǎn)移指令的執(zhí)行不影響任何標(biāo)志位。指令中由操作數(shù)OPD的尋址方式確定一個有效地址EA,指向存放轉(zhuǎn)移地址的偏移地址和段基址的單元,根據(jù)尋址方式求出EA后,訪問相鄰的4B單元,低位字單元的16位數(shù)據(jù)送到IP寄存器,高位字單元中的16位數(shù)據(jù)送到CS寄存器,得到要轉(zhuǎn)移去的目標(biāo)地址,實(shí)現(xiàn)段間間接轉(zhuǎn)移的目的。其中,OPR只能是存儲器操作數(shù)。例如:JMP

DWORDPTRLPA[BP][DI]132.條件轉(zhuǎn)移指令格式: Jcclabel功能:條件滿足,轉(zhuǎn)移到目的地址label去執(zhí)行;條件不滿足,順序執(zhí)行下一條指令,不影響標(biāo)志位。14相對尋址方式Jcc指令的操作數(shù)label是一個標(biāo)號條件轉(zhuǎn)移指令的目的地址必須在現(xiàn)行的代碼段內(nèi)一個8位位移量,表示Jcc指令后的那條指令的偏移地址,到目標(biāo)指令的偏移地址的地址位移8位位移量是相對于當(dāng)前IP的,且距當(dāng)前IP地址-128~+127個單元的范圍之內(nèi),屬于段內(nèi)短距離轉(zhuǎn)移Jcc指令為2個字節(jié),條件不滿足時的順序執(zhí)行就是當(dāng)前指令偏移指針I(yè)P加215Jcc指令的分類Jcc指令不影響標(biāo)志,但要利用標(biāo)志位。根據(jù)利用的標(biāo)志位不同,16條指令分成3種情況:(1)判斷單個標(biāo)志位狀態(tài)(2)比較無符號數(shù)高低(3)比較有符號數(shù)大小16(1)判斷單個標(biāo)志位狀態(tài)功能結(jié)果有進(jìn)位(借位)轉(zhuǎn)移結(jié)果無進(jìn)位(借位)轉(zhuǎn)移

CF=1CF=0JCdstJNCdst結(jié)果為零轉(zhuǎn)移結(jié)果不為零轉(zhuǎn)移

ZF=1ZF=0JZdstJNZdst結(jié)果溢出轉(zhuǎn)移

結(jié)果不溢出轉(zhuǎn)移OF=1OF=0JOdstJNOdst奇偶校驗(yàn)結(jié)果為偶轉(zhuǎn)移奇偶校驗(yàn)結(jié)果為奇轉(zhuǎn)移

PF=1PF=0JPdstJNPdst結(jié)果為負(fù)數(shù)轉(zhuǎn)移結(jié)果為正數(shù)轉(zhuǎn)移

SF=1SF=0JSdstJNSdst轉(zhuǎn)移條件條件轉(zhuǎn)移指令17例:JZ/JNZ指令 testal,80h ;測試AL的最高位 jznext1 ;D7=0(ZF=1),轉(zhuǎn)移 movah,0ffh ;D7=1,順序執(zhí)行

jmpdone

;無條件轉(zhuǎn)向next1: movah,0 done: ...

testal,80h ;測試最高位 jnznext2 ;D7=1(ZF=0),轉(zhuǎn)移 movah,0 ;D7=0,順序執(zhí)行

jmpdone ;無條件轉(zhuǎn)向next2: movah,0ffhdone: ...18例:JS/JNS指令leasi,Xleadi,Y

movax,[si] subax,[di] jnsnext negax;neg是求補(bǔ)指令:0-axnext: movresult,axX和Y為存放于X單元和Y單元的16位操作數(shù)計(jì)算|X-Y|(絕對值)結(jié)果存入result單元19例:JO/JNO指令

leasi,Xleadi,Ymovax,[si] subax,[di] jo overflow ... ;無溢出,結(jié)果正確overflow:... ;有溢出,出錯處理;X和Y為存放于X單元和Y單元的字操作數(shù);計(jì)算X-Y;若溢出,則轉(zhuǎn)移到overflow處理20例:JP/JNP指令

andal,7fh ;最高位先置“0”,并判斷“1”的個數(shù) jnpnext ;個數(shù)已為奇數(shù),則轉(zhuǎn)向next oral,80h ;否則,最高位置“1”next: ...;設(shè)字符的ASCII碼在AL寄存器中;若該字符ASCII碼中為“1”的個數(shù)已為奇數(shù)時;則令其最高位為“0”;否則令最高位為“1”;將字符加上奇校驗(yàn)位21例:JC/JNC指令 xoral,al ;AL=0,CF=0again: cmpbx,0 jznext shlbx,1 ;也可使用shrbx,1 ADCal,0 ;AL=AL+(CF) jmpagainnext: ... ;AL保存1的個數(shù)

;記錄BX中1的個數(shù)——方法122記錄BX中“1”的個數(shù)——方法2 xoral,al again: testbx,0ffffh jznext shlbx,1 jncagain incal jmpagainnext: ... ;AL=0,CF=0;等價于cmpbx,0;AL保存1的個數(shù);若bx=0,轉(zhuǎn)到next;否則,bx邏輯左移1位;CF=0,轉(zhuǎn)到again;CF=1,al加1;無條件轉(zhuǎn)到again23(2)比較無符號數(shù)高低無符號數(shù)的大小用高(Above)、低(Below)表示,利用CF確定高低利用ZF標(biāo)志確定相等(Equal)兩數(shù)的高低分成:低于(不高于等于):JB(JNAE/JC)不低于(高于等于):JNB(JAE/JNC)低于等于(不高于):JBE(JNA)不低于等于(高于):JNBE(JA)相等(等于零):JE/JZ不相等(不等于零):JNE/JNZ24(3)比較有符號數(shù)大小有符號數(shù)的大小用

大(Greater)?。↙ess)表示利用ZF標(biāo)志確定相等(Equal)兩數(shù)的大小分成4種關(guān)系:⑴小于(不大于等于):JL(JNGE)⑵不小于(大于等于):JNL(JGE)⑶小于等于(不大于):JLE(JNG)⑷不小于等于(大于):JNLE(JG)25JccM,N MN 無符號數(shù)(A,B)有符號數(shù)(G,L)<(?>=) JB(JNAE)JL(JNGE)<=(?>)

JBE(JNA)

JLE(JNG)>(?<=) JA(JNBE) JG(JNLE)>=(?<) JNB(JAE)JNL(JGE)= JE/JZ≠ JNE/JNZ26例:比較無符號數(shù)

cmpax,bx;比較ax和bx jnbnext ;若ax≥bx,轉(zhuǎn)移 xchgax,bx;若ax<bx,交換next: ...結(jié)果:AX保存較大的無符號數(shù)27例:比較有符號數(shù)

cmpax,bx ;比較ax和bx jnlnext ;若ax≥bx,轉(zhuǎn)移 xchgax,bx ;若ax<bx,交換next: ...結(jié)果:AX保存較大的有符號數(shù)28例、分析下列程序段,程序如何執(zhí)行? ADDAX,BX JNOL1 JNCL2L1: SUBAX,BXL2: JMPSHORTL529①AX=B568H,BX=54B7H解:第一條:ADDAX,BXAX=B568H1011010101101000BX=54B7H0101010010110111AX=0A1FH0000101000011111第二條:JNOL1所以,CF=1,OF=0;OF=0,滿足條件,轉(zhuǎn)去L1執(zhí)行30②AX=42C8H,BX=608DH解:第一條:ADDAX,BXAX=42C8H0100001011001000BX=608DH0110000010001101AX=A355H1010001101010101第二條:JNOL1第三條:JNCL2所以,CF=0,OF=1;OF=1,不滿足條件,順序執(zhí)行;CF=0,滿足條件,轉(zhuǎn)去L2執(zhí)行31

CMPAL,BL

JNGBBB XCHGAL,BLBBB: CMPAL,CL

JNGCCC XCHGAL,CLCCC: HLT;AL和BL比較;若AL≤BL,則轉(zhuǎn);若AL>BL,則交換;AL和CL比較;若AL≤CL,則轉(zhuǎn);若AL>CL,則交換舉例:比較AL、BL、CL中帶符號數(shù)的大小,將

最小數(shù)放在AL中。32例、找出有符號數(shù)的最大值CMPA,BJG 大于(A>B)時轉(zhuǎn)移 JNE不等于(A≠B)時轉(zhuǎn)移33 MOVAX,X CMPAX,50

JGTOO_HIGH SUBAX,Y

JOOVERFLOW

JNSNONNEG NEGAX

NONNEG:MOVRESULT,AX

TOO_HIGH:…

OVERFLOW:…

例:X>50,轉(zhuǎn)到TOO_HIGH;

計(jì)算X-Y:溢出轉(zhuǎn)到OVERFLOW,

否則|X-Y|→RESULT

343.循環(huán)指令(loop)控制某程序段反復(fù)執(zhí)行的次數(shù)。循環(huán)指令默認(rèn)利用CX計(jì)數(shù)器,方便實(shí)現(xiàn)計(jì)數(shù)循環(huán)的程序結(jié)構(gòu)label操作數(shù)采用相對尋址方式LOOPlabel ;CX←CX-1,

;CX≠0,循環(huán)到標(biāo)號labelLOOPZlabel ;CX←CX-1,

;CX≠0且ZF=1,循環(huán)到標(biāo)號labelLOOPNZlabel ;CX←CX-1,

;CX≠0且ZF=0,循環(huán)到標(biāo)號labelJCXZlabel ;CX=0,轉(zhuǎn)移到標(biāo)號label35LOOP格式:LOOP

label操作:(CX)-1→CX;若(CX)≠0,則轉(zhuǎn)至label處執(zhí)行;否則退出循環(huán),執(zhí)行LOOP后面的指令。

不影響標(biāo)志位。實(shí)際上,該指令可以等價兩條指令:

DECCX;CX-1→CXJNZdst;ZF=0,轉(zhuǎn)向dst執(zhí)行364.中斷指令中斷(Interrupt)是又一種改變程序執(zhí)行順序的方法中斷具有多種中斷類型中斷的指令有3條:INTnIRETINTO

溫馨提示

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

評論

0/150

提交評論